2010-11-27 4 views
7

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

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

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

+1

Возможно, вам будет полезно указать, что вы подразумеваете под ["quad"] (http://en.wikipedia.org/wiki/Quad). – 2010-11-27 18:16:21

+2

Некоторые быстрые google для 'voxelization' показывают много вещей. Посмотрите на это http://www.cs.princeton.edu/~min/binvox/ – 2010-11-27 18:21:47

+0

@Sven в графике, `quad` обычно означает форму, определенную четырьмя копланарными вершинами. – 2010-11-27 20:30:59

ответ

7

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

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

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

  4. Сохранить

  5. Прибыль!

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

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