微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OpenGL绘制多个顶点数组

如何解决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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。