Alt*_*ape 6 javascript opengl vbo webgl
我正在编写一个算法生成几何的WebGL应用程序.几何体将包含4到150个对象,每个对象由16到2048个点组成,通过drawElements绘制为TRIANGLE_STRIP.几何图形将是静态的大多数帧,但需要根据用户输入进行动画处理.在更新几何体时的这些帧中,可以添加或移除点/三元组.还需要在程序的生命周期内添加/删除对象.
在此上下文中分配/更新VBO的最有效方法是什么?我很确定我应该使用DYNAMIC_DRAW和bufferSubData来更新每个对象,但我是否想要过度分配一些巨大的VBO(假设每个对象的点数最坏的情况)并将每个对象定义为offset(对象编号*每个对象的最大大小),然后在最好的情况下有很多未分配的未使用的VBO内存?或者我应该尝试另一种方法吗?或者就内存占用而言,这是否足够小我是否过度思考?
在此上下文中分配/更新VBO的最有效方法是什么?我很确定我应该使用DYNAMIC_DRAW和bufferSubData来更新每个对象.
这确实是要走的路.实际上你想对你的对象使用双倍甚至三倍缓冲,即有一个VBO绑定绘图,而你用新数据更新另一个VBO的内容.在glMapBuffer之后,可以从进程中的所有线程访问内存映射,因此您可以让工作线程更新"后"顶点缓冲区,同时渲染线程正在忙于绘制当前帧.
或者就内存占用而言,这是否足够小我是否过度思考?
您是否评估了您正在处理的最坏情况内存占用?鉴于你的数字,我敢打赌它将低于16MiB(150个对象*2048点*每点3个双精度浮点数*每个双8个字节= 7.4 MiB,如果使用单精度浮点数则仅3.7MiB).相比之下,现代显卡提供数百种MiB RAM(我的2006 GeForce 8800GTX拥有768MiB RAM,而我的Radeon HD6570拥有1024MiB(= 1GiB).