我很难理解这些是如何工作的。首先,在一个2D游戏中,投影矩阵应该设置为正交的,左,右,上,下与窗口匹配,对吗?但是当窗口调整大小时,我应该只改变glViewport,而不是投影矩阵吗?我如何保持纵横比?
有人能解释一下这两个东西的用途吗,在二维正字法游戏中,这样我就能更好地理解它了?
感觉OpenGL在2D设置中做了很多无用的事情。当图像已经存在时,光栅化和计算碎片,将顶点坐标转换为NDC,只会被GlViewport转换回它们已经存在的位置。
还有,为什么在传统的免费OpenGL中,我们必须制作自己的矩阵,而不是glViewport那样的计算?
2条答案
按热度按时间kx5bkwkv1#
不要混淆输入到GL的内容和输出到的内容。
用于计算正交矩阵的参数是与 * 输入 * 相关的参数。投影矩阵的输出始终是[-1:1]x[-1:1]x[-1:1]立方体。
视口会将立方体转换为渲染目标坐标。因此,这通常是您想要更改的,以匹配新窗口大小(当然,还有帧缓冲区本身)。
是的,GL在2D渲染路径上做了很多没用的东西,毕竟是3D API......
最后我会说你不需要构建矩阵来做2D变换,只要你的顶点着色器输出在我之前提到的立方体中。如果你想写视口的右上角,你可以直接将你的顶点传递为(0,0)(0,1)(1,0)(1,1),然后简单地输出它。
5gfr0r5j2#
不知道你是用什么语言使用OpenGL的,但如果你正在寻找C++这个网站,http://nehe.gamedev.net/几乎涵盖了一切,并有教程,从简单的“你好世界”一直到基本的游戏和三维效果。
希望能有所帮助