2014-02-04 2 views
0

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

Из поиска в Google я обнаружил, что маршевые кубы должны быть подходящим алгоритмом. Я прочитал много учебников, но часть с изоморфной поверхностью меня смущает.

Я следую этому руководству http://paulbourke.net/geometry/polygonise/, но не могу понять, что такое изо-поверхность в моем случае и как его извлечь.

Это моя первоначальная поверхность?

EDIT1:

До сих пор я сделал это с повторной триангуляцией:

re-triangulated object

Это кажется, что я нашел правильную itnersection точки между изоповерхностью и вокселями, потому что, кажется, имеют правильную модель вокселей:

voxel model

Но почему они мили ssing так много треугольников при повторной триангуляции?

EDIT2:

отладки мой код, я заметил следующее: Таблица, маршируя Куб я использую имеет указатели на вершины, где изо-поверхность разрезает мои вокселей. Эти триплеты создают новые треугольники. Но я заметил, что много раз в таблице говорится построить треугольник с вершинами (например) intersection_point (0) -intersection_point (3) -intersection_point (5), но мои точки пересечения находятся в разных положениях.

-> Положение точек пересечения зависит от края, где они лежат.

+0

Ваш ввод представляет собой сетку из модели воксела, не так ли? И что вы подразумеваете в точности путем повторной триангуляции этой сетки (как ваша выходная сетка улучшилась по сравнению с входной)? – user3146587

+0

Выходная сетка не улучшена по сравнению с оригиналом. У меня просто есть проект в моей школе, чтобы повторно триангулировать сетку, используя данные вокселя, а затем сравнить новую триангуляцию с исходной. – maria

+1

Вы можете попробовать более простой объект, например. сфера - таким образом вы легко увидите типичные кубы, у которых нет треугольников. Я использовал тот же метод, и это очень помогло мне. Если вы покажете нам несколько экранов сферы, отображаемой в вашем коде, я могу рассказать вам больше о вашей проблеме. – kolenda

ответ

1

Прежде всего - вам нужно знать, почему и как вы хотите повторно триангулировать свою сетку. На сетках, основанных на Voxel, есть особый вид, поэтому, если вы просто хотите упростить подсчет треугольников/вершин или топологию сетки, то вокселы НЕ подходят для ваших нужд - они просто сломают вашу сетку и сделают ее уродливой.

Однако, если вы действительно хотите иметь вокселей, то давайте посмотрим, что мы говорим о ...

В общем случае линия «изо-то»/поверхность линия/поверхность, по которой наша «нечто» постоянна. Давайте представим карту горы - у вас есть точка, представляющая вершину горы и некоторые круговые линии вокруг нее - эти линии представляют постоянную высоту, а это означает, что когда вы отправляетесь в путешествие по такой линии, вы не будете менять свою высоту Через море.

Wiki example

Теперь, когда вы перемещаете из 2D в 3D, то «линия» заменяется на «поверхности» и все остается тем же самым. Давайте возьмем лампочку в качестве примера - предположим, что лампочка постоянно горит в каждом направлении и зная, что чем ближе вы достигаете - температура повышается, тогда каждая сфера, центрированная на лампе, будет ее «изо-термической» поверхностью. Пример с одной лампочкой довольно тривиален, но когда у вас их больше, поверхность становится более интересной, и это прекрасный пример использования полей Voxel и алгоритма Marching Cubes.

Все эти примеры использовали некоторые физические значения и могут вводить вас в заблуждение в вашем конкретном случае, но когда вам нужно voxelize меш, вы просто предполагаете, что вы храните какую-то «плотность» вашего объекта, что в основном означает, что вокселы внутри из сетки имеют значение 1, а у вокселей снаружи значение 0.

BTW: Несколько месяцев назад я реализовал свои собственные маршевые кубы, которые не использовали статические таблицы, но вычисляли все в коде, чтобы я мог помочь вам с некоторыми деталями, если у вас есть более конкретная проблема.

+0

Думаю, когда вы сказали, что марширующие кубы вытаскивают уродливую поверхность, вы не имели в виду что-то вроде этого, правильно? https://fbcdn-sphotos-ha.akamaihd.net/hphotos-ak-prn2/v/t34/1898986_10152238110344063_1045393450_n.jpg?oh=7dcbb5ac9883d46dd44d430878bb8dab&oe=52F97905&__gda__=1392094483_f0b86843b4797fb6c747114c93848b1c это должно быть единорог: O – maria

+0

(я имею в виду, что есть ошибка где-то в моем коде) – maria

+0

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

Смежные вопросы