我的openGL渲染深度接近1的值为什么?

我的openGL渲染深度接近1的值为什么?,opengl,glsl,depth,depth-buffer,depth-testing,Opengl,Glsl,Depth,Depth Buffer,Depth Testing,我做一些基本的事情 1) 计算我的位置 2) 将其存储到“gl_位置” 3) 然后根据我的位置信息将我的深度存储到vec2中 gl_Position = vec4( vVertexPos, 1 ) * mMVP; vDepth = gl_Position.zw; vDepth是着色器中上面的一个变量,我将其传递给片段着色器 out vec2 vDepth; 在片段着色器中,我将片段深度存储在gl_FragDepth中 gl_FragDepth = vDepth.x / vDepth.y;

我做一些基本的事情

1) 计算我的位置
2) 将其存储到“gl_位置”
3) 然后根据我的位置信息将我的深度存储到vec2中

gl_Position = vec4( vVertexPos, 1 ) * mMVP;
vDepth = gl_Position.zw;
vDepth是着色器中上面的一个变量,我将其传递给片段着色器

out vec2 vDepth;
在片段着色器中,我将片段深度存储在gl_FragDepth中

gl_FragDepth = vDepth.x / vDepth.y;
我的深度值都接近1的值。 我做错什么了吗? 我可能遗漏了一个步骤,该步骤将为我提供线性深度值?
当我计算我的相机信息时,我的近剪裁为0.01,远剪裁为200.0f,我需要近剪裁围绕该剪裁空间。

你不应该在片段着色器中设置
gl\u FragDepth
,除非你想要默认行为以外的东西(即,
gl\u FragDepth=gl\u FragCoord.z


请参阅:了解这对性能不好的原因。

您不应该在片段着色器中设置
gl\u FragDepth
,除非您需要默认行为以外的内容(即,
gl\u FragDepth=gl\u FragCoord.z


请参阅:了解这对性能不利的原因。

深度缓冲区精度使用得越快,越接近查看器。将近平面从眼睛向外推,但与远平面保持相同的距离,将在整个视图体积中平衡深度精度。您的vDepth也会根据1/w进行插值。

越快,您的深度缓冲精度就越接近查看器。将近平面从眼睛向外推,但与远平面保持相同的距离,将在整个视图体积中平衡深度精度。您的vDepth也将根据1/w在a中插值。

我的正常渲染过程工作正常。我生产的模型没问题。我想知道我可能会错过什么,使我的深度看起来更梯度。我的正常渲染过程的东西工作得很好。我生产的模型没问题。我想知道我可能会错过什么,使我的深度看起来更梯度。如果我改变我的近平面到我的远平面,我会不会停止近剪裁在这一点上正确?如果你的近平面等于你的远平面,那么是的,但这不是我说的。我想说的是假设(远-近)是恒定的,离眼睛越近,你在其他深度的精确度就越低。这部分是由于Z缓冲区不是线性的,而且如果眼睛附近没有任何东西可能被近平面剪裁,那么无论如何,你只是在浪费深度缓冲区的精度。长话短说,如果它不能把任何东西夹在眼睛附近,就把你的飞机推出来。好的,精密的部分是有意义的。在需要的地方保持我的精确性。我想我必须在我的着色器中更正确地编辑我的值,有点像这篇文章如何陈述?我想说的是,大多数时候你不应该自己修改你的Z深度,如果你是,你应该有一个很好的理由。您引用的教程修改了Z深度,因为它是在绘制视点替用画,模拟真实几何体的纹理2D精灵,并且正在修改Z深度,因此写入的Z深度是模拟几何体的Z深度,而不是正在绘制的精灵的Z深度。好吧,我需要延迟渲染的深度,如果我不使用它,我的深度就是所有那些0.9999接近值。所以我想把它们都妥善保存起来。希望能得到这样的图像。谷歌图片:如果我把我的近平面改成远平面,我会不会在那个点正确地停止近平面剪裁?如果你的近平面等于你的远平面,那么是的,但我不是这么说的。我想说的是假设(远-近)是恒定的,离眼睛越近,你在其他深度的精确度就越低。这部分是由于Z缓冲区不是线性的,而且如果眼睛附近没有任何东西可能被近平面剪裁,那么无论如何,你只是在浪费深度缓冲区的精度。长话短说,如果它不能把任何东西夹在眼睛附近,就把你的飞机推出来。好的,精密的部分是有意义的。在需要的地方保持我的精确性。我想我必须在我的着色器中更正确地编辑我的值,有点像这篇文章如何陈述?我想说的是,大多数时候你不应该自己修改你的Z深度,如果你是,你应该有一个很好的理由。您引用的教程修改了Z深度,因为它是在绘制视点替用画,模拟真实几何体的纹理2D精灵,并且正在修改Z深度,因此写入的Z深度是模拟几何体的Z深度,而不是正在绘制的精灵的Z深度。好吧,我需要延迟渲染的深度,如果我不使用它,我的深度就是所有那些0.9999接近值。所以我想把它们都妥善保存起来。希望能得到这样的图像。谷歌图片:好吧,基本上我要么用gldepsrange设置剪切数据,要么操纵变量,因为openGL为我存储了它们。或者将近剪裁和远剪裁数据传递给我的着色器进行计算。正确吗?好吧,基本上我要么用gldepsrange设置剪裁数据,要么操纵变量,因为openGL为我存储了它们。或者将近剪裁和远剪裁数据传递给我的着色器进行计算。对的