前回に続き、Houdini VEX勉強回。
今回は「近接ポイントの情報を取得する」VEX系の関数についてです。
近接ポイントとはこの場合、単純に距離の近いポイントのことを指します。
近接ポイントを取得するVEX関数は幾つかあります。
ここではnearpoint()とnearpoints()を取り上げようとおもいます。
表記の違いは名前に”s”があるかないか。まぎらわしい。
nearpoint()
一番近いポイント番号を取得する。
”一番近い”だから、取得するポイントは1コ。
最大どこまでの距離を探すか指定する。ポイントが見つからなければ-1。
1 | int nearpoint(検出先の入力, 検索位置, 検索距離) |
「作例」
一番近いポイント取得して色と高さをかえてみた。
ネットワークはこうじゃ!
VEXコードはこうじゃ!
1 2 3 4 5 6 7 | vector pos = point( 1 , "P" , 0 ); i@npt = nearpoint( 0 , pos, chf( "dist" )); if (@ptnum = = @npt){ @Cd = { 0 , 0 , 1 }; @P + = { 0 , 0.25 , 0 }; } |
次じゃ!
nearpoints()
近接ポイントを探して、見つかったポイントを配列で返す。
先述のnearpoint()の配列版。
1番近いポイントに限らず、2番目3番目・・・と見つかった分だけ配列に格納する。
最大で何個のポイントを探すが指定する。
1 | int nearpoints(検出先の入力, 検索位置, 検索距離, 見つけるポイントの最大個数) |
「作例」
パーティクルの各点つないでみた。
(同様結果はConnect Adjacent Pieces(SOP)でもできる)
ネットワークはこうじゃ!
VEXコードはこうじゃ!
1 2 3 4 5 6 7 8 9 10 | vector pos = point( 0 , "P" , @ptnum); i[]@npts = nearpoints( 0 , pos, chf( "dist" ), chi( "maxpt" )); foreach( int pt; @npts){ if (pt>@ptnum && pt! = @ptnum){ int prim = addprim(geoself(), "polyline" ); addvertex(geoself(), prim, @ptnum); addvertex(geoself(), prim, pt); } } |
以上じゃ!
間違ってたら教えてほしいのじゃ!
鵜呑みにすると危ないじゃ!
これサンプルファイルじゃ!
VEX勉強シリーズはもう少し続くじゃ そのうち書きます。
[参考] マニュアル
nearpoint()
http://www.sidefx.com/docs/houdini/vex/functions/nearpoint
nearpoints()
http://www.sidefx.com/docs/houdini/vex/functions/nearpoints
コメント