繁体   English   中英

现代OpenGL中的正交投影

[英]Orthographic Projection in Modern OpenGL

我想仅使用现代OpenGL技术(即不使用立即模式的东西)来设置正交投影。 我在网上看到有关如何解决此问题的信息。

有些人说,它仍然是OK调用glMatrixMode(GL_PROJECTION)然后glOrtho 过去,这一直对我有用,但是我想知道在现代OpenGL中是否已弃用该功能。

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

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

不完全的。 顶点着色器执行计算,但是通常通过统一将转换矩阵输入到着色器中。 着色器仅应评估随每个顶点而变化的事物。 实现“正交”功能后,返回GLSL中的投影矩阵会适得其反。

我想仅使用现代OpenGL技术(即不使用立即模式的东西)来设置正交投影。 我在网上看到有关如何解决此问题的信息。

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

使用OpenGL-3的目的是要完成OpenGL-2最初计划的工作:统一API并消除旧的残废。 这些东西之一是矩阵堆栈。 无论如何,许多着色器已经使用了比标准矩阵更多的东西(例如用于骨骼动画),因此矩阵已经作为制服传递了,并且程序已经包含整个矩阵数学代码。 采取步骤从OpenGL-3中删除矩阵数学内容只是下一步的逻辑步骤。

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

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

而且,没有在GLSL中获取投影矩阵的“方便”功能,因此您必须自己指定它。 但是,这没问题,因为a)网络中有大量示例代码,b)OpenGL规范中的方程式正确,因此如果需要,您可以从那里简单地取用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM