我有一个GLfloat数组包含我的数据,看起来像这样:
GLfloat arr[] = {
//position //color
300, 380, 0, 0, 1, 0,
300, 300, 0, 1, 1, 0,
380, 300, 0, 0, 1, 1,
380, 380, 0, 1, 0, 1
};
我试图用各自的颜色绘制4个点,目前我正在这样做:
glPointSize(10);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, arr);
glDrawArrays(GL_POINTS, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
但是我试图修改它来接受颜色值失败了。
顶点和碎片着色器:
#version 330 core
out vec4 FragColor;
in vec3 ourColor;
void main()
{
FragColor = vec4(ourColor, 1.0);
}
#version 330 core
layout (location = 0) in vec4 position;
layout (location = 1) in vec3 color;
out vec3 ourColor;
uniform mat4 projection;
void main()
{
gl_Position = projection * vec4(position.xy, 0.0, 1.0);
ourColor = color;
}
您正在使用着色器程序。顶点属性的属性索引为0,颜色的属性索引为1。使用glVertexAttribPointer
定义2个通用顶点属性数据数组:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, arr);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(flaot)*6, arr);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(flaot)*6, arr+3);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
属性的顶点数组由一个包含6个分量(x, y, z, r, g, b)的元组组成,因此连续的通用顶点属性(stride)之间的字节偏移量为sizeof(flaot)*6
字节。
第一个顶点的地址是arr
,第一个颜色的地址是arr+3
(分别是(unsigned char*)arr + sizeof(float)*3
)。