OpenGL: Что произойдет, если я укажу свет как зеркальный, так и рассеянный? - PullRequest
2 голосов
/ 01 декабря 2010

На примере освещения сферы из Красной книги я прочитал это:

GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Затем он говорит:

В этом примере первые три вызова glLightfv ()излишни, так как они используются для указания значений по умолчанию для параметров GL_AMBIENT, GL_DIFFUSE и GL_SPECULAR

Насколько я понимаю, каждый источник света имеет значения по умолчанию для своих рассеянных, рассеянных и зеркальныхпараметры и эти три массива указывают, что это за значения по умолчанию, это верно? Каждый источник света по умолчанию рассеянный, зеркальный и рассеянный?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

В модели освещения OpenGL для объекта вычисляются 4 отдельных уравнения освещения: окружающее, рассеянное, зеркальное и излучение.Окружающая среда не учитывает нормали, Diffuse и Specular делают, а Emission вообще не учитывает свет.

Все эти различные значения освещения суммируются, чтобы дать окончательный цвет объекта.

2 голосов
/ 01 декабря 2010

Да, это значения по умолчанию для Light0: http://www.opengl.org/sdk/docs/man/xhtml/glLight.xml

...