OpenGL Освещение на полигоне

Я пишу очень маленькую игру, в этой игре у игрока есть фонарик.

Мир, в котором разворачивается игра, - это маленький дом.

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

Есть ли способ сделать так, чтобы середина этого многоугольника была затронута светом, даже если там нет определенной вершины?

Я также проверил это с помощью позиционного источника света, и это также влияет только на вершины.

1 ответ

Решение

То, что вы видите здесь, это затенение Гуро, или только освещение вершин. Это то, что реализует фиксированная функция pipleline в OpenGL. Однако никто не использует это в этом тысячелетии. То, что вы просите, это затенение Фонга, или освещение на пиксель/на фрагмент. В OpenGL это означает, что вы должны использовать программируемый конвейер и писать собственные шейдеры. Но вы все равно должны это делать, так как конвейер с фиксированными функциями объявлен устаревшим со времени GL3 и фактически удален из современных профилей ядра OpenGL.

Поэтому я предлагаю вам изучить современный OpenGL, возможно, следуя нескольким учебникам:

Первый также охватывает темы освещения в целом и освещения по фрагментам ( например, здесь), но вы должны знать, что это немного более сложные темы, и новичку потребуется некоторое время, чтобы сначала изучить все основы.

Другие вопросы по тегам