Самоучитель по 3dsmax 7

         

Тогда поверхность проходит через точки (*), приближаем их линейной интерполяцией и проводим...


Тогда поверхность проходит через точки (*), приближаем их линейной интерполяцией и проводим через них треугольную грань. Какие ребра пересекаются с поверхностью, какие точки пересечния и как соединять - узнаем из таблиц по индексу; в данном случае индекс равен 11011111b=0DFh (установлены все биты, кроме 6го).

Алгоритм по шагам:

  • посчитать значения функции в узлах сетки (вершинах кубиков)

  • для каждого кубика:

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

    • взять из таблицы по индексу кубика слово, каждый бит в котором определяет, пересекает ли соответствующее ему (биту) ребро кубика изоповерхность, или нет. Если да, то посчитать (простая линейная интерполяция между соответствующими ребру вершинами) координаты точки пересечения

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

Неоднократно упоминавшиеся магические таблицы приведены в примерчике, там же приведен кусок кода, который довольно легко переделть под свой engine. Пример взят с http://www.mhri.edu.au/~pdb/modelling/polygonise, сам по себе он компилироваться НЕ будет, но все там написано правильно и никаких ошибок в таблицах нет (так что ищите ошибку в своем коде).

Содержание раздела