如何在 OpenGL ES 2.0 中将视图/模型/投影矩阵传递给我的顶点着色器?
Posted
技术标签:
【中文标题】如何在 OpenGL ES 2.0 中将视图/模型/投影矩阵传递给我的顶点着色器?【英文标题】:how do I pass the View/Model/Projection matrices to my vertex shader in OpenGL ES 2.0? 【发布时间】:2009-07-14 17:36:56 【问题描述】:在OpenGL ES 2.0,你显然做不到
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
不再设置模型矩阵,但我认为这些矩阵仍然以某种方式内置,因为GLSL spec 告诉您如何在顶点着色器中访问它们。
//
// Matrix state. p. 31, 32, 37, 39, 40.
//
uniform mat4 gl_ModelViewMatrix;
uniform mat4 gl_ProjectionMatrix;
uniform mat4 gl_ModelViewProjectionMatrix;
那么如何将这些值传递给我的着色器?我应该以某种方式使用glUniformMatrix4fv
吗?
OpenGL ES 2.0 Programming Guide 的源代码对着色器部分很有帮助,但所有示例似乎都只保留矩阵变换,并确保它们的顶点在 -1.0 和 1.0 之间。
更新:显然OpenGL ES Shader Language 确实不支持像gl_ModelViewMatrix
这样的预定义条目,所以唯一的答案是定义您自己的自定义模型/视图/投影矩阵,如下面链接的代码,使用glGetUniformLocation
和glUniformMatrix4fv
。我很困惑,因为 OpenGL Shader Builder 确实支持它们,但那是普通的 OpenGL,而不是 OpenGL ES。
【问题讨论】:
【参考方案1】:gl_ModelViewProjectionMatrix 似乎不在“OpenGL ES Shading Language 1.00 版”规范中。似乎有很多着色语言规范,所以这可能是造成混淆的原因。据我了解,您可以为矩阵存储定义自己的制服。
【讨论】:
以上是关于如何在 OpenGL ES 2.0 中将视图/模型/投影矩阵传递给我的顶点着色器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenGL ES 2.0 中获得“发光”着色器效果?