在opengl中绘制体素(立方体)的最有效方法是什么?

Xav*_*ier 15 opengl graphics rendering real-time cube

我想通过使用opengl绘制体素,但似乎不支持它.我制作了一个具有24个顶点(每个面4个顶点)的立方体绘图功能,但是当你绘制2500个立方体时它会降低帧速率.我希望有更好的方法.理想情况下,我只想向显卡发送位置,边缘大小和颜色.我不确定是否可以通过使用GLSL将指令编译为片段着色器或顶点着色器的一部分来实现此目的.

我搜索谷歌,发现了点精灵和广告牌精灵(同样的事情?).这些可以用作更快地绘制立方体的替代方法吗?如果我使用6,每个脸一个,似乎会向显卡发送更少的信息,并希望获得更好的帧速率.

另一个想法是,我可以使用一个drawelements调用绘制多个立方体?

也许有一种我不了解的更好的方法?任何帮助表示赞赏.

ybu*_*ill 14

使用立方体绘制体素几乎总是错误的方法(特殊情况是光线追踪).您通常想要做的是将数据放入3D纹理并根据摄像机位置渲染切片.请参阅此页:https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html,您可以通过搜索"体积渲染gpu"找到其他技术.


Jer*_*fin 6

您正在寻找的是实例化.您可以看看glDrawElementsInstancedglDrawArraysInstanced提供几种可能性.请注意,这些只是最近才作为核心操作添加(OGL 3.1),但已经延长了很长一段时间.

nVidia的OpenGL SDK在OpenGL中有一个实例绘图的例子.