OpenGL绘制多个顶点数组

问题描述

我想绘制多个顶点数组。这是初始化:

unsigned int va1;
unsigned int vb1;

void init_va1() {
    glGenVertexArrays(1,&va1);
    glBindVertexArray(va1);
    glGenBuffers(1,&vb1);
    glBindBuffer(GL_ARRAY_BUFFER,vb1);
    glBufferData(GL_ARRAY_BUFFER,4 * sizeof(vec2),nullptr,GL_DYNAMIC_DRAW);
    glVertexAttribPointer(0,2,GL_FLOAT,false,sizeof(vec2),nullptr);
    glEnabLevertexAttribArray(0);
}

unsigned int va2;
unsigned int vb2;

void init_va2() {
    glGenVertexArrays(1,&va2);
    glBindVertexArray(va2);
    glGenBuffers(1,&vb2);
    glBindBuffer(GL_ARRAY_BUFFER,vb2);
    glBufferData(GL_ARRAY_BUFFER,nullptr);
    glEnabLevertexAttribArray(0);
}

初始化时:

init_va1();
init_va2();

平局:

glBindVertexArray(va1);
vec2 a1[] = {
    vec2(0.0,0.0),vec2(0.1,0.1),vec2(0.0,};
glBufferSubData(GL_ARRAY_BUFFER,sizeof(a1),a1);
gluniform3f(polygon_color_loc,1,0);
glDrawArrays(GL_LINE_LOOP,4);

glBindVertexArray(va2);
vec2 a2[] = {
    vec2(0.0,vec2(-0.1,-0.1),sizeof(a2),a2);
gluniform3f(polygon_color_loc,4);

我最后初始化的顶点数组将被正确绘制,而另一个顶点将不被绘制。例如,如果我先调用init_va1()然后再调用init_va2(),将显示使用va2的图形,而不会显示使用va1的图形。如果我重新排序呼叫,则会显示使用va1的图形,而不会显示使用va2的图形。如何绘制两个顶点数组?

解决方法

enter image description here更改当前绑定到指定目标的缓冲区的数据。当前的$f = $w.inputfields | where id -eq __VIEWSTATE | Select-Object -ExpandProperty value 是全局状态。要更新缓冲区的数据存储时,需要绑定适当的缓冲区对象:

ARRAY_BUFFER
glBindBuffer(GL_ARRAY_BUFFER,vb1);
glBufferSubData(GL_ARRAY_BUFFER,sizeof(a1),a1);

glBindVertexArray(va1);
glDrawArrays(GL_LINE_LOOP,4);

glBindBuffer(GL_ARRAY_BUFFER,vb2); glBufferSubData(GL_ARRAY_BUFFER,sizeof(a2),a2); glBindVertexArray(va2); glDrawArrays(GL_LINE_LOOP,4); 相比,glBufferSubData中说明了Index buffersARRAY_BUFFER)。如果要更改索引缓冲区的内容,也可以只绑定声明了索引缓冲区的VAO。