Свет OpenGL мигает, когда я обновляю его положение в каждом кадре - PullRequest
2 голосов
/ 24 июня 2009

Я изучаю OpenGL и только начал изучать освещение. Я включаю освещение и свет 0, устанавливаю его ambient / diffuse / specular на значения по умолчанию в моем методе init, а затем каждый кадр я делаю примерно так:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// do my 3rd-person camera transforms and rotations
glLightfv(GL_LIGHT0, GL_POSITION, {0.1f, 0.0f, 0.0f});

(обратите внимание, если это немного не так, я пишу свое приложение на Java с использованием JOGL, поэтому я обрезал gl и GL из каждой строки для лучшей читабельности для всех вас, C ++) :))

Затем я продолжаю рисовать свои треугольники и тому подобное, и в конце я делаю glFlush ().

Странная проблема в том, что когда я запускаю свое приложение, индикатор мигает. У меня нет других вызовов glLightfv во всей моей программе (кроме упомянутых выше вызовов в моем методе init, который я отлаживал, чтобы убедиться, что он запускается только один раз). Он очень быстро мигает, и на экране появляются разрывы. Я также не делаю glDisable (GL_LIGHTING) в любой точке моей сцены; я не думаю, что это должно вызвать мерцание освещенных предметов.

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

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

Вот очень плохой анимированный GIF-файл, который я пытался сделать ... Но он как бы показывает то, о чем я говорю, поскольку свет бывает спорадическим. Подсвеченные рамки - вот как это должно выглядеть. Кроме того, он не так сильно мигает, когда я замедляю его до 5 кадров в секунду, больше просто случайно включается или выключается. Я не понимаю ...

Спасибо !!

1 Ответ

7 голосов
/ 24 июня 2009

Aha! Я нашел ответ уже ... Я указал только 3 числа с плавающей точкой для позиции, когда она хочет 4, как задокументировано здесь . Таким образом, четвертое число, которое должно иметь некоторое влияние на яркость света, читалось из какой-то другой случайной области в памяти, и, конечно, происходили странные вещи.

Извините, что потратил ваше время!

...