前言:我們可以通過attribute wrangle節(jié)點進行書寫vex代碼
- 首先創(chuàng)建一個box姜贡,選中該節(jié)點按i進入
-
創(chuàng)建attribute wrangle節(jié)點赛不,連到box節(jié)點
-
選中attribute wrangle節(jié)點栖茉,然后按P打開參數(shù)面板纹笼,在紅色區(qū)域輸入vex代碼:
-
你也可以鼠標(biāo)點擊紅色區(qū)域,按ALT+E打開vex代碼編輯器:
一孝常、方法一:通過變量創(chuàng)建屬性
- 創(chuàng)建Houdini常用屬性時可以不指定類型旗们,如@N不用寫成v@N
- 寫法:
@+名字//如法線:@N
- 常用屬性
Houdini有許多浮點型的常用屬性,如@pscale,@width,以下是除浮點以外的其他類型
vector @P构灸,@accel上渴,@center,@dPdx喜颁,@dPDz稠氮,@Cd,@N半开,@scale隔披,@force,@rest寂拆,@torque锹锰,@up,@uv漓库,@v
vector4 @backtrack,@orient园蝠,@rot
int @id渺蒿,@ix,@iy彪薛,@iz茂装,@nextid怠蹂,@pstate,@resx少态,@resz城侧,@ptnum,@vtxnum彼妻,@primnum嫌佑,@numpt,@numvtx侨歉,@numprim屋摇,@group_*
string @name,@instance
- 簡寫可以賦初值幽邓,賦值時炮温,大括號{}里面不能有變量
@N = {0,1,0}//不能寫成@N = {0,@P.y,0}
- 如果想賦值變量,需要用set函數(shù)
@N = set(0,@P.y,0)
- 創(chuàng)建屬性時牵舵,如果@符號前不指定類型柒啤,則默認(rèn)是浮點
@foo 等價于 f@foo
- 簡寫方式
寫法:
縮寫數(shù)據(jù)類型+@+名字例子:
i@id =8;
f@width =1.0;
u@xy ={0.3,0.9};
v@w =set(@width,$PI,0.5);
p@point = {0,0,0,1};
2@scale_2d ={ {2,0}, {0,2} };
3@scale ={2,0,0, 0,2,0, 0,0,2};
4@trans ={1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1};
s@path = "op:/obj/geo1/pack1";
- 數(shù)組的簡寫方式
- 寫法:
縮寫數(shù)據(jù)類型+[]+@+名字 - 例子:
i[]@pointcloud ={0,1,2};
f[]@len =arrary(1,@Time,@width);
3[]@rotation;
s[]@letters ={'H','i'};
- 簡寫可以賦初值,非簡寫不能賦初值
//簡寫
i@id =8;
//非簡寫
int @id =8;//錯誤
- 非簡寫不能有算式畸颅,簡寫可以
float @mass = 1/area;//錯誤
- 非簡寫不能用函數(shù)担巩,簡寫可以
vector @up = set(0,1,0);//錯誤
二、方法二:通過函數(shù)來創(chuàng)建屬性
-
將attribute wrangle節(jié)點的Run Over選項修改為Detail(only once)--只運行一次重斑,因為我們創(chuàng)建屬性只需要創(chuàng)建一次就夠了
- 添加屬性方法:
1)addpointattrib/addvertexattrib/addprimattrib/adddetailattrib(參數(shù)1兵睛,參數(shù)2,參數(shù)3)窥浪;
- 添加位置點屬性/添加幾號面幾號頂點屬性/添加面屬性/添加整體屬性
- 參數(shù)1:你要添加到第幾個輸入端
- 參數(shù)2:屬性的名字
- 參數(shù)3:屬性的值
- 例子:
addpointattrib(0,"Cd",{0,0,0});
addvertexattrib(0,"Cd",{0,0,0});
addprimattrib(0,"Cd",{0,0,0});
adddetailattrib(0,"Cd",{0,0,0});
- 修改屬性方法:
1)setpointattrib/setprimattrib(參數(shù)1祖很,參數(shù)2,參數(shù)3漾脂,參數(shù)4);
- 設(shè)置位置點屬性/設(shè)置面屬性
- 參數(shù)1:你要獲取到第幾個輸入端
- 參數(shù)2:屬性的名字
- 參數(shù)3:你要設(shè)置幾號點/面
- 參數(shù)4:屬性的值
- 例子:
setpointattrib(0,"Cd",3,{1,0,0});
setprimattrib(0,"Cd",3,{1,0,0});
2)setvertexattrib(參數(shù)1假颇,參數(shù)2,參數(shù)3骨稿,參數(shù)4笨鸡,參數(shù)5);
- 設(shè)置幾號面的幾號頂點
- 參數(shù)1:你要獲取到第幾個輸入端
- 參數(shù)2:屬性的名字
- 參數(shù)3:你要設(shè)置幾號面
- 參數(shù)4:你要設(shè)置(參數(shù)3的值)號面的幾號頂點
- 參數(shù)5:屬性的值
- 例子:
setvertexattrib(0,"Cd",3,3,{1,0,0});
3)setdetailattrib(參數(shù)1,參數(shù)2坦冠,參數(shù)3);
- 設(shè)置整體幾何體的整體的屬性
- 參數(shù)1:你要獲取到第幾個輸入端
- 參數(shù)2:屬性的名字
- 參數(shù)3:屬性的值
- 例子:
setdetailattrib(0,"Cd",{1,0,0});
三形耗、查看屬性:
-
首先
- 通過這四個按鍵,分別查不同級別的數(shù)據(jù)
-
我們輸入以下vex代碼:
-
我們查了下頂點辙浑,和setvertexattrib(0,"Cd",3,3,{1,0,0})相對應(yīng)
- 貌似位置點的找不出變化的值激涤,可能是被覆蓋了?
四判呕、Attributes to Create
- 只允許創(chuàng)建指定屬性倦踢,默認(rèn) * 允許所有屬性創(chuàng)建
- 可以防止因為打字錯誤而創(chuàng)建出錯誤的屬性
-
測試:
1)首先新建一個attribute wrangle節(jié)點:
2)輸入指定屬性:
3)輸入vex語句:
4)查看屬性:在attribute wrangle節(jié)點上送滞,長按鼠標(biāo)中鍵:
- 可以發(fā)現(xiàn)我們創(chuàng)建的小寫cd屬性沒有創(chuàng)建出來,但是被指定的屬性卻可以被創(chuàng)建
五辱挥、簡寫與非簡寫在用途上的區(qū)別:
- 簡寫屬性:無論屬性存在與否犁嗅,都創(chuàng)建并賦值
- 非簡寫屬性:如果屬性已存在,不會覆蓋掉原屬性值晤碘;否則褂微,創(chuàng)建并賦值
- 一般用簡寫形式創(chuàng)建屬性,除非你需要上述功能
-
例子: