Rob*_*oli 55 shader android opengl-es-2.0
从根本上说,我的问题是我不知道OpenGL ES 2.0希望我如何编写和使用多个着色器; 或者如果一个人会这样做甚至是可取的/预期的.
这里的基本问题是:如果我有一个苹果,一块发光的岩石和一个模糊的网格,都在同一个3D世界中,最好用不同的着色器程序绘制但是使用相同的mvpMatrix然后我将如何使用它们相同的OpenGL渲染,以便他们都使用我写的最合适的着色器?
所以我为我的Android游戏编写了一个基本的OpenGL ES 2.0程序,它可以完美地工作,因为它可以将对象的轮廓绘制到屏幕上.但它没有别的; 几乎是因为着色器看起来像这样:
uniform mat4 uMVPMatrix;
attribute vec4 aPosition;
void main() {
gl_Position = uMVPMatrix * aPosition;
}
Run Code Online (Sandbox Code Playgroud)
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
现在它们非常基本.我没有走得更远的原因是因为我无法弄清楚我是否应该编写一个着色器来应用于我的所有不同对象,或者我是否应该使用多个着色器.如果我应该使用多个着色器来绘制多个不同的对象,那么我该如何以有效的方式去做呢?
我觉得这对于每天都在做OpenGL ES 2.0的人来说必须是基本的知识,所以我希望有人可以回答我的问题或者指出我正确的方向.
我有:
所以我希望我接近理解OpenGL工作流程,但我似乎还没有.
编辑:之后我发现这个很好:
如果您的应用程序是为OpenGL ES 2.0编写的,请不要创建一个具有大量开关和条件的着色器,这些开关和条件执行应用程序渲染场景所需的每个任务.相反,编译多个着色器程序,每个程序执行特定的,重点突出的任务.
Jav*_*ave 21
您可以使用多个着色器,但要在它们之间切换可能会非常昂贵,因此建议的做法是绘制着色器的每个对象,然后切换到下一个着色器并使用该着色器绘制所有对象,依此类推.
要在着色器之间切换,请调用glUseProgram()
.