簡體   English   中英

OpenGL更新頂點數組/緩沖區

[英]OpenGL updating vertices array/buffer

當我第一次向緩沖區添加一些頂點時,這些是我正在調用的相關函數

    // Create and bind the object's Vertex Array Object:
    glGenVertexArrays(1, &_vao);
    glBindVertexArray(_vao);

    // Create and load vertex data into a Vertex Buffer Object:
    glGenBuffers(1, &_vbo);
    glBindBuffer(GL_ARRAY_BUFFER, _vbo);
    glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW);

    // Tells OpenGL that there is vertex data in this buffer object and what form that vertex data takes:

    // Obtain attribute handles:
    _posAttrib = glGetAttribLocation(program, "position");
    glEnableVertexAttribArray(_posAttrib);
    glVertexAttribPointer(_posAttrib, // attribute handle
                          4,          // number of scalars per vertex
                          GL_FLOAT,   // scalar type
                          GL_FALSE,
                          0,
                          0);

    // Unbind vertex array:
    glBindVertexArray(0);

但是稍后在我的程序中,我想添加一些頂點。

我通過以下方式執行此操作(在單獨的函數中:

add_vertices(x,y); //adds the necessary vertices to the vector. 
glGenBuffers(1, &_vbo);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, (TRIANGLE_AMOUNT+1)*4*_number_of_circles * sizeof(float), &vertices[0], GL_STATIC_DRAW);

假設glBufferData的第二個參數中的時髦大小很好,我錯過了什么嗎? 還有其他需要調用的OpenGL函數嗎?

我沒有得到任何錯誤,但是當我試圖通過使用頂點的不同子集循環glDrawArrays來繪制具有新頂點的額外形狀時,沒有任何反應。 只繪制第一個形狀。

我希望這是半連貫的......如果有任何我沒有提供的信息,請告訴我。

干杯。

在OpenGL中,更改緩沖區和交換緩沖區數據是兩個不同的事情,需要在之后采取不同的操作:

交換數據

在這種情況下,需要先前生成的vbo。 要上傳新數據,只需要綁定緩沖區並緩沖新數據:

glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, (TRIANGLE_AMOUNT+1)*4*_number_of_circles * sizeof(float),
    &vertices[0], GL_STATIC_DRAW);

創建一個新緩沖區

在這種情況下, glGenerateBuffers會生成一個新緩沖區,並且(除了上傳數據外)還必須更新所有VAO綁定。

旁注:在上面顯示的代碼中,您創建了一個新緩沖區而不刪除以前的緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM