我想通过使用opengl绘制体素,但似乎不支持它。我制作了一个具有24个顶点(每个面4个顶点)的立方体绘图功能,但是当你绘制2500个立方体时它会降低帧速率。我希望有更好的方法。理想情况下,我只想向显卡发送位置,边缘大小和颜色。我不确定是否可以通过使用GLSL将指令编译为片段着色器或顶点着色器的一部分来实现此目的。
我搜索谷歌,发现了点精灵和广告牌精灵(同样的事情?)。这些可以用作更快地绘制立方体的替代方法吗?如果我使用6,每张脸一个,似乎会向显卡发送更少的信息,并希望获得更好的帧速率。
另一个想法是,我可以使用一个drawelements调用绘制多个立方体?
也许有一种我不了解的更好的方法?任何帮助表示赞赏。
答案 0 :(得分:13)
使用立方体绘制体素几乎总是错误的方法(特殊情况是光线追踪)。您通常想要做的是将数据放入3D纹理并根据摄像机位置渲染切片。请参阅此页面:https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html,您可以通过搜索“体积渲染gpu”找到其他技术。
答案 1 :(得分:6)
您正在寻找的是实例化。您可以查看glDrawElementsInstanced
和glDrawArraysInstanced
的几种可能性。请注意,这些只是最近才作为核心操作添加(OGL 3.1),但已经延长了很长一段时间。
nVidia的OpenGL SDK有一个OpenGL中的实例绘图示例。
答案 2 :(得分:0)
首先,您应该使用GLSL查看OpenGL 3+。这已成为很长一段时间的标准。其次,大多数Minecraft-esque实现都在CPU端使用网格创建。该技术涉及查看所有块位置并创建顶点缓冲对象,该对象呈现所有暴露面的三角形。仅当体素改变并且在帧之间持续存在时才生成VBO。理想的实现方法是将相同纹理的共面面组合成更大的面。