0

編集:

詳細レベルが絶えず変化するチャンクがあります。チャンクの詳細レベルが変わるたびに、描画する頂点を再計算する必要があります。これにより、頂点の量が動的に変化します。

私の問題は、これを描く方法がわからないことです。古いバッファを削除してから、新しいバッファをリロードするだけでよいと思いました。数秒ごとにバッファを削除してリロードするのは効率的ですか、それとも単に悪い考えですか? これを行うためのより良い方法はありますか?

これが私がそれを行うことについてどのように考えたかです:

//delete old buffers
    GL20.glDisableVertexAttribArray(0);

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    GL15.glDeleteBuffers(vboID);

    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
    GL15.glDeleteBuffers(vboiID);

    GL30.glBindVertexArray(0);
    GL30.glDeleteVertexArrays(vaoID);

//reload buffers with new vertex data
    vaoID = GL30.glGenVertexArrays();
    GL30.glBindVertexArray(vaoID);

    vboID = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer, GL15.GL_DYNAMIC_DRAW);
    GL20.glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    vboiID = GL15.glGenBuffers();
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiID);
    GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, index_buffer, GL15.GL_DYNAMIC_DRAW);
    GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);

    GL30.glBindVertexArray(0);

これを行うには、それよりも良い方法が必要です...私はおそらくいつものようにいくつかの重要な概念を見逃しているので、この方法でそれをやろうとするのが完全な馬鹿であるかどうか教えてください. ありがとう!

4

1 に答える 1

0

glBufferSubData() で作業してみてください。必要なものである必要があります。

于 2013-02-17T07:13:46.460 に答える