内存在Java3D / OpenGL中高效实现角点网格

时间:2010-09-25 01:45:40

标签: java opengl grid java-3d

假设我有一个corner-point-grid的NX * NY * NZ单元格。我还有一个NX * NY * NZ布尔值的面具,它给了我必须绘制的网格细胞。

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

为了简单起见,我正在跳过宣布每张脸的法线,我真的不需要它们,因为我使用的是平面阴影而且没有光线。

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

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

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

您是否有任何关于如何提高效率的提示?

1 个答案:

答案 0 :(得分:0)

您有很多选择:

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

另一种选择是在多次传递中绘制对象。如果你不关心填充率,你可以在xyz平面上绘制一组四边形,直接读入体积数组。

沿着相同的推理线,你也可以光线投射对象以在片段着色器中渲染它,这可能会更快,具体取决于NX,NY和NZ的大小。

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

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

当然,最终的选择取决于您需要绘制的数据量,您要定位的硬件类型以及您希望在此项目上花费的工作量。