java - Java3D/OpenGL 角点网格的内存高效实现

标签 java opengl grid java-3d

假设我在 corner-point-grid 中有 NX*NY*NZ 单元格.我还有一个 NX*NY*NZ boolean 值掩码,它告诉我必须绘制网格的哪些单元格。

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

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

我为每个单元格设置了一种颜色(这是基于每个单元格的属性)。

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

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

关于如何提高效率,您有什么建议吗?

最佳答案

你有很多选择:

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

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

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

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

如果您需要存储带有顶点的颜色数据,您可以尝试的最后一件事是存储每种颜色的 4 个副本以及 x-z 方向每个顶点坐标的 2 分量。要绘制整个阵列,您需要进行 6 次遍历,一次遍历立方体的每个面。这可以通过删除不可见面孔的 channel 来大幅优化。

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

关于java - Java3D/OpenGL 角点网格的内存高效实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792105/

相关文章:

java - WebRTC服务器Java实现

java - 谷歌数据流 : how to parse big file with valid JSON array from FileIO. 可读文件

c++ - MinGW-w64 OpenGL 链接器错误

c++ - 如何从另一个类访问私有(private)变量?

java - 在 HashSet 中存储坐标

java - 无法解析完成方法——从 Android Studio 方法调用

c++ - 使用 glm 平移对象,使其跟随鼠标光标

html - 如何用 CSS 显示网格线?

grid - 如何使用 Netlogo 编程数独识别图像中的数字

html - 我怎样才能无边界地间隔 child ?