正しい値になるまで、3Dテクスチャでレイキャスティングを行っています。私はキューブでレイキャスティングを行い、キューブコーナーは既にワールド座標系になっていますので、頂点にmodelviewmatrixを掛けて正しい位置を取得する必要はありません。レイキャスティングを使用するときにデプスバッファに正しい値を書き込む
頂点シェーダ
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_)
...
}
すべてが期待どおりに動作
world_coordinate_ = gl_Vertex;
フラグメントシェーダは、私が今欲しいものデプスバッファへの正しい値をサンプリングすることです。深度バッファに書き込まれる値は、キューブ座標です。しかし、私は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;