В настоящее время я пытаюсь заставить освещение работать с цилиндрическим объектом, созданным в блендере (базовый цилиндр, масштабированный по оси Z, без дальнейшей обработки), и загрузить этот объект через Assimp со следующими параметрами aiProcess_GenSmoothNormals | aiProcess_Triangulate | aiProcess_CalcTangentSpace | aiProcess_FlipUVs
. В параметрах экспорта волнового фронта блендера установлена опция triangulate
.
Проблема заключается в некотором масштабировании, выполненном на цилиндре (обычно выше определенного порога масштабирования). Моя реализация OpenGL показывает инвертированные нормали (у меня есть геометрический шейдер, который показывает нормали), и поскольку он инвертирует нормали, освещение также инвертируется. Это происходит только с этими цилиндроподобными объектами с определенным масштабированием (по крайней мере, только тогда это пришло мне в голову). Все остальные объекты в моей сцене работают нормально, кроме этих цилиндров.
Я понятия не имею, связано ли это с тем, как Assimp загружает файлы .obj, или с тем, как блендер обрабатывает нормали при экспорте, или, может быть, это связано с большой шкалой z, которая разрушает нормальную интерполяцию или что-то еще? Ниже вы найдете изображение перевернутых нормалей (слева) и правильных нормалей (справа), где объект с перевернутыми нормалями имеет большую шкалу z, сделанную с помощью блендера.
изменить
На этот раз я вручную триангулировал цилиндры в блендере и проверил их нормали. Нормали всех цилиндров правильные и затем экспортируются как есть. Тем не менее, одна труба теперь имеет правильное освещение, но другие трубы по-прежнему имеют инвертированные нормали, хотя они имеют ту же триангуляцию, что и рабочая труба, что сбивает с толку. На следующем изображении показаны нормали цилиндров.
изменить
Окей, я кое-что понял. Как только я начал масштабировать правильно освещенную трубу до того же масштаба, что и неправильную трубу (слева), нормали правильной трубы были снова инвертированы (инвертированы в моей программе OpenGL, в Blender нормали все еще выглядят нормально). Таким образом, шкала длины цилиндров определенно имеет какое-то отношение к инвертированию их нормалей, хотя я не знаю, что это может быть.
aiProcess_FixInfacingNormals
к своей битовой маске? - person Andon M. Coleman   schedule 17.01.2014triangulate
. Я отредактирую это в вопросе. - person Joey Dewd   schedule 17.01.2014