不了解gluOrtho2D功能

时间:2018-04-07 07:36:33

标签: opengl orthographic

我无法gluOrtho2D()函数正在做什么?它是在OpenGL窗口的某个特定点上修复原点还是别的什么?

这是因为gluOrtho2D(1,1,1,1)修复了窗口中间的原点。

如果它没有固定原点,那么有什么方法可以修复原点,因为我已经读过没有这样的东西叫做#34; OpenGL窗口坐标"?

我读到gluOrtho2D(0,640,480,0)修复了窗口左上角的原点,但是如果其他值作为参数发送,我怎么知道它在哪里移动?

2 个答案:

答案 0 :(得分:1)

gluOrtho2D设置了一个正交投影矩阵,给定了左,右,上和下,但固定的近和远平面分别为-1。

gluOrtho2D( left, right, bottom, top );

这意味着

gluOrtho2D(0,640,480,0)

创建一个投影矩阵,它将0映射到视口的左边框,640映射到右边,480到底部,0到顶部。

左,右,底部,顶部,近处和远处的值定义了一个框。框中体积内的所有几何体在视口上都是“可见的”。


投影矩阵描述了从场景的3D点到视口的2D点的映射。它从眼睛空间转换到剪辑空间,并且通过用剪辑坐标的w分量进行划分,将剪辑空间中的坐标转换为规范化设备坐标(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的范围内。
每个克隆空间之外的几何体都被剪裁。

在Orthographic Projection中,眼睛空间中的坐标线性映射到标准化设备坐标,剪辑sapce坐标等于标准化设备坐标,因为w分量为1(对于一个carthesian坐标)。

enter image description here

正交投影矩阵:

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

答案 1 :(得分:1)

除了@Rabbid76's answer

  

这是因为gluOrtho2D(1,1,1,1)将原点固定在窗口的中间。

不。 gluOrtho2D(1,1,1,1)不会这样做。它确实会产生GL_INVALID_VALUE错误,并保持当前矩阵不变。不允许设置left=righttop=bottom,因为这没有任何地学意义,并且也将导致矩阵除以零。

由于最有可能在调用gluOrtho2D之前在矩阵堆栈上加载了单位矩阵,因此最终得到的只是idendity矩阵,这意味着您的视图体积是与轴对齐的立方体-1 <= x,y,z <= 1。

相关问题