我想知道如何让我的应用程序与必须进行大量更改的 3D 模型进行交互。例如,我希望能够从应用程序本身自由修改颜色、纹理 ID、位置甚至法线。我认为每次模型更改或每一帧都重新上传模型(glBufferData),但这对我来说似乎是一种内存密集型。
另外,我不太确定我应该如何让一个类访问主机内存中缓冲区的一部分。示例:具有属性并且可以随时修改它们的类“Shape”,修改缓冲区包含的内容。为此,我不知道从哪里开始。我必须指出,我需要在这些类中有更多不能发送到 GPU 的属性。我可以研究的任何提示/技术?
编辑:我在Buffer Object Streaming上找到了这篇文章,并且对使用 glBufferData 和 glBufferSubData 将数据流式传输到 GPU 感到非常舒服。不过,我仍然很难找到一种在缓冲区中定义对象的好方法。
我研究了创建自己的类“SubArray”,其中包含 CPU 内存中的数组、偏移量和长度。它有一个索引器来验证索引并在不在正确范围内时抛出异常,但我觉得使用这种方法不太舒服,因为我无法更改简单对象的块大小(添加顶点)。