Opengl glBufferSubData以更改颜色
我正在尝试更改网格的颜色,但不起作用。请看下面的代码Opengl glBufferSubData以更改颜色,opengl,Opengl,我正在尝试更改网格的颜色,但不起作用。请看下面的代码 typedef struct{ GLubyte red, green, blue, alpha; } MTcolor; typedef struct{ GLfloat x, y, z; } MTvertex; typedef struct{ MTvertex verts; MTcolor colors; } MTmesh; GLuint vbo; GLuint ibo; static const MTm
typedef struct{
GLubyte red, green, blue, alpha;
} MTcolor;
typedef struct{
GLfloat x, y, z;
} MTvertex;
typedef struct{
MTvertex verts;
MTcolor colors;
} MTmesh;
GLuint vbo;
GLuint ibo;
static const MTmesh mesh[] = {
{ {0, 0, 0}, {0, 0, 255, 255} },
{ {1, 1, 0}, {0, 0, 255, 255} },
{ {2, 0, 0}, {0, 0, 255, 255} }
};
static const GLushort indices[] = {
0, 1, 2
};
缓冲
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(mesh), mesh, GL_STREAM_DRAW);
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
渲染
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexPointer(3, GL_FLOAT, sizeof(MTmesh), (void*)offsetof(MTmesh, verts));
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(MTmesh), (void*)offsetof(MTmesh, colors));
我想换一下颜色,但不行。有什么想法吗
MTcolor col[] = {
255, 0, 0, 255,
255, 0, 0, 255,
255, 0, 0, 255
};
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(col), col);
//绑定索引并绘制创建VBO时使用的是交错数组布局。OpenGL不知道VBO中的内容,对它来说,它只是一堆字节。使用glBufferSubData更新VBO内容时,“col”数组的布局与网格数组的布局不匹配,因此会弄乱数据 为每个顶点属性使用非交错布局或单独的VBO,或使用glMapBuffer将VBO映射到客户端地址空间并更新其中的内容