2013-04-25 2 views
0

Я программирую в WebGL (используя шейдеры OpenGL) простой загрузчик модели. Я реализовал фонг-затенение в шейдере фрагментов. Однако, когда я загружаю более крупные объекты, чем простые обезьяны/кубы, и выключаю камеру из источника света, сетки выглядят странно (aliased?). Некоторые из них даже облегчены, хотя они должны быть скрыты (черные).Сетка на другой стороне источника света выглядит странно

Облегченный сторона OK: Lightened side is OK

Другая сторона не так: Other side is wrong

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

Благодарим вас за советы.

ответ

2

Это выглядит как односторонний vs двухсторонний проблема освещения для меня. Если ваша сетка состоит только из одного «слоя» граней, у них будут нормали, указывающие только на одно направление. Если используется одностороннее освещение, то обратная сторона, то есть если свет находится на стороне, от которой указывает нормальная точка, будет выглядеть странно.

Есть три способа, чтобы преодолеть это:

  • Используйте двухсторонний освещение
  • нарисовать объект дважды с задними гранями выбракованных, а затем флип нормалей и выбраковки переднюю поверхность
  • Дайте толщину сетки , так что есть две стороны (вы должны включить отбрасывание задней поверхности тогда)
+0

+1: Первое, что меня поразило, было «это одностороннее освещение». –

+0

Спасибо за ответ, я добавил отсев нормального инверсию в мой пиксельный шейдер таким образом: 'если (gl_FrontFacing == ложь) нормальный = нормальный * vec3 (-1,0, -1,0, -1,0);' и его немного помогли (интерьеры этого автомобиля выглядят лучше), но черные сетки/многоугольники по-прежнему черные, и все еще видны «линии сглаживания пунктирных линий». Возможно ли легко реализовать (или просто включить) наложение псевдонимов в OpenGL ES 2.0? Это может помочь. – lukyer

0

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

спасибо.

Смежные вопросы