6

我很难理解这些是如何工作的。首先,在 2d 游戏中,投影矩阵应该设置为左、右、上、下与窗口匹配的正交投影矩阵,对吗?但是当窗口调整大小时,我应该只更改 glViewport,而不是投影矩阵吗?以及如何保持纵横比?

有人可以在二维拼字游戏中解释这两件事的目的,以便我更好地理解它吗?

感觉 OpenGL 在 2d 设置中做了很多无用的事情。当图像已经存在时光栅化和计算片段,将顶点坐标转换为 NDC 仅通过 glViewport 转换回它们已经存在的位置。

此外,为什么在传统的免费 OpenGL 中我们必须制作自己的矩阵,而不是 glViewport 所做的我们自己的计算?

谢谢。

4

2 回答 2

5

不要混淆您输入到 GL 的内容和输出到的内容。

您用于计算 Ortho 矩阵的参数是与您的输入相关的参数。投影矩阵的输出始终是 [-1:1]x[-1:1]x[-1:1] 立方体。

视口将该立方体转换为您的渲染目标坐标。所以这通常是您想要更改以匹配您的新窗口大小(嗯,那个和帧缓冲区本身)。

是的,GL 为 2D 渲染路径做了很多无用的事情。毕竟这是一个 3D API...

最后我要说的是,您不必构建矩阵来进行 2D 变换,只要您的顶点着色器在我之前提到的立方体中输出即可。如果你想写视口的右上角,你总是可以直接将顶点传递为 (0,0) (0,1) (1,0) (1,1) 并简单地输出。

于 2010-09-01T17:01:05.087 回答
-2

不确定您使用的是哪种语言的 OpenGL,但如果您正在寻找 C++ 这个站点,http://nehe.gamedev.net/几乎涵盖了所有内容,并且有从“Hello World”到最简单的教程基本游戏和 3D 效果。

希望能帮助到你

于 2010-09-01T16:02:41.113 回答