【发布时间】:2011-06-06 13:29:49
【问题描述】:
我有一个渲染应用程序,它可以在 3 维网格中渲染大量的立方体。这本质上是低效的,因为每个立方体代表 4 个顶点,而且立方体通常是相邻的,从而创建一个可以由单个矩形表示的表面。
为了填充该区域,我使用了一个 3 维数组,其中 0 值表示空白空间,非 0 值表示块。
例如(其中 X 表示放置立方体的位置)
OOOXXXOOOO
OOXXXXXXXO
OOXXXXXXXO
OOXXXXOOOO
目前将表示为 21 个立方体或 252 个三角形,而它可以很容易地表示为(其中每个字母表示矩形的一部分)
OOOAAAOOOO
OOBAAACCCO
OOBAAACCCO
OOBAAAOOOO
只有 3 个矩形或 26 个三角形。
这些网格的典型尺寸为 128x128x128,因此很明显,如果我能在合理的时间内有效地将形状减少到尽可能少的矩形,我会从巨大的性能提升中受益,但我对以下方面的想法感到困惑算法。
使用Dynamic programming - Largest square block 是一种选择,但它不会产生最佳答案,尽管如果解决方案过于复杂而无法有效执行,那么这将是可行的方法。
最终我将拥有多种类型的立方体(例如绿色、棕色、蓝色,在数组中使用不同的非 0 数字引用),因此如果可能的话,一个适用于多个类别的版本将非常有帮助。
【问题讨论】:
-
你的网格中有一个“形状”吗?
-
可能会生成孤立的 X 岛“岛”(我正在使用 Ken Perlin 的单纯形噪声生成这些地图)
-
如果你在渲染,你不应该选择最少的顶点而不是最少的矩形吗?您可能会丢弃体积内的所有顶点...(除非您有透明度)
-
好点,我不知道为什么我打算再这样画了。
标签: algorithm image math graphics 3d