-
Здравствуйте. Программка работает с файлами формата ASE. Расчет нормалей выполняется во время загрузки файла. Проблема в том, что некоторые нормали получаются инвертированными, изза того, что 3dsmax сохраняет вершины некоторых треугольников сетки в обратном порядке. Как определить в каком порядке расположены вершины конкретного треугольника? Я так понимаю с этим связаны параметры AB/BC/CA которые находятся в списке фейсов сетки? Как использовать эти параметры?
-
3ds max, Maya и большинство других "правильных" 3д редакторов сохраняют все треугольники с одинаковым порядком обхода вершин. Но применение модифиакторов (Mirror например) может изменить порядок. Рекомендую делать Reset XForm и Collapse для меша перед его экспортом.
-
> XProger © (19.03.08 01:31) [1]
Спасибо, учту. Кстати с параметрами AB/BC/CA я так и не разобрался, зато зато понял почему вроде бы даже при правильном расчете нормалей объект освещается некорректно. Все дело в группах сглаживания. Сначала я их игнорировал, а потом разобрался и понял что ошибался. Для тех, кто столкнется с такой проблемой как я приведу свое решение проблемы. Дело в том, что есть такое понятие как нормаль к плоскости(треугольнику) и вершинная нормаль. Казалось бы, как можно получить нормаль к точке. Вот тут у меня и возникли проблемы. Я просто брал среднее значение векторов нормалей смежных треугольников, и в итоге получался глюк! Тут и приходят на помощь группы сглаживания, т.е. при расчете нормали используются только треугольники имеющие одинаковые группы сглаживания. В случае с ASE за это отвечает параметр фейса *MESH_SMOOTHING. Если фейс имеет нулевую группу сглаживания, то вершинная нормаль будет равна нормали к текущему треугольнику. Надею, я кому-то помог. Не ругайте за неточности, ибо к данному решению я пришел сам, поэтому мог что-то упустить.
|