include iostream include OpenGL gl include OpenGL glu include GLUT glu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
// подготовка сцены
void init() {
glClearColor(0.0, 0.0, 0.0, 1.0); // цвет очистки буферов - черный
glEnable(GL_DEPTH_TEST); // включаем сортировку по глубине
glDepthFunc(GL_LESS);
glShadeModel(GL_SMOOTH); // режим закрашивания: интерполируемые значения
// ставим источник света
float lightAmb[4] = {1.0, 1.0, 0.0, 1};
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb);
glEnable(GL_LIGHT0 ); // включаем источник света
glEnable(GL_LIGHTING); // включаем освещение
}
// рисование
void display() {
glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); // очистка рабочих буферов
glPushMatrix(); // начинаем матричные преобразования
glRotatef(0, 1, 1, 0); // матрица вращения
glutSolidTeapot(1); // наш чайник
glPopMatrix(); // завершаем матричные преобразования
glutSwapBuffers(); // выводим на экран
}
// перекалибровка при изменении размеров окна
void reshape(int w, int h) {
// область видимости в соответствии с новыми координатами
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
// загружаем единичные матрицы в стеки MODELVIEW, PROJECTION
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// установка перспективы: угол обзора 60 градусов, аспект,
// глубина пространства 20 единиц
gluPerspective(30, GLfloat(1.33), 1, 20 );
// установка вектора обзора
// (0,0,5) камера; (0,0,0) центр сцены, верхом будет ось Y
gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0 );
}
int main(int argc, char** argv) {
glutInit (&argc,argv); // инициализация glut
// будем использовать двойную буферизацию, цветовое пространство RGB,
// сортировку по глубине aka Z-буфер
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
// размер окна пусть будет 800 на 600
glutInitWindowSize( 800,600);
// создаем окно, на выходе получаем идентификатор созданного окна
int glWin=glutCreateWindow("My program");
init(); // подготовка к рисованию
glutDisplayFunc(display); // рисование
glutReshapeFunc(reshape); // действия при изменении окна
glutMainLoop(); // главный цикл glut
return 0;
}