Render.ru

Инвертирование нормалей некоторых полигонов

Castello2401

Пользователь сайта
Рейтинг
2
#1
Есть много импортированных моделей. У этих моделей нормали некоторых полигонов повернуты внутрь. От туда, от куда были импортированные эти модели такое поведение нормально. Но туда, куда я собираюсь экспортировать эти модели, это недопустимо. Решение задачи я вижу таким:
Представить сетку модели в виде 2D развертки. В итоге будет видно, что большинство нормалей направлены в одну сторону (good faces), а меньшинство в противоположенную (bad faces). Инвертировать нормали плохих фейсов. Прошу помочь с реализацией.
 

igorznag

Мастер
Рейтинг
103
#2
Решение задачи я вижу таким: Представить сетку модели в виде 2D развертки.
Выделяем модель. Добавляем модификатор Edit Mesh.
Добавляем модификатор Normal и включаем Unify Normals.
Такой вариант решения задачи подходит для вашего случая?
 

Александр Якушев

Активный участник
Рейтинг
7
#3
Если объекты не впуклые, то можно попробовать такую функцию:
Код:
fn unifyNormal obj =
(
    ObjNumFaces = obj.numfaces -- chislo faysov objecta
    arrayMeshData = #()
    arrayFaces = #()
    for f = 1 to ObjNumFaces do append arrayMeshData #(getFaceNormal obj f, meshop.getFaceCenter obj f)
    for f = 1 to ObjNumFaces do
    (
        theNorm = normalize arrayMeshData[f][1]
        theCent = normalize arrayMeshData[f][2]
        if (dot theNorm theCent)<= 0 do append arrayFaces f
        )
    meshop.flipNormals obj arrayFaces
    update obj --update the mesh
    )
Правда она только для mesh объектов
dot theNorm theCent - скалярное произведение нормали с нормализованным вектором из центра объекта к центру фэйса.
 
Сверху