因此,我正在为引擎制作3D批处理渲染器,基本概念是我们制作足够大的VBO和IBO来容纳所有顶点数据(位置,法线,uv等),并使用
glMapBuffer
更新VBO
或使用
glbuffersubdata
每帧,如果我们要进行任何更改,但是在这种情况下,IBO(索引缓冲区)的模式是预定义的(即,假设我们有四边形,并为整个IBO大小填充012230),但是在使用3D模型时, IBO数据不会是不同的情况,那么如果实例化一个新模型或假设我正在生成UV球并想要更改其细分,该如何更改IBO数据?
我不知道在使用VAO,VBO和索引缓冲区时如何处理动态变化(不需要频繁)的索引数据。
根据OpenGL 4.5核心配置文件,不支持从客户端内存读取(§10.3.10OpenGL 4.5核心规范):
DrawElements , DrawRangeElements 和 DrawElementsInstanced 从其名称绑定到的缓冲区对象中获取其索引
ELEMENT_ARRAY_BUFFER
,使用它们的indices参数作为到缓冲区对象的偏移量,其方式与10.3.9节中所述相同. [...]如果零绑定到ELEMENT_ARRAY_BUFFER
,这些绘制命令的结果是不确定的。
所以我们不能使用glMapBuffer或glBufferSubData映射ELEMENT_ARRAy_BUFFER(或者可以吗?),以及
glDrawElements
确实接受了指向索引数据的指针,但是只有当我们不使用VAO和VBO时,如果使用它们,它将最后一个参数作为当前绑定的ELEMENT_ARRAy_BUFFER中的指针偏移量。
So what's the best way to deal with dynamic indices?
- 2021-1-21 #
相关问题
- c++:什么是Intel HD 3000上正确的OpenGL初始化?c++windowsopenglintel2021-01-10 18:58
这是如何将数据上传到GPU的想法: