Как удалить лица в мире юнит-куба в стиле Minecraft?

Важное примечание: Этот вопрос НЕ касается отбраковки геометрии (отбраковка усеченной поверхности, отбраковки задней грани, отбраковки окклюзии или любого из их друзей). Этот вопрос касается исключения геометрии во время настройки, задолго до того, как мы перейдем к отбраковке и рендерингу .

В мире с рендерингом единичного куба ( а-ля MineCraft) я пытаюсь найти алгоритмы для преобразования перейти из моего списка геометрических граней, которые невозможно увидеть ни под каким углом, независимо от того, где находится камера.

Например, представьте 2 квадрата:

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

ясно, что у них 8 видимых сторон (по 4 на каждый квадрат. ) Теперь я складываю квадраты вместе, vis :

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

Вместо 8 сторон, теперь у меня только 6! Двое, которые соприкасаются посередине, не видны, независимо от того, где размещена камера и под каким углом она смотрит. (Квадраты имеют различную текстуру, поэтому мы не можем назвать это четырехсторонним.)

(То же самое работает в 3D с кубами, но 12 граней (6 на куб) становятся 10, так как 2 касания устраняются.)

У меня вопрос: какие алгоритмы помогают мне распознавать эти скрытые лица? (Я счастлив выполнить свой собственный поиск в Google, но я даже не знаю, как это называется!) В частности, я ищу что-то, что обрабатывает пустоты посередине - пятна, которые МОГУТ быть видны, если вы там, но, поскольку они окружены геометрией, вы не можете их видеть.

Например:

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

В этом случае можно подумать, что есть 18 «видимых» сторон, но, поскольку мы точно знаем, что камера находится за пределами геометрии, 4 стороны квадрата «A» не видны.

Чтобы еще больше усложнить ситуацию, я надеюсь найти алгоритм, который может быстро обновлять, если блок добавлен или удален ( опять же, а-ля MineCraft.)

Спасибо!

17
задан Olie 12 June 2011 в 01:54
поделиться