关于近距离和远距离剪裁平面的投影,我有几个难题 我制作了一个立方体,正面为蓝色,位于+ z轴,背面为红色,位于-z轴,立方体的边长为0.5。 制作模型和视图矩阵单位矩阵,以正交投影为例。 当设置近和远剪裁平面负值时,结果面显示如下:
让我困惑的是:
1。OpenGL Projection Matrix声明,近平面是投影平面,是不是? OpenGL中的实际投影平面是什么?
2.使用glOrtho或类似的API时:
glOrtho(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top,
GLdouble nearVal, GLdouble farVal);
近剪裁平面始终为 -nearVal ,远剪裁平面解释为 -farVal 。它与相机的外观方向无关,因为相机位置和方向影响视图矩阵,在视图转换后,我们可以说OpenGL中的摄像头总是指向-Z轴,这就是我们解释nearVal和farVal的原因,我是对的吗?
3.在上图中,当摄像机在视锥体内时,如何投影到近平面?请帮助解释结果。
答案 0 :(得分:2)
OpenGL中的实际投影平面是什么?
没有。 OpenGL只是做数学。您使用的投影取决于您提供的数学,因此取决于您提供的投影矩阵。
我是对的吗?
清除。后投影Z如何解释什么"更接近"手段取决于很多东西。这取决于您的投影矩阵。但这也取决于你的glDepthRange
setting。默认情况下,将近平面映射到0,将远平面映射到1.然后,depth test设置。默认值为GL_LESS
。
如果你使用深度范围和深度测试的默认值,那么是的,你所说的是正确的。
在上图中,当摄像机位于视锥体内时,如何投影到近平面?请帮助解释结果。
投影始终朝向近平面方向。这意味着靠近近平面的物体将具有比那些更远的物体更深的深度值(假设默认为glDepthRange
)。因此,当您反转两个平面的方向时,您可以反转哪些对象更接近"。
因此:
没有深度测试的渲染在两者之间不会发生变化,因为哪个对象更接近" 未使用。没有深度测试,唯一重要的事情就是呈现的顺序。
使用深度测试进行渲染意味着将考虑更接近哪个对象。因此,如果存在重叠,则最远的对象将不可见。
面部剔除基于投影后窗口空间中对象顶点的明显winding order。改变近/远平面顺序有效地反转窗口空间坐标的Z.但是基于窗口空间Z,绕组顺序不;它只查看坐标的2D投影。因此,反转Z不会影响绕组顺序。
这就是为什么你的蓝色物体在第三次测试中胜出的原因。
将空间旋转180度与反转空间之间存在差异。后者相当于-1的等级。这代表了空间灵活性的变化,你可以通过严格的旋转来做到这一点。通过在此处否定Z,您可以反转空间。
您的相机来源"与正交投影或多或少无关。三角形背后的事实是"相机与投影数学无关。只要它在投影区域内,它就会可见。