我正在3D紋理中進行光線投射,直到達到正確的值。我在立方體中進行光線投射,並且立方體角已經在世界座標中,所以我不必將頂點與模型視圖矩陣相乘以獲得正確的位置。使用光線投射時在深度緩衝區中寫入正確的值
頂點着色器
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_)
...
}
一切正常,我現在想的是採樣正確的值到深度緩衝。現在寫入深度緩衝區的值是立方體座標。但是我想要在3d紋理中寫入pos
的值。
所以我們可以說立方體放置在遠離原點的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;