int osd_lookupface(<geometry>geometry, int patch_id, float patch_u, float patch_v, int &face_id, float &face_u, float &face_v)
テクスチャアトリビュートを指定しなかった場合、この関数は、本来のポリゴン補間を使用します。
int osd_lookupface(<geometry>geometry, int patch_id, float patch_u, float patch_v, int &face_id, float &face_u, float &face_v, string attribute)
テクスチャアトリビュートを指定した場合、この関数は、そのアトリビュートのUVを使って、パッチ座標をHoudiniジオメトリに変換します。
ジオメトリ内の各ポリゴンは、1つ以上のCatmull-Clarkサブディビジョンパッチを生成します。 四角形のポリゴンは単一パッチを生成するのに対し、五角形のポリゴンは5つのパッチを生成します。 この関数は、サブディビジョンパッチIDとHoudiniポリゴン(フェース)とのマッピングに役立ちます。 フェースからパッチにマッピングする逆の関数は、osd_lookuppatchです。
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo
)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop
参照を指定することができます。
patch_id
OSDパッチのID番号。
patch_u
, patch_v
Houdiniプリミティブにマッピングするサブディビジョンパッチの座標。これらの値の範囲は0から1にしてください。
&face_id
この関数は、該当するフェースのHoudiniプリミティブ番号でこの変数を上書きします。
&face_u
, &face_v
この関数は、Houdiniフェース上の該当するU/V座標でこれらの変数を上書きします。出力される座標の値の範囲は0から1です。
Returns
成功すれば1
、エラーになれば0
。
Examples ¶
void scatterOnLimitSurface(string file, texmap; int geo_handle; int npts) { int npatches = osd_patchcount(file); for (int i = 0; i < npts; ++i) { int patch_id = nrandom() * npatches; float patch_s = nrandom(); float patch_t = nrandom(); int face_id; float face_u, face_v; if (osd_lookupface(file, patch_id, patch_s, patch_t, face_id, face_u, face_v, "uv")) { vector clr = texture(texmap, face_u, face_v); vector P; osd_limitsurface(file, "P", patch_id, patch_s, patch_t, P); int ptnum = addpoint(geo_handle, P); // ばら撒かれたポイントを追加します。 if (ptnum >= 0) { addpointattrib(geo_handle, "Cd", clr); addpointattrib(geo_handle, "face_id", face_id); } } } }
See also | |
subd |