2

假设我在角点网格中有 NX*NY*NZ 单元格。我还有一个 NX*NY*NZ 布尔值的掩码,它给了我必须绘制网格的哪些单元格。

我想使用尽可能少的内存在 Java3D(或 OpenGL,最后没关系,因为下面的概念是相同的)中创建一个高效的索引四边形数组。

为了简单起见,我将跳过声明每个面的法线,实际上我不需要它们,因为我使用的是平面阴影并且没有照明。

我有每个单元格的颜色(这是基于每个单元格的属性)。

因此,我列出了我需要根据单元格掩码绘制的面孔。

我发现自己多次重复同一点(属于不同的面孔),以便能够为每张面孔赋予颜色。

您对如何提高效率有任何提示吗?

4

1 回答 1

0

你有很多选择:

首先,您可以使用几何着色器来动态生成顶点,但这仅在您拥有相当高端的系统时才有效。

另一种选择是多次绘制对象。如果您不关心填充率,您可以沿着 xyz 平面绘制一组四边形,这些平面直接读入体积数组。

按照同样的推理,您还可以对对象进行射线投射以在片段着色器中渲染它,这可能会更快,具体取决于 NX、NY 和 NZ 的大小。

如果必须绘制四边形,另一种可能是单独存储顶点数据,然后使用 vertex-shader read-from-texture 来确定颜色坐标。您可以在多个渲染通道上拆分绘制整个网格。

如果您需要存储带有顶点的颜色数据,您可以尝试的最后一件事是存储每种颜色的 4 个副本以及每个顶点在 xz 方向上的坐标的 2 个分量。要绘制整个数组,您将执行 6 次遍历,立方体的每个面一次。这可以通过修剪不可见面的通道来大大优化。

当然,最终选择取决于您需要绘制的数据量、您所针对的硬件类型以及您希望在该项目上花费多少工作。

于 2011-06-13T21:24:57.350 回答