将我的游戏移植到较新的OpenGL版本(3.2+)之后,我注意到glLoadMatrix()
和glMultMatrix()
被删除了。他们有替代品吗?我不想使用任何库,因为我有自己的矩阵堆栈。
答案 0 :(得分:5)
旧的GL矩阵堆栈已从现代OpenGL中删除,这意味着所有与矩阵相关的函数都已消失,包括glPushMatrix
,glPopMatrix
,glLoadMatrix
等。这些函数用于此目的允许应用程序将转换数据发送到固定功能管道。
由于您现在使用可编程着色器编写自己的管道,因此完全取决于您将如何处理将转换矩阵传递给着色器。通常的方法是使用uniform variables或uniform buffers。
因此,在着色器中,您可以根据应用程序声明尽可能多的矩阵,并使用:
uniform mat4 u_mvpMatrix; // there are also mat3 and mat2
uniform mat4 u_modelMatrix;
...
使用glUniformMatrix*()
设置/更新它们。
如果你还没有一个好的矩阵库,你肯定需要一个,因为矩阵乘法和任何其他操作现在也必须由应用程序完成。一个非常好的选择是GLM。