Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример: рисование освещенной сферы



Добавление освещения в сцену производится в следующем порядке:

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; Прочитано: 159 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.014 с)...