我无法执行什么gluOrtho2D()
功能?它是在OpenGL窗口的某个特定点固定原点还是其他什么?
这是因为gluOrtho2D(1,1,1,1)
将原点固定在窗口的中间。
如果它在某个时候没有固定原点,那么有什么方法可以修复原点,因为我已经读过没有所谓的“OpenGL Window坐标”这样的东西?
我读到gluOrtho2D(0,640,480,0)
修复了窗口左上角的原点,但是如果其他值作为参数发送,我怎么知道它在哪里移动?
我无法执行什么gluOrtho2D()
功能?它是在OpenGL窗口的某个特定点固定原点还是其他什么?
这是因为gluOrtho2D(1,1,1,1)
将原点固定在窗口的中间。
如果它在某个时候没有固定原点,那么有什么方法可以修复原点,因为我已经读过没有所谓的“OpenGL Window坐标”这样的东西?
我读到gluOrtho2D(0,640,480,0)
修复了窗口左上角的原点,但是如果其他值作为参数发送,我怎么知道它在哪里移动?
gluOrtho2D
设置一个正交投影矩阵,具有给定的左、右、顶和底,但固定的近平面和远平面分别为 -1 和 1。
gluOrtho2D( left, right, bottom, top );
这意味着
gluOrtho2D(0,640,480,0)
创建一个投影矩阵,它将 0 映射到视口的左边框,640 映射到右侧,480 映射到底部,0 映射到顶部。
left、right、bottom、top、near 和 far 的值定义了一个框。盒子体积内的所有几何图形在视口上都是“可见的”。
投影矩阵描述了从场景的 3D 点到视口的 2D 点的映射。它从眼睛空间变换到剪辑空间,剪辑空间中的坐标通过除以w
剪辑坐标的分量被变换为归一化设备坐标(NDC)。NDC 在 (-1,-1,-1) 到 (1,1,1) 范围内。
每个超出裁剪空间的几何图形都被裁剪。
在正交投影中,眼睛空间中的坐标线性映射到标准化设备坐标,并且剪辑空间坐标等于标准化设备坐标,因为w
分量为 1(对于笛卡尔坐标)。
正交投影矩阵:
r = right, l = left, b = bottom, t = top, n = near, f = far
2/(r-l) 0 0 0
0 2/(t-b) 0 0
0 0 -2/(f-n) 0
-(r+l)/(r-l) -(t+b)/(t-b) -(f+n)/(f-n) 1
这是因为 gluOrtho2D(1,1,1,1) 将原点固定在窗口的中间。
不gluOrtho2D(1,1,1,1)
,不这样做。它确实会产生GL_INVALID_VALUE
错误并且保持当前矩阵不变。不允许设置left=right
or top=bottom
,因为这没有任何几何意义,并且还会导致矩阵中除以零。
由于您很可能在调用之前将单位矩阵加载到矩阵堆栈上gluOrtho2D
,因此您最终得到的只是身份矩阵,这意味着您的视图体积是一个轴对齐的立方体 -1 <= x,y,z < = 1。