现代OpenGL中的正交投影

现代OpenGL中的正交投影,opengl,glsl,orthographic,Opengl,Glsl,Orthographic,我想只使用现代OpenGL技术(即没有即时模式的东西)设置正交投影。我在网上看到了关于如何解决这个问题的相互矛盾的信息 有些人说调用glMatrixMode(GL\u投影)然后调用glOrtho仍然可以。这在过去一直适用于我,但我想知道这在现代OpenGL中是否已被弃用 如果是这样的话,顶点着色器是现在进行正交投影的标准方法吗?GLSL是否提供了一个方便的内置函数来设置正交投影,还是我需要自己在顶点着色器中编写该数学?当您针对OpenGL版本>3.0时,glOrtho已从官方规范中删除(但仍存在

我想只使用现代OpenGL技术(即没有即时模式的东西)设置正交投影。我在网上看到了关于如何解决这个问题的相互矛盾的信息

有些人说调用
glMatrixMode(GL\u投影)
然后调用
glOrtho
仍然可以。这在过去一直适用于我,但我想知道这在现代OpenGL中是否已被弃用


如果是这样的话,顶点着色器是现在进行正交投影的标准方法吗?GLSL是否提供了一个方便的内置函数来设置正交投影,还是我需要自己在顶点着色器中编写该数学?

当您针对OpenGL版本>3.0时,glOrtho已从官方规范中删除(但仍存在于兼容性配置文件中),因此您不应该再使用它。因此,必须计算要在顶点着色器中直接使用的投影 (对于高达3.0 glOrtho的OpenGL来说,这是完全可以的;)


没有,在GLSL中没有“方便”的函数来获取投影矩阵,所以你必须自己指定它。但是,这没有问题,因为a)web中有大量的示例代码,b)OpenGL规范中的公式是正确的,因此,如果您愿意,您可以从中简单地获取它。

通常,您不在着色器中计算矩阵。您可以在CPU上计算它们,并将它们作为
uniform
s上传到着色器。因此,顶点着色器既不知道也不关心它是用于正交投影还是透视投影。它只是根据给定的投影矩阵进行变换

如果是这样的话,顶点着色器是现在进行正交投影的标准方法吗

不完全是。顶点着色器执行计算,但变换矩阵通常通过均匀网格输入着色器。着色器应仅计算随每个顶点变化的对象。实现“正交”函数时,返回GLSL中的投影矩阵会适得其反

我想只使用现代OpenGL技术(即没有即时模式的东西)设置正交投影。我在网上看到了关于如何解决这个问题的相互矛盾的信息

OpenGL版本3之前的矩阵堆栈与立即模式无关。立即模式为
glBegin(…);对于(…){…;glVertex(…);}glEnd()
。直到OpenGL版本3,在顶点着色器中使用通过矩阵堆栈指定的矩阵是相当常见的


OpenGL-3的目标是实现OpenGL-2的最初计划:统一API并去除旧的积垢。其中一个被移除的东西是矩阵堆栈。无论如何,许多着色器已经使用了比标准矩阵更多的矩阵(例如骨骼动画),因此矩阵已经作为统一的形式传递,并且程序已经包含了整个矩阵数学代码。从OpenGL-3中删除矩阵数学只是下一个合乎逻辑的步骤。

那么你是说glOrtho和所有其他操纵投影矩阵的函数实际上都没有被弃用?这确实是我的主要症结所在——我在这个问题上发现了相互矛盾的信息。哦,是的,我很糟糕,因为OpenGL 3.2(我还在3.0中)的Ortho确实被删除了。我将相应地编辑我的答案。我只是没有看到它,因为它仍然在那里向后兼容。但是现在我的答案应该反映官方的规格(检查了两次,从4.2到3.0)。你真的想把它作为一个统一的标准来传递,而不是对每个顶点反复计算。