Главная страница

Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


Скачать 0.66 Mb.
НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Дата21.10.2022
Размер0.66 Mb.
Формат файлаdocx
Имя файла221937-83556.docx
ТипРуководство
#747097
страница24 из 30
1   ...   20   21   22   23   24   25   26   27   ...   30
float matl_dif[] = {0.8f ,0.8f,0.0f}; float matl_amb[]= {0.2 f ,0 . 2 i ,0 . 2 i } ; float matl_spec[] = {0.6f ,0.6f,0.6f}; float mat l_shininess=0.5 f *128;

// параметры материала конуса float mat2_dif[] = {0.0i ,0.0f,0.8f}; float mat2_amb[]= {0.2 f ,0 . 2 f ,0 . 2 f } ; float mat2_spec[] = {0.6f ,0.6f,0.6f};

float mat2_shininess =0.7f *128;

// параметры материала шара float mat3_dif[] = {0.9f ,0.2 f ,0.0 f}; float mat3_amb[]= {0.2f,0.2f,0.2f}; float mat3_spec[] = {0.6f ,0.6f ,0.6f}; float mat3_shininess =0.1 f *128;

// Инициализируем параметры материалов и // источника света void init (void)

{

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 );

/* включаем освещение и источник света */ glEnable (GL_LIGHTLNG); glEnable (GL_LIGHT0); /* включаем z—буфер */ glEnable (GL_DEPTH_TEST);

}

// Функция вызывается при необходимости // перерисовки изображения.

Б. 2. Пример 2: Модель освещения OPENGL 175

// В ней осуществляется весь вывод геометрии. void display (void)

{

/* очищаем буфер кадра и буфер глубины */ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BrT) ;

glPushMatrix ();

glRotatef (20.0, 1.0, 0.0, 0.0);

/* отображаем тор */

glMaterialfv (GL_FRONT,GL_ AMBIENT,

matl_amb); glMaterialfv (GL_FRONT,GL_DIFFUSE,

matl_dif); glMaterialfv (GL_FRONT,GL_SPECULAR,

matl_spec) ; g 1M a t e r i a 1 f (GL_FRONT, GL_SHININESS,

matl_shininess );

glPushMatrix (); glTranslatef (-0.75, 0.5, 0.0); glRotatef (90.0, 1.0, 0.0, 0.0); glutSolidTorus (0.275, 0.85, 15, 15); glPopMatrix ();

/* отображаем конус. */ glMaterialfv (GL_FRONT,GL_ AMBIENT,

mat2_amb); glMaterialfv (GL_FRONT,GL_DIFFUSE,

mat2_dif); glMaterialfv (GL_FRONT,GL_SPECULAR,

mat2_spec) ; g 1M a t e r i a 1 f (GL_FRONT, GL_SHININESS,

mat2_shininess );

glPushMatrix ();

176

Приложение Б. Демонстрационные программы

glTranslatef (-0.75, -0.5, 0.0); glRotatef (270.0, 1.0, 0.0, 0.0); glutSolidCone (1.0, 2.0, 15, 15); glPopMatrix () ;

/* отображаем шар */

glMaterialfv (GL_FRONT,GL_ AMBIENT,

mat3_amb) ; glMaterialfv (GL_FRONT, GL_DIFFUSE,

mat3_dif) ; glMaterialfv (GL_FRONT, GL_SPECULAR,

mat3_spec) ; g 1M a t e r i a 1 f (GL_FRONT, GL_SHININESS,

mat3_shininess ) ;

glPushMatrix (); glTranslatef (0.75, 0.0, -1.0); glutSolidSphere (1.0, 15, 15); glPopMatrix () ;

glPopMatrix () ;

/* выводим сцену на экран */

glFlush ();

}

// Вызывается при изменении пользователем

// размеров окна

void reshape(int w, int h)

{

// устанавливаем размер области вывода

// равным размеру окна

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

// задаем матрицу проекции с учетом // размеров окна glMatrixMode (GL_PROJECTION) ; glLoadldentity () ;

Б. 2. Пример 2: Модель освещения OPENGL

177

gluPerspective (

// угол зрения в градусах

40.0 ,

// коэффициент сжатия окна

(GLfloat)w/h,

// расстояние до плоскостей отсечения

1,100.0); glMatrixMode (GL_MODELVIEW);

glLoadldentity () ; gluLookAt (

// положение камеры

O.Of,0.0 f ,8.Of ,

// центр сцены

O.Of ,0.0f ,0.0f ,

// положительное направление, оси у

O.Of ,1.0f ,0.0f);

}

// Вызывается при нажатии клавиши на клавиатуре. void keyboard(unsigned char key, int x, int y)

{

switch (key) {

case 27: /* escape */ exit(0); break;

} }

// Главный цикл приложения

// Создается окно, устанавливается режим

// экрана с буфером глубины

int main (int argc ,
1   ...   20   21   22   23   24   25   26   27   ...   30


написать администратору сайта