![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Добавление освещения в сцену производится в следующем порядке:
1) У всех объектов для каждой вершины задается вектор нормали. Эти векторы определяют ориентацию объекта относительно источников света.
2) Задаются местоположение и свойства одного или нескольких источников света. Каждый источник необходимо включить.
3) Задаются параметры модели освещения, которые определяют уровень фонового рассеянного света и эффективную точку наблюдения (она используется при вычислениях освещения).
4) Задаются свойства материалов объектов сцены.
Выполнение перечисленных действий показано в программе 5.1. Она рисует сферу, освещенную одним источником света (см. рис. 5.2). Вызовы всех функций, имеющих отношение к освещению, вынесены в функцию lightInit().
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
void lightsInit()
{
float mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
float mat_shininess[] = { 50.0 };
float light_position[] = { 1.0, 1.0, 1.0, 0.0 };
float light_global_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_global_ambient)
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
}
void CALLBACK display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
auxSolidSphere(1.0);
glFlush();
}
void CALLBACK resize(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (width <= height)
glOrtho(-1.5, 1.5, -1.5*(float)height/width,
1.5*(float)height/width, -10.0, 10.0);
else
glOrtho(-1.5*(float)width/height,
1.5*(float)width/height, -1.5, 1.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA | AUX_DEPTH);
auxInitPosition(0, 0, 400, 400);
auxInitWindow("Лекция 5, программа 5.1");
lightsInit();
auxReshapeFunc(resize);
auxMainLoop(display);
}
Программа 5.1. Рисование освещенной сферы:
Дата публикования: 2015-10-09; Прочитано: 172 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!