繁体   English   中英

OpenGL 绘制多个顶点数组

[英]OpenGL Draw Multiple Vertex Arrays

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

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, 4 * sizeof(vec2), nullptr, GL_DYNAMIC_DRAW);
    glVertexAttribPointer(0, 2, GL_FLOAT, false, sizeof(vec2), nullptr);
    glEnableVertexAttribArray(0);
}

初始化时:

init_va1();
init_va2();

抽奖时:

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

glBindVertexArray(va2);
vec2 a2[] = {
    vec2(0.0, 0.0),
    vec2(-0.1, 0.0),
    vec2(-0.1, -0.1),
    vec2(0.0, -0.1),
};
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(a2), a2);
glUniform3f(polygon_color_loc, 1, 0, 0);
glDrawArrays(GL_LINE_LOOP, 0, 4);

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

glBufferSubData更改当前绑定到指定目标的缓冲区的数据。 当前的ARRAY_BUFFERARRAY_BUFFER状态。 当您想要更新缓冲区的数据存储时,您需要绑定正确的缓冲区对象:

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

glBindVertexArray(va1);
glDrawArrays(GL_LINE_LOOP, 0, 4);
glBindBuffer(GL_ARRAY_BUFFER, vb2);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(a2), a2);

glBindVertexArray(va2);
glDrawArrays(GL_LINE_LOOP, 0, 4);

ARRAY_BUFFER索引缓冲区( ELEMENT_ARRAY_BUFFER ) 在顶点数组对象中声明 如果要更改索引缓冲区的内容,也可以只绑定声明索引缓冲区的 VAO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM