vector volumesmoothsamplev(<geometry>geometry, int primnum, vector pos)
vector volumesmoothsamplev(<geometry>geometry, string volumename, vector pos)
vector volumesmoothsamplev(<geometry>geometry, int primnum, vector pos, matrix3 &grad)
vector volumesmoothsamplev(<geometry>geometry, string volumename, vector pos, matrix3 &grad)
vector volumesmoothsamplev(<geometry>geometry, int primnum, vector pos, matrix3 &grad, matrix3 &hessX, matrix3 &hessY, matrix3 &hessZ)
vector volumesmoothsamplev(<geometry>geometry, string volumename, vector pos, matrix3 &grad, matrix3 &hessX, matrix3 &hessY, matrix3 &hessZ)
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo
)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop
参照を指定することができます。
Returns
指定した位置でサンプリングされたボリュームプリミティブ値。 ボクセル間の値は、滑らかな補間で評価されます。
grad
には、行列のi番目の列がボリュームのi番目のコンポーネントの勾配となっているmatrix3が返されます。
hessX
、hessY
、hessZ
には、それぞれX,Y,Zコンポーネントの2次微分となっているmatrix3が返されます。
primnum
やinputnum
が範囲外、ジオメトリが無効、指定したプリミティブがボリュームでもVDBプリミティブでもない場合は0を返します。
Examples ¶
P
点におけるボリューム値を使用して、P + u
点におけるボリューム値を近似計算。
vector P = {1.0, 2.0, 3.0}; matrix3 grad, hessX, hessY, hessZ; vector val1 = volumesmoothsamplev(0, "vel", P, grad, hessX, hessY, hessZ); vector u = {0.1, 0.01, 0.001}; vector val2 = volumesmoothsamplev(0, "vel", P + u); // テイラー展開してみると: // `val1 + u * grad`は`val2`とほぼ同じです。 // さらに2次近似: // `val1 + u * grad + 0.5 * set(dot(u, u*hessX), dot(u, u*hessY), dot(u, u*hessZ))`は`val2`とほぼ同じです。
volume |
|