Преобразование 3D-модели в поле вокселей - PullRequest
7 голосов
/ 27 ноября 2010

Мне нужно написать код для преобразования массива квадов в поле вокселей. Сделать это должно быть легко, но сделать это быстро не так просто.

Кто-нибудь знает какие-либо библиотеки или исходные коды, которые я могу использовать? Я уверен, что кто-то должен был сделать это раньше.

редактирование: Алгоритм должен также заполнить внутреннюю часть модели вокселями. Просто оболочка не подойдет.

Ответы [ 2 ]

7 голосов
/ 27 ноября 2010

Ссылка на вокселляцию, опубликованная @Alexandre C., выглядит хорошо.

Вот краткий обзор того, как мы решили эту проблему при преобразовании регулярных моделей квадрациклов / треугольников в кубический массив показателей преломления / эпсилона для моделирования фотоники / ЭМ.

  1. Создайте BSP дерево вашей сцены. (Да, действительно)
  2. Итерация через регулярные интервалы по X, Y, Z по всей вашей модели или области решения.(Интервал по каждой оси должен быть равен желаемым размерам вокселей.)
  3. В каждой точке вашего цикла x / y / z отметьте точку относительно дерева BSP.Если он внутри сущности, создайте воксель в этой точке и установите его атрибуты (цвет, координаты текстуры и т. Д.) На основе исходной модели (на которую ссылается ваш узел BSP). ( Совет по оптимизации : Если ваш самый внутренний цикл находится вдоль оси Y (вертикальная ось), и вы создаете ландшафт или поверхность, ориентированную на XZ, вы можете выйти из цикла Y при каждом созданиивоксел.)

  4. Сохранить

  5. Прибыль!

Построение BSP - единственная сложная часть(и это намного проще, чем кажется на первый взгляд), но это было задокументировано во времена инь-ян по всей сети.Это будет работать практически для любой формы модели, а также даст вам хорошее дерево, которое вы можете использовать, среди прочего, для обнаружения столкновений и определения видимости.

Также обратите внимание, что весь этот процесс должен происходить во время компиляции илииспользуя специальный инструмент (который, очевидно, создаст файл, содержащий дерево и поле вокселей, которые вы будете использовать во время выполнения).Если вы используете XNA, довольно просто импортировать что-либо в конвейер контента.

1 голос
/ 27 ноября 2010

Чек Марширующие кубики алгоритм .Я полагаю, вам нужно изменить это в контексте вашей проблемы!;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...