我正在阅读场景的深度缓冲区,但是当我旋转相机时,我注意到朝向屏幕边缘的深度会更接近相机。我认为冲击角度对深度缓冲有影响,但是当我向帧缓冲器绘制一个四边形时,我不希望这种情况发生(事实上这不是事实,但这总结了我需要的东西)。 / p>
我用以下内容线性化深度:
float linearize(float depth) {
float zNear = 0.1;
float zFar = 40.0;
return (2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
}
我认为以下内容是为了纠正这个问题,但它还不是很正确。 45.0是垂直摄像机的角度/ 2.侧面是距屏幕中心的空间。
const float angleVert = 45.0 / 180.0 * 3.17;
float sideAdjust(vec2 coord, float depth) {
float angA = cos(angleVert);
float side = (coord.y - 0.5);
if (side < 0.0) side = -side;
side *= 2.0;
float depthAdj = angA * side;
return depth / depthAdj;
}
要在相机前面显示平面深度结果的图形显示我的问题:
c
/ | \
/ | \
/ | \
closer further closer
is what I have, what I need:
c
| | |
| | |
| | |
even even even
答案 0 :(得分:2)
如何做到这一点的想法是在眼睛空间中找到位置P.考虑P从原点到点的向量。将P投影到眼睛方向矢量(眼睛空间总是(0,0,-1))。投射矢量的长度是您所需要的。