OpenGL如何在绘制数组中设置属性



我有一个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)。

最新更新