我需要在OpenGL ES 2.0中绘制一个矩形,但是要在片段着色器中为矩形排列颜色。我将绘制两个三角形来表示矩形。这与纹理贴图类似,但没有纹理坐标。理想的是采用特定像素并计算其位置。另一方面,有一个数组包含 0 和 1 s的 16 元素。计算像素并将其与同一位置的数组元素进行比较(如果您使用 16 进行除法的剩余部分,这是可能的,因为它将返回 0 - 15 )。如果相应数组索引中的元素为 1 ,则该像素将使用片段着色器属性中的特定颜色进行着色,否则将不会着色。
数组作为统一值传递给片段着色器,似乎它没有正确传递:
以下是将均匀值传递给片段着色器的代码:
void GeometryEngine::drawLineGeometry(QGLShaderProgram *program)
{
glBindBuffer(GL_ARRAY_BUFFER, vboId);
// Bind attribute position in vertex shader to the program
int vertexLocation = program->attributeLocation("position");
program->enableAttributeArray(vertexLocation);
glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
const int array[16] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0};
int arrayLocation = program->attributeLocation("array");
program->setUniformValueArray(arrayLocation, array, 16);
// Draw triangles (6 points)
glDrawArrays(GL_TRIANGLES, 0, 6);
}
片段着色器:
uniform int array[16];
void main()
{
gl_FragColor = vec4(array[0], 0.0, 0.0, 1.0);
/* int index = int(mod(gl_FragCoord.x, 16.0));
if( array[index] == 1 )
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
else
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
*/
}
注释行应为片段创建特定颜色,但我无法测试此部分,因为数组未正确传递。矩形是黑色,而不是红色(数组[0]是1,而不是0)。