создание уличных фонарей в opengl - PullRequest
1 голос
/ 26 декабря 2011

Я пытаюсь создать уличные фонари в своем окружении в opengl, используя c ++. Мне нужно создать прожекторы для этого, я написал код ниже, но он не работает как прожектор. Что я делаю не так, или у вас есть другое решение для моей проблемы?

GLfloat ambientLight[] = {0.7f, 0.2f, 0.2f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); 
GLfloat directedLight[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat directedLightPos[] = {-10.0f, 15.0f, 20.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_DIFFUSE, directedLight);
glLightfv(GL_LIGHT0, GL_POSITION, directedLightPos);

Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011

Если это весь ваш световой код, вам не хватает некоторых важных строк.Вы определяете только цвета рассеянного / рассеянного света и положение освещения.

  • Вам необходимо включить освещение с помощью: glEnable(GL_LIGHTING)
  • Вам необходимо включить используемый свет: например:glEnable(GL_LIGHT0)
  • Я не уверен, но я думаю, что вам также нужно определить материал ( glMaterial ).
  • Вам необходимо определить направление вашего света: glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction);

Два других примечания:

  • Убедитесь, что нормальные векторы установлены правильно иливы не увидите результат
  • Если я правильно помню, фиксированная функция освещения работает только для вершин, а не для пикселей.Так что, если у вас есть источник света выше одного квадратора, вы не увидите никакого светового пятна.
0 голосов
/ 27 декабря 2011

Обратите внимание, что в «новом» opengl (ядро 3. +) нет поддержки «освещения». Все эти перечисления и функции устарели.

Так что вы можете искать другие решения:

Также стоит сказать, что эти «старые» функции освещения очень просты в использовании и имеют много дидактических преимуществ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...