OpenGL 如何在绘制数组中设置属性
OpenGL how to set attribute in draw arrays
我有一个包含我的数据的 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
)。
我有一个包含我的数据的 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
)。