Конференция "Игры" » Расчет нормалей [Delphi, Windows, Linux]
 
  • 3DMax (18.03.08 20:32) [0]
    Здравствуйте. Программка работает с файлами формата ASE. Расчет нормалей выполняется во время загрузки файла. Проблема в том, что некоторые нормали получаются инвертированными, изза того, что 3dsmax сохраняет вершины некоторых треугольников сетки в обратном порядке. Как определить в каком порядке расположены вершины конкретного треугольника? Я так понимаю с этим связаны параметры AB/BC/CA которые находятся в списке фейсов сетки? Как использовать эти параметры?
  • XProger © (19.03.08 01:31) [1]
    3ds max, Maya и большинство других "правильных" 3д редакторов сохраняют все треугольники с одинаковым порядком обхода вершин. Но применение модифиакторов (Mirror например) может изменить порядок.
    Рекомендую делать Reset XForm и Collapse для меша перед его экспортом.
  • 3DMax (22.03.08 02:01) [2]

    > XProger ©   (19.03.08 01:31) [1]

    Спасибо, учту.
    Кстати с параметрами AB/BC/CA я так и не разобрался, зато зато понял почему вроде бы даже при правильном расчете нормалей объект освещается некорректно. Все дело в группах сглаживания. Сначала я их игнорировал, а потом разобрался и понял что ошибался. Для тех, кто столкнется с такой проблемой как я приведу свое решение проблемы.
    Дело в том, что есть такое понятие как нормаль к плоскости(треугольнику) и вершинная нормаль. Казалось бы, как можно получить нормаль к точке. Вот тут у меня и возникли проблемы. Я просто брал среднее значение векторов нормалей смежных треугольников, и в итоге получался глюк! Тут и приходят на помощь группы сглаживания, т.е. при расчете нормали используются только треугольники имеющие одинаковые группы сглаживания. В случае с ASE за это отвечает параметр фейса *MESH_SMOOTHING. Если фейс имеет нулевую группу сглаживания, то вершинная нормаль будет равна нормали к текущему треугольнику.
    Надею, я кому-то помог. Не ругайте за неточности, ибо к данному решению я пришел сам, поэтому мог что-то упустить.
 
Конференция "Игры" » Расчет нормалей [Delphi, Windows, Linux]
Есть новые Нет новых   [134431   +10][b:0][p:0]