我正在为iPhone开发一个OpenGL应用程序。在我的顶点着色器中,我需要一种方法来同时更改大量(但不是全部)顶点的颜色,所以我决定采用颜色索引。这将允许我离开VBO静态,并修改一个统一的变量,而不是循环遍历每个顶点并修改每个帧之间的颜色信息。在OpenGL ES 2.0中为数组索引提供一个整数?
我的计划是用颜色数组创建一个统一的,在属性中添加一个包含索引的整数。这里是我的顶点着色器:
uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];
attribute vec4 a_position;
attribute int a_colorIndex;
varying lowp vec4 v_color;
void main()
{
v_color = u_color_array[a_colorIndex];
gl_Position = u_mvp_matrix * a_position;
}
这就提出了一个错误:
int can't be an in in the vertex shader
我做了一些研究。 iPhone最新支持OpenGL ES 2.0,这意味着它最迟支持GLSL 1.2,并且显然只有GLSL 1.3和更高版本才支持整数。我试着将a_colorIndex更改为float。我没有想到它会起作用,但事实并非如此。
如何为每个顶点指定颜色索引?
也许考虑一个纹理查找,其中你的索引是一个uv浮点数,而不是数组查找?或者你可以将float转换为int吗? – Tim 2012-07-08 01:16:18
“这意味着它最迟支持GLSL 1.2”不,它不。 GL ES 2.0意味着它支持GLSL *** ES ***着色语言,与桌面GLSL语言* *不同。 GLSL ES基于GLSL 1.2,但他们*不是同一件事。* – 2012-07-08 02:46:50