模糊的OpenGL默认相机位置

模糊的OpenGL默认相机位置,opengl,opengl-es,3d,game-engine,game-physics,Opengl,Opengl Es,3d,Game Engine,Game Physics,在我的Opengl程序中(在我应用透视投影矩阵之前),每当我绘制某个对象时,我都会在世界坐标系的原点绘制它,但是几乎所有的Opengl教程都说明相机(我的投影视图)位于朝向正z轴的原点(这取决于您稍后在投影矩阵中如何处理z值),但是如果这是真的,我的相机(位于原点)如何能够查看位于原点的对象 注意:我需要这些信息,以便我移动世界并围绕原点旋转它,从而获得旋转相机的错觉。屏幕上显示的内容将取决于您应用于它的整个变换。我将您的问题解释为投影和(模型)都使用单位矩阵视图转换。在这种情况下,您直接在剪辑

在我的Opengl程序中(在我应用透视投影矩阵之前),每当我绘制某个对象时,我都会在世界坐标系的原点绘制它,但是几乎所有的Opengl教程都说明相机(我的投影视图)位于朝向正z轴的原点(这取决于您稍后在投影矩阵中如何处理z值),但是如果这是真的,我的相机(位于原点)如何能够查看位于原点的对象


注意:我需要这些信息,以便我移动世界并围绕原点旋转它,从而获得旋转相机的错觉。

屏幕上显示的内容将取决于您应用于它的整个变换。我将您的问题解释为投影和(模型)都使用单位矩阵视图转换。在这种情况下,您直接在剪辑空间中绘制。从技术上讲,这将在原点定义摄影机位置,但视锥台将相当于一个
正交(-1.0,1.0,-1.0,1.0,1.0,-1.0)
设置-因此,视锥台将位于摄影机的一半后面(这对于正交投影来说非常好,但可能看起来有悖常理)。对于摄影机方向,这一部分比较模糊。通常,GL有一个惯例,即摄影机朝-z方向看,但在剪辑空间中,+z将指向屏幕,而经典的
Ortho
Perspective
函数通过实际使用
z_-near=-near
z_-far=-far
fo来处理这一点r
near
far
参数。(这也是通过调用
Ortho
实现识别变换的原因,最后两个符号相对于x和y范围翻转).因此,在这种情况下,可以说相机实际上是沿着+z方向看的,也可以说相机是沿着-z方向看的,但近平面和远平面是通过投影来交换的。这是一个你喜欢如何解释这些东西的问题。这些约定主要与经典的“固定函数”有关GL,它使用眼睛位置进行照明和雾计算(可能还有其他视图)。如果未启用
GL_LIGHT_MODEL_LOCAL_VIEWER
,它还可能假定“摄影机沿-z方向查看”约定用于计算镜面照明项(默认情况下禁用,请参见)


在现代GL中,除了剪辑空间的左撇子习惯外,不存在这样的习惯,您可以为眼睛空间制定自己的习惯(如果需要的话).

在你的最后一段中似乎有一个小问题:剪辑空间实际上在所有主要API中都是左手的。在GL中,眼睛空间之后的所有内容都是左手的。D3D使用右手窗口空间,但剪辑和NDC空间始终是左手的,无论API如何。@AndonM.Coleman:是的,你是对的。我写这篇文章时一定有点困惑我记得当我写这篇文章时,a实际上用我的手测试了它,但我混淆了左和右…谢谢你的提示,我纠正了它。@Derhas我的问题是默认的正交投影,正如你所说的,对于透视投影,我应该总是将所有对象移向
+z
,这很有意义,谢谢这是一个非常有趣的答案……我想知道,如果把所有矩阵都放在同一个位置上,从技术上讲,你是在画“同质剪辑空间”吗?@racarate:是的,你直接在剪辑空间中绘制。使用现代管道,你可以完全跳过着色器中的矩阵乘法,并在这种情况下节省一些周期。这对于绘制全屏四边形特别有用,但还有许多其他使用情况。