gpt4 book ai didi

c++ - OpenGL 缓冲区更新

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:29 25 4
gpt4 key购买 nike

<分区>

目前我正在编写一个模拟水的程序。以下是我执行的步骤:

  1. 创建水面 - 平面。
  2. 创建 VAO
  3. 创建我在其中存储法线和顶点的顶点缓冲区对象。
  4. 将指针绑定(bind)到这个 VBO。
  5. 创建索引缓冲区对象。

然后我使用 glDrawElements 渲染这个平面,然后我调用一个 update() 函数来改变水面顶点的位置。之后我调用 glBufferSubData 函数来更新顶点位置。

当我这样做时 - 什么都没有发生,就好像缓冲区没有改变一样。

这是代码片段:

glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Oscillator) * nOscillators, oscillators, GL_DYNAMIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Oscillator), 0);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Oscillator), (const GLvoid*)12);
glEnableVertexAttribArray(0); // Vertex position
glEnableVertexAttribArray(2); // normals position

glGenBuffers(1, &indicesBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * nIndices, indices, GL_DYNAMIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer);
glBindVertexArray(0);

然后渲染:

glBindVertexArray(vaoHandle);
glDrawElements(GL_TRIANGLES, nIndices, GL_UNSIGNED_INT, 0);
update(time);

和更新函数:

//some calculations
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Oscillator) * nOscillators, oscillators);

Oscillator - 这是一个结构,分别具有:8 个 float - x、y、z(顶点位置)、nx、ny、nz(法线)、upSpeed、新Y

振荡器 - 这是一个振荡器结构数组。

我做错了什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com