假设我在corner-point-grid中有NX * NY * NZ个单元。我还有一个NX * NY * NZ布尔值的蒙版,可让我绘制网格的哪些单元格。

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

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

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

因此,我根据细胞蒙版列出了需要绘制的面孔。

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

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

最佳答案

您有很多选择:

首先,您可以使用几何体着色器动态生成顶点,尽管只有在拥有相当高端的系统的情况下,这才起作用。

另一种选择是多次绘制对象。如果您不关心填充率,则可以沿xyz平面绘制一组四边形的集合,然后将它们直接读入体积数组。

按照相同的推理方法,您还可以对对象进行光线投射以将其渲染到片段着色器中,根据NX,NY和NZ的大小,该着色器可能会更快。

如果必须绘制四边形,则另一种可能性是分别存储顶点数据,然后使用顶点着色器从纹理读取来确定颜色坐标。您可以将整个网格划分为多个渲染通道。

如果需要将颜色数据与顶点一起存储,您可以尝试的最后一件事是将每种颜色的4个副本以及2个分量一起存储在x-z方向上的每个顶点的坐标。要绘制整个数组,您需要进行6次传递,每个立方体的面应传递一次。可以通过修剪不可见的面部的通道来充分优化此效果。

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

09-28 07:11