А теперь — последняя разновидность света. Как обычно, нам потребуются дополнительные переменные.
AmbientLight : array[0..3] of glFloat = (0.5,0.5,0.5,1.0); DiffuseLight : array[0..3] of glFloat = (1.0,1.0,1.0,1.0); SpecularLight : array[0..3] of glFloat = (1.0,1.0,1.0,1.0); SpecularReflection : array[0..3] of glFloat = (0.4,0.4,0.4,1.0); LightPosition : array[0..3] of glFloat;
SpecularLight
содержит описание источника света, а SpecularReflection
— это интенсивность отражения от материала.
glEnable(GL_LIGHTING); glLightfv(GL_LIGHT0,GL_AMBIENT, @AmbientLight); glLightfv(GL_LIGHT0,GL_DIFFUSE, @DiffuseLight); glLightfv(GL_LIGHT0,GL_SPECULAR, @SpecularLight); glEnable(GL_LIGHT0); LightPosition[0] := 0.0; LightPosition[1] := 0.0; LightPosition[2] := 0.0; LightPosition[3] := 1.0; glLightfv(GL_LIGHT0,GL_POSITION,@LightPosition); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR, @SpecularReflection); glMateriali(GL_FRONT,GL_SHININESS,10);
Теперь создали наш LIGHT0 с новыми значениями зеркального света. Также мы задали некоторые параметры при определении наших материалов. Указываем OpenGL, что наши материалы отражают зеркальный свет. Также определили яркость материалов с помощью glMateriali(GL_FRONT,GL_SHININESS,10);
Главная сцена — та же. Изменилось лишь ее освещение. Рекомендации обычные: не бойтесь экспериментировать. Возьмите исходник примера здесь.