正しい値に達するまで、3Dテクスチャでレイキャスティングを行っています。私は立方体でレイキャスティングを行っていますが、立方体の角はすでにワールド座標にあるため、正しい位置を取得するために頂点にmodelviewmatrixを掛ける必要はありません。
バーテックスシェーダー
world_coordinate_ = gl_Vertex;
フラグメントシェーダー
vec3 direction = (world_coordinate_.xyz - cameraPosition_);
direction = normalize(direction);
for (float k = 0.0; k < steps; k += 1.0) {
....
pos += direction*delta_step;
float thisLum = texture3D(texture3_, pos).r;
if(thisLum > surface_)
...
}
すべてが期待どおりに機能します。私が今欲しいのは、デプスバッファに正しい値をサンプリングすることです。デプスバッファに書き込まれる値は、キューブ座標です。pos
しかし、私は3Dテクスチャの値を記述したいと思います。
したがって、立方体が10
原点から離れて配置され-z
、サイズがであるとし10*10*10
ます。正しく機能しない私の解決策はこれです:
pos *= 10;
pos.z += 10;
pos.z *= -1;
vec4 depth_vec = gl_ProjectionMatrix * vec4(pos.xyz, 1.0);
float depth = ((depth_vec.z / depth_vec.w) + 1.0) * 0.5;
gl_FragDepth = depth;