不了解 gluOrtho2D 函数

Jos*_*Jos 7 opengl orthographic opengl-compat

我无法执行什么gluOrtho2D()功能?它是将原点固定在 OpenGL 窗口上的某个特定点还是其他地方?

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

如果它在某个时候没有修复原点,那么有什么方法可以修复原点,因为我已经读到没有这样的东西叫做“OpenGL 窗口坐标”?

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

Rab*_*d76 7

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

gluOrtho2D( left, right, bottom, top );
Run Code Online (Sandbox Code Playgroud)

这意味着

gluOrtho2D(0,640,480,0)
Run Code Online (Sandbox Code Playgroud)

创建一个投影矩阵,它将 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
Run Code Online (Sandbox Code Playgroud)