Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$apptype GUI}
- uses Gl, Glu, Glut; // GLU нам пока не нужен
- const width = 600; // размеры окна
- height = 600;
- procedure display(); cdecl; // cdecl обязателен
- begin
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очистить экран и Z-буфер
- glLoadIdentity(); // сбросить матрицу рисования
- // красный треугольник
- glColor3f(1.0, 0.0, 0.0);
- glBegin(GL_TRIANGLES); // режим рисования треугольников по 3-м точкам
- glVertex3f(-1.5, 1.8, 0.0);
- glVertex3f(-1.8, 1.2, 0.0);
- glVertex3f(-1.2, 1.2, 0.0);
- glEnd();
- // зелёные линии
- glColor3f(0.0, 1.0, 0.0);
- glBegin(GL_LINE_STRIP); // режим рисования ломаной
- glVertex3f(-0.7, 1.8, 0.0);
- glVertex3f(-1.0, 1.2, 0.0);
- glVertex3f(-0.4, 1.2, 0.0);
- glEnd();
- // большой разноцветный треугольник справа
- glLoadIdentity();
- glTranslatef(0.9, 0.0, 0.0); // Переместить центр координат на вектор (0.9, 0, 0)
- glBegin(GL_TRIANGLES);
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(0.0, 1.0, 0.0);
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(-1.0, -1.0, 0.0);
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(1.0, -1.0, 0.0);
- glEnd();
- // маленький разноцветный повёрнутый треугольник посередине
- glLoadIdentity();
- // Повернуть центр координат на 45 градусов относительно вектора (0, 0, 1)
- glRotatef(45.0, 0.0, 0.0, 1.0);
- glBegin(GL_TRIANGLES);
- glColor3f(1.0, 0.0, 0.0);
- glVertex3f(0.0, 0.5, 0.0);
- glColor3f(0.0, 1.0, 0.0);
- glVertex3f(-0.5, -0.5, 0.0);
- glColor3f(0.0, 0.0, 1.0);
- glVertex3f(0.5, -0.5, 0.0);
- glEnd();
- glFlush(); // вывести всё на экран
- end;
- procedure keyboard(code: byte; x, y: longint); cdecl; // cdecl обязателен
- // аргументы - код нажатой клавиши и положение курсора в момент нажатия
- begin
- case code of
- 27: halt; // код клавиши Esc
- end;
- end;
- procedure initGl;
- begin
- // Установить цвет для очистки экрана
- // Используется в glClear
- glClearColor(0.0, 0.0, 0.0, 0.0); // чёрный
- // Настроить проекцию
- glMatrixMode(GL_PROJECTION); // Перейти в режим редактирования проекции
- glLoadIdentity(); // Сбросить матрицу проекции на id
- glOrtho(-2, 2, -2*height/width, 2*height/width, -2, 2); // ортогональная проекция
- // Будет видно всё в параллелепипеде x=-2..2, y=-2*h/w..2*h/w, z=-2..2
- glMatrixMode(GL_MODELVIEW); // Вернуться в редактирование матрицы рисования
- glLoadIdentity(); // Сбросить матрицу рисования на id
- glClearDepth(1.0); // Забить Z-буфер единицами
- glEnable(GL_DEPTH_TEST); // Включить проверку Z-буфера
- glDepthFunc(GL_LEQUAL); // Установить функцию сравнения с Z-буфером на <=
- end;
- procedure initGlut;
- begin
- glutInitDisplayMode(GLUT_SINGLE or GLUT_RGB); // магия
- glutInitWindowSize(width, height); // Установить размер окна
- glutCreateWindow('example'); // Создать окно с таким заголовком
- glutDisplayFunc(@display); // Установить функцию отрисовки окна
- glutKeyboardFunc(@keyboard); // Установить функцию обработки клавиатуры
- end;
- begin
- initGlut; // Инициализация библиотеки GLUT, см. выше
- initGl; // Основная инициализация OpenGL, см. выше
- glutMainLoop(); // Запустить главный цикл обработки событий
- end.
Add Comment
Please, Sign In to add comment