如何在单位立方体世界中进行面部移除?

时间:2011-06-12 01:54:36

标签: opengl 3d rendering minecraft

重要说明:这个问题不是关于几何剔除(截头剔除,背面剔除,遮挡剔除或任何朋友)。这个问题是关于几何消除在设置时,早在我们进行剔除和渲染之前。

在单位立方体渲染的世界( a la MineCraft)中,我正在尝试找到如何从我的几何面列表中删除无法从任何角度看到的算法,无论相机在哪里。

例如,想象2个方格:

+----+      +----+
|    |      |    |
|    |      |    |
+----+      +----+

显然有8个可见边(每个方格4个。)现在我将方块移动到一起, vis

+----+----+
|         |
|         |
+----+----+

而不是8面,现在我只有6面!无论相机放置在何处,也无法看到它所面对的角度,无法看到中间触摸的两个。 (正方形的纹理不同,所以我们不能称它为4面。)

(同样的东西在3D中使用立方体,但是12个面(每个立方体6个)变为10个,因为2个触摸被消除了。)

我的问题是:有哪些算法可以帮助我识别这些隐藏的面孔? (我很高兴自己做谷歌搜索,但我甚至不知道这叫什么!)特别是,我正在寻找能够处理中间点的空洞点的东西,如果你是但是,因为它们被几何体包围,你无法看到它们。

例如:

+----+----+----+----+
|                   |
|                   |
+    +----+         +
|    |    |         |
|    | A  |         |
+    +----+         +
|                   |
|                   |
+----+----+----+----+

在这种情况下,人们可能认为有18个“可见”的边,但是,因为我们知道相机在几何体之外的事实,所以方形“A”中的4个边是不可见的。

为了进一步复杂化,我希望找到一种算法,如果添加或删除了一个块,可以快速更新(再次, a la MineCraft。)

谢谢!

1 个答案:

答案 0 :(得分:22)