global variable gl_ModelViewProjectionMatrix is deprecated after version 120
gl_ModelViewProjectionMatrix是一个内置GLSL常量,可以获取当前的视图投影变换矩阵。
可是,自从opengl3.3后该常量标注为过期deprecated。取而代之的是采用uniform的形式向着色器传递矩阵,这样使用起来是很不方便的,或者使用compatible方式继续使用老版本常量。
uniform mat4 projMat;
uniform mat4 viewMat;
uniform mat4 modelMat;
layout (location = 0) in vec3 position;
void main()
{
gl_Position = projMat * viewMat * modelMat * vec4(position, 1.0);
}
为什么新版本的opengl会丢弃这些好用的常量呢,类似的还有gl_ModeView、gl_Vertex、
gl_NormalMatrix、
gl_ModelViewMatrix、
gl_ProjectionMatrix等。
这些内置矩阵与函数对于开发简单的OpenGL程序与理解矩阵变换很有帮助。不过,一旦你的应用程序变得复杂起来,更好的选择是为每一个可移动模型对象管理自己的矩阵实现。此外,在OpenGL可编程管线(GLSL)中,你不能够使用这些内置矩阵函数。如OpenGL v3.0+、OpenGL ES v2.0+与WebGL v1.0+。你必须拥有属于自己的矩阵实现,并且向OpenGL着色语言传递该矩阵数据。