int osd_lookuppatch(<geometry>geometry, int face_id, float face_u, float face_v, int &patch_id, float &patch_u, float &patch_v)
テクスチャアトリビュートを指定しなかった場合、この関数は、本来のポリゴン補間を使用します。
int osd_lookuppatch(<geometry>geometry, int face_id, float face_u, float face_v, int &patch_id, float &patch_u, float &patch_v, string attribute)
テクスチャアトリビュートを指定した場合、この関数は、そのアトリビュートのUVを使って、フェース座標をOSDパッチに変換します。
フェース(face_u
とface_v
)内のポイントに対するface_id
とテクスチャ座標を指定すると、この関数はそれに相当するpatch_id
(Catmull-Clarkサブディビジョンフェース)とパッチ補間(patch_u
とpatch_v
)を返します。
パッチからフェースにマッピングする逆の関数は、osd_lookupfaceです。
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo
)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop
参照を指定することができます。
face_id
Houdiniポリゴンフェースのプリミティブ番号。
face_u
, face_v
Houdiniプリミティブにマッピングするサブディビジョンパッチの座標。
フェース座標の値の範囲は0から1にしてください。三角形に関しては、すべての値が有効であるわけではありません。
このテクスチャ座標は、この関数に渡したアトリビュートに応じて指定してください。
無効な座標が渡されると、この関数は失敗して0
を返します。
&patch_id
この関数は、該当するOSDパッチ番号でこの変数を上書きします。
また、このpatch_id
は、PTexテクスチャマッピングを実行した時のフェースの識別に使用される整数値と同じです。
&patch_u
, &patch_v
この関数は、OSDパッチ上の該当するU/V座標でこれらの変数を上書きします。
Returns
成功すれば1
、エラーになれば0
。
Examples ¶
// この関数を使用することで、Scatter SOPで生成されたポイントをサブディビジョン境界サーフェスまで動かすことができます。 // Scatter SOPでは、(Output Attributesタブで)"sourceprim"を保存する必要があります。 // また、テクスチャ座標をソースジオメトリから転送させる必要があります。 void movePointToLimitSurface(string file; vector P, uv; int sourceprim) { int patch_id = -1; float patch_u, patch_v; if (osd_lookuppatch(file, sourceprim, uv.x, uv.y, patch_id, patch_u, patch_v, "uv")) { vector tmpP; if (osd_limitsurface(file, "P", patch_id, patch_u, patch_v, tmpP)) P = tmpP; } }
See also | |
subd |