如何创建由较小的多维数据集(体素)组成的多维数据集?

时间:2018-10-29 06:07:36

标签: graphics 3d voxel direct3d11

我是图形新手,所以我要征求意见/建议。

我想创建(并渲染)一个由较小的立方体(体素)制成的大立方体。诀窍是我希望能够随意删除体素。

一种方法是使用实​​例渲染。在Direct3D中,我可以使用两个缓冲区: 第一个缓冲区将包含一个多维数据集的单个实例的数据(例如,顶点位置,纹理坐标,法线等)。 第二个缓冲区将在第二个缓冲区中包含每个体素的位置。

2 个答案:

答案 0 :(得分:1)

有很多不同的方式来渲染体素,各有其优缺点。从这个问题看来,您好像要使用Minecraft场景。

具有合理性能的相当简单的实现方法就是将世界分解为一定大小的“块”。这些块中的每个块都有一个关联的顶点缓冲区,并且当某个块被删除或以某种方式更改时,该块的顶点缓冲区将更新。渲染时,将为每个块发出绘图调用。

为块选择正确的尺寸对于性能非常重要。如果块太大,则在块更改时重新构建顶点缓冲区将耗资巨大。如果块太小,那么块的总数将会很大,渲染所有块时都会引入驱动程序开销。

为提高性能,可以应用进一步的掩埋算法,以避免在顶点缓冲区中添加隐藏的三角形。

您可以做很多事情来提高性能,并突破可渲染体素的极限,但这是一个很好的起点。

答案 1 :(得分:0)

首先,我假设您的大立方体是动态的:它们可以移动/旋转,并且它们的体素可以动态隐藏/可见。如果一切都是静态的,那么有比此答案更好的方法。

如您所描述的,实例化是一种很好的性能解决方案,因为只有一个绘制调用才能渲染所有体素(与逐个渲染每个体素相比)

现在可以在此处隐藏任何体素是您可以使用的技巧:在实例化数据缓冲区中,您可以添加比例值以及位置,然后只需设置比例要隐藏体素时为零