如何在 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 这样的预定义条目,所以唯一的答案是定义您自己的自定义模型/视图/投影矩阵,如下面链接的代码,使用glGetUniformLocationglUniformMatrix4fv。我很困惑,因为 OpenGL Shader Builder 确实支持它们,但那是普通的 OpenGL,而不是 OpenGL ES。

【问题讨论】:

【参考方案1】:

gl_ModelViewProjectionMatrix 似乎不在“OpenGL ES Shading Language 1.00 版”规范中。似乎有很多着色语言规范,所以这可能是造成混淆的原因。据我了解,您可以为矩阵存储定义自己的制服。

【讨论】:

以上是关于如何在 OpenGL ES 2.0 中将视图/模型/投影矩阵传递给我的顶点着色器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL ES 2.0 中获得“发光”着色器效果?

OpenGL ES 2.0 雾

在 iOS 上使用 OpenGL-ES 2.0 设置横向正交投影的正确方法是啥?

OpenGL (ES 2.0) 动态改变线宽

如何在Android上使用OpenGL ES 2.0绘制点

如何在Android上将OpenGL ES 1.0代码转换为OpenGL Es 2.0?