gpt4 book ai didi

opengl - 使用光线转换时在深度缓冲区中写入正确的值

转载 作者:行者123 更新时间:2023-12-03 23:28:00 25 4
gpt4 key购买 nike

我正在 3d 纹理中进行光线转换,直到达到正确的值。我正在立方体中进行光线转换,并且立方角已经在世界坐标中,因此我不必将顶点与模型 View 矩阵相乘以获得正确的位置。

顶点着色器

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;

最佳答案

解决方案是:

vec4 depth_vec = ViewMatrix * gl_ProjectionMatrix * vec4(pos.xyz, 1.0);
float depth = ((depth_vec.z / depth_vec.w) + 1.0) * 0.5;
gl_FragDepth = depth;

关于opengl - 使用光线转换时在深度缓冲区中写入正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com