opengl混合视角和ortographic投影

时间:2015-08-08 10:58:43

标签: opengl projection perspective

如何在openGL中混合使用ortographic和perspective投影? 必须在屏幕空间中绘制一些2d元素(无缩放,旋转等)。 这些2d元素具有z位置,它们必须出现在其他3d元素的前面/后面。 所以我设置了地形投影,绘制所有2d元素,然后设置透视投影并绘制所有3d元素。 结果是所有2d元素都绘制在顶部。似乎orto投影的z值和透视投影的z值不兼容(GL_DEPTH_TEST)。

另外所有2d和所有3d元素都可以正常工作,问题是当我尝试混合它们时。 预期投影是否会改变z值?以什么方式? 是否可以使用orto投影中的z值和透视投影中的z值进行深度测试,或者整个概念是否存在缺陷?

裸露的opengl1.5

1 个答案:

答案 0 :(得分:0)

  

似乎orto投影的z值和透视投影的z值不兼容(GL_DEPTH_TEST)。

情况确实如此。透视变换将Z值非线性映射到深度缓冲值。解决此问题的常用方法是在透视传递到深度纹理后复制深度缓冲区,并将其用作正交绘制内容的片段着色器中的附加输入,反转深度输入中的非线性并比较传入的Z与之协调;然后适当地丢弃。

也可以在透视绘制的几何体片段着色器中发射线性深度值,但透视投影的深度非线性有其目的;没有它你会在最重要的地方放松深度精度,接近观点。