1-4期
195人加入学习
(33人评价)
Houdini 影视特效实验班

6个月零基础到入职

价格 ¥ 6198.00
教学计划
承诺服务

之所以vex表达式要在detail层级下运行,是因为要保持数据的轻量化,同一行表达式,如果在point层级下运行,那么有多少个点,这行表达式就会运行多少次,但是在detail层级下运行,这行表达式就只会运行一次。  在这里因为要写For循环语句,For循环语句运行一次就会循环五百零一遍,如果在point层级下写For循环语句,计算量会非常非常巨大

 

for(init; condition;change){ statement }循环语句格式,先运行init,再进行条件判断,判断为真,便执行大括号里边的statement,再执行change,进行条件判断,判断为假便退出循环;

for(int i = 0; i < npoints(0); i++){

      setpointattrib(0, "aaa", i, i, "set");

}     这个是for循环的标准写法;    先定义一个临时的int形式的变量,名字随便起,在这里起名为 i ; 数值是0,然后给一个条件,这个条件就是 i < npoints(0),当这个条件满足,即代表是真,那么就执行下边大括号里面的操作。

setpointattrib函数是给点设置一个属性,因为这是在Detail层级下运行,如果直接创建属性,这个属性会写入Detail层级下,所以需要用到这个函数,才能把属性写入point层级。 第一空填要把属性设置到哪一个对象,0即是代表自身;第二空是要设置的属性的名称;第三空是要设置属性的点的序号;第四空是要将属性设置为多少的值;第五空是用哪一种方式来设置属性。在这里,因为这是第一次循环,i 已经在上边设置为0,那么要设置属性的点的序号是0号,设置的属性的值是0。

完成第一次循环,进入第二次循环 i 的值会加1,此时 i 的值是0+1,等于1,进行条件判断,条件依然满足,输出依然为真,再执行一遍大括号里的操作,此时要设置属性的点的序号是1号,设置的属性的值是1。完成第二次循环,剩下的循环都是以此类推,当条件不再满足,那么便会退出循环

 

 

int temp_array[] = point(0, "taken_already", 0);     这句话是创建一个临时的整数型变量数组,读取的是0号点的i@already_taken[]属性的数值

[展开全文]

vex中写for loop:

for(int idx=0;idx<10; idx++){

}

for循环需要三个参数,用分号结尾,设置一个整数idx,从0开始(第一次迭代);运行这个loop多久(知道idx<10结束) ;从第一次循环开始,每次增量多少(idx每次+1)

 

setepointattrib(0, "test_ptnum", idx, idx, "set")

输入接口0,创建了一个叫test_ptnum的属性,使用idx作为点编号,使用idx set(设置)到idx上

[展开全文]

好记性不如烂笔头

for(int i ;i<npoints(0);i++{

vector cd = point(0,"Cd",i);//读取 cd

vector position = point(0,"P",i);//读取@P

 

 

要分清楚 赋值 和读取的  分别

 

pc cloud中  许多情况需要 一个个id来进行 某一个的 操作 也就是我们常用的 for 函数 

或者可以用for each  

定义一个 初始 inter 和一个数组  array

for each (int ps;pts) ;

 

 

组 里面 可以是 float intger vector

pts[0] 

数组 也就相当于一个选集  在一个选集里面进行循环 就需要 在选集数组里面进行迭代了  

比如我们有数组 pts[]  在其中迭代就是 

要设置 for  loop  或者 for each

 for loop (int i ;i<npoints;i++){

读取数值 ;cd p aa(自定义) 

指向数值;a=b  b=c

赋予数值(修改数值);

 

 

}关于之前的疑惑 

如何快速的获得一些数组  比如 

int pts[] = nearpoints() 找到一些符合半径 符合点数量的 点  第0个几何体上  但是并没有说 在哪一个点上执行搜索;

int pts[] = pcfind()

[展开全文]