OpenGL-正交投影矩阵,GLVIEW

OpenGL-正交投影矩阵,GLVIEW,opengl,2d,viewport,projection-matrix,Opengl,2d,Viewport,Projection Matrix,我很难理解这些是如何工作的。首先,在2d游戏中,投影矩阵应设置为正交,左、右、上、下与窗口匹配,对吗?但当窗口调整大小时,我是否应该只更改视口,而不是投影矩阵?如何保持纵横比 有人能解释一下这两件事的目的吗,在2d正交游戏中,这样我才能更好地理解它 感觉OpenGL在2d设置中做了很多无用的事情。当图像已经存在时,栅格化和计算碎片,将顶点坐标转换为NDC,然后通过视口转换回它们已经存在的位置 还有,为什么在传统的免费OpenGL中,我们必须制作自己的矩阵,而不是像glViewport那样制作自己

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

有人能解释一下这两件事的目的吗,在2d正交游戏中,这样我才能更好地理解它

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

还有,为什么在传统的免费OpenGL中,我们必须制作自己的矩阵,而不是像glViewport那样制作自己的计算


谢谢。< /P> < P>不确定你使用的是什么语言OpenGL,但是如果你正在寻找C++这个网站,几乎覆盖了所有的东西,并且有一个简单的教程,如“hello World”,一直到基本游戏和3D效果。


希望它能有所帮助

不要混淆您输入到总账的内容和它输出到总账的内容

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

视口将该立方体转换为渲染目标坐标。因此,这通常是您要更改的内容,以匹配新窗口大小(好的,这与帧缓冲区本身)

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


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

讷河使用不推荐的固定函数流水线来教,我不想使用它(也从C++窗口的角度来看)。顺便说一下,我在mac电脑上用的是Objective C。我在寻找一个具体的答案。谢谢,我想我现在明白了,我把输入和输出搞混了。使用投影矩阵只会使它简单得多,因为我使用顶点坐标匹配窗口像素。它所做的事情并不是真的没用,因为使用纹理栅格化顶点意味着OpenGL可以为您缩放它们,您可以使用精确的顶点位置和旋转等。例如,OpenGL仍然是最快的方法。我说得对吗?