美文网首页
Houdini VEX Learning记录之一

Houdini VEX Learning记录之一

作者: _More | 来源:发表于2021-10-30 11:20 被阅读0次

attribwrangle(VEX)

自定义数据类型

例如:float vScale = chf(‘vel_scale’);

其中float 是浮点数据类型 vScale是定义的名称 ch代表通道,f代表通道类型为浮点,()内部为浮点名称,'字符串',分号结尾

整理可得:float 空格 name  空格=空格chf(单引号+字符串)分号结尾

类似的有:

字符串类型 string stringParm = chs(‘string_example’);

整数类型 int intExample = chi('int_example');

矢量类型 vector vecExample = chv('vector_example');


v@v  =  {0,1,0};

前面的v是vector矢量,@v是获取速度velocity  空格 = 空格 {x,y,z}对应矢量的方向和大小

v@v = @N*vScale

同样的v@v = 出现时会覆盖掉之前的定义,即重定义,如上第一次定义了一个方向Y轴大小为1的速度  第二次重新定义沿着法线方向 大小为浮点数vScale与法线大小的乘积

v@Cd = {0,1,0};矢量获取Cd颜色为{红,绿,蓝},分号;结束

v@Cd = rand(seed num);  其中 seed num = @primnum /fit01(@float,min,max)

如果float name = chf(“”),变成了f@name = chf(“”);

在调用的时候前面直接写成@name  如:v@v = @N*@vScale

在属性函数中

point(inputnum,“P”,@ptnum)点的模型输入端数字(0/1/2/3),获取Poistion“位置”信息,获取点ID数量

 set(0,0,0) 设置对应的是XYZ或者 红绿蓝,也可以是rand变量或者fit01(@pscale,min,max)


又如:

float randomize =  rand(@id);定义浮点数 命名为randomize  赋予值为随机id值

f@inheritvel = 0.5; 浮点获取继承速度值并赋值为0.5


v@nearbyEdgepos =  minpos(2,@P); 定义矢量名称为nearbyEdgepos的值为  点到第二个输入端模型最近距离点位置

v@edgeDist =  distance(@nearbyEdgepos,@P);定义矢量名称为edeDist的距离值为nearbyRdgepos 到点的距离

即先寻找最近距离点,再求出点到点的距离


条件函数 Condition Statements

if(//This condition is true)                              >Greater than      >=Greater than or equals

{                                                                        < Less than          <= Less than or equals

    //Run this code;                                            == Equals             != Does not equal

}                                                                        & And

                                                                         || Or

例如:

if(@ptnum>1000)

{

@Cd = {0,0,1};

}

如果点序号大于1000  那么这些点序号大于1000的点颜色为蓝

函数嵌套,如:

if(@ptnum>1000)

 {

     @Cd = {0,0,1};

     if(@ptnum>1500&@ptnum<2000)

     {

           @Cd = (0,1,0);

      }

}

else

{

@Cd = {1,0,0};

}

第二个if成立的条件是建立在第一个if条件下的

----------------------------------------------------------------------

while&do 循环函数

while(//This condition is true)

{

   //Run this code;

}

尝试用while 写一个颜色的案例 例如:

v@v = {0,1,0};

while(@P.y<100)

{

       @Cd.g -= .1;

       @Cd.b -= .1;

        if(@Cd.g<=0);

        {

             pointremove(0,@ptnum);

        }

        break;

}

首先设置一个矢量方向为Y轴的速度,在条件函数while 下,如果位置信息小于100时,那么颜色green 和颜色blue 值会一直-1循环,直到小于或等于0被排除掉,即只剩下红色,嵌套条件函数if 当绿色green信息值 小于或等于0时,这些点会被移除,最后用break来终止本次循环。书写的过程要注意规范。

do循环案例:

do

{

        @P.y += .1;

        @icounter +=1;

}

while(@P.y<1000);

执行do循环函数,当y位置信息<1000时,点y位置循环+0.1,数量同时+1,直到y位置信息>1000时候,停止循环。

条件语句的简写形式:

@Cd = @ptnum<24 ? {1,0,0}:{0,1,0};

即当点数小于24时,我们将颜色设置为红或者绿

-------------------------------------------------

数组(矩阵)Arrays      ForEach Loop 例子

阵列:i[]@exampleArray = {1,2,3,4};

foreach循环:foreach(int x;@examplearray)

v[]@colors =  {{1,0,0},{0,1,0},{0,0,1}};

foreach(vector x;@colors)

{

         if(x={1,0,0})

         {

                  @colors[0] = set(rand(@ptnum+123),rand(@ptnum+12),rand(@ptnum+2))

          }

}

@Cd = @colors[0];

三元矩阵--矢量颜色为红绿蓝叠加色=白色

for 循环

int x;

for(x=0;x<3;x++)

{

//do this;

}

取整X ,开始X=0,当X 小于3时,执行 循环,完成一次循环X+1  当X>=3时,循环停止

由此我们可以看出foreach 循环与for循环的区别:foreach 需要数组,而for 循环不需要。

for循环想使用数组的时候,需要使用len()函数,以保证数组里面的数据能被循环到,如:

for(x=0;x<len(@examplearrray);x++)

相关文章

网友评论

      本文标题:Houdini VEX Learning记录之一

      本文链接:https://www.haomeiwen.com/subject/piwlnltx.html