Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <windows.h>
- #include <iostream>
- #include "glut.h"
- static int w = 0, h = 0;
- static float rtrX = 0.0f;
- static float rtrY = 0.0f;
- static float rtrZ = 0.0f;
- void Init(void) {
- glShadeModel(GL_SMOOTH); // Разрешить плавное цветовое сглаживание
- glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Очистка экрана в черный цвет
- glClearDepth(1.0f); // Разрешить очистку буфера глубины
- glEnable(GL_DEPTH_TEST); // Разрешить тест глубины
- glDepthFunc(GL_LEQUAL); // Тип теста глубины
- glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Улучшение в вычислении перспективы
- }
- void DrawGLScene(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Очистка экрана и буфера глубины
- glLoadIdentity(); // Сброс просмотра
- glTranslatef(-7.0f, 0.0f, -9.0f); // Сдвиг влево и вглубь экрана
- glRotatef(rtrY, 0.0f, 1.0f, 0.0f); // Вращение по оси Y
- glRotatef(rtrX, 1.0f, 0.0f, 0.0f); //Вращение по оси X
- glRotatef(rtrZ, 0.0f, 0.0f, 1.0f); //Вращение по оси Z
- glBegin(GL_TRIANGLES); // Начало рисования TRIANGLES
- glColor3ub(157, 158, 148); // Lemon Grass
- glVertex3f(0.0f, -1.0f, 1.0f); // Низ треугольника (Передняя)
- glVertex3f(-1.0f, 1.0f, 1.0f); // Левая точка
- glVertex3f(1.0f, 1.0f, 1.0f); // Правая точка
- glColor3ub(211, 114, 145); // Charm
- glVertex3f(0.0f, -1.0f, -2.0f); // Низ треугольника (Сзади)
- glVertex3f(-1.0f, 1.0f, -2.0f); // Лево треугольника (Сзади)
- glVertex3f(1.0f, 1.0f, -2.0f); // Право треугольника (Сзади)
- glEnd();
- glBegin(GL_QUADS); // Начало рисования QUADS
- glColor3ub(184, 216, 2); // Rio Grand
- glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Левая)
- glVertex3f(-1.0f, 1.0f, -2.0f); // Верх лево
- glVertex3f(0.0f, -1.0f, -2.0f); // Низ лево
- glVertex3f(0.0f, -1.0f, 1.0f); // Низ право
- glColor3ub(2, 184, 216); // Spain Sky
- glVertex3f(1.0f, 1.0f, 1.0f); // Верх право квадрата (Право)
- glVertex3f(1.0f, 1.0f, -2.0f); // Верх лево
- glVertex3f(0.0f, -1.0f, -2.0f); // Низ лево
- glVertex3f(0.0f, -1.0f, 1.0f); // Низ право
- glColor3ub(155, 40, 255); // Veronica
- glVertex3f(1.0f, 1.0f, 1.0f); // Верх право квадрата (Правая крышка)
- glVertex3f(1.0f, 1.0f, -2.0f); // Верх лево
- glVertex3f(0.0f, 0.0f, -2.0f); // Низ лево
- glVertex3f(0.0f, 0.0f, 1.0f); // Низ право
- glColor3ub(119, 40, 255); // Blue Violet
- glVertex3f(-1.0f, 1.0f, 1.0f); // Верх право квадрата (Левая крышка)
- glVertex3f(-1.0f, 1.0f, -2.0f); // Верх лево
- glVertex3f(0.0f, 0.0f, -2.0f); // Низ лево
- glVertex3f(0.0f, 0.0f, 1.0f); // Низ право
- glEnd();
- ///////////////////////////////////////////////////////
- glLoadIdentity();
- glTranslatef(0.0f, 0.0f, -9.0f); // Сдвиг влево и вглубь экрана
- glRotatef(rtrY, 0.0f, 1.0f, 0.0f); // Вращение по оси Y
- glRotatef(rtrX, 1.0f, 0.0f, 0.0f); //Вращение по оси X
- glRotatef(rtrZ, 0.0f, 0.0f, 1.0f); //Вращение по оси Z
- glBegin(GL_QUADS); // Рисуем куб
- glColor3ub(237, 90, 71); // Carmine
- glVertex3f(-2.0f, 1.0f, -1.0f); // Право верх квадрата (Верх)
- glVertex3f(-2.0f, 1.0f, -3.0f); // Лево верх
- glVertex3f(0.0f, 1.0f, -3.0f); // Лево низ
- glVertex3f(0.0f, 1.0f, -1.0f); // Право низ
- glColor3ub(213, 238, 23); // Arctic Lime
- glVertex3f(1.0f, -1.0f, 1.0f); // Верх право квадрата (Низ
- glVertex3f(-1.0f, -1.0f, 1.0f); // Верх лево
- glVertex3f(-1.0f, -1.0f, -1.0f); // Низ лево
- glVertex3f(1.0f, -1.0f, -1.0f); // Низ право
- glColor3ub(236, 179, 43); // Fuel Yellow
- glVertex3f(0.0f, 1.0f, -1.0f); // Верх право квадрата (Перед)
- glVertex3f(-2.0f, 1.0f, -1.0f); // Верх лево
- glVertex3f(-1.0f, -1.0f, 1.0f); // Низ лево
- glVertex3f(1.0f, -1.0f, 1.0f); // Низ право
- glColor3ub(229, 153, 142); //Tonis
- glVertex3f(1.0f, -1.0f, -1.0f); // Верх право квадрата (Зад)
- glVertex3f(-1.0f, -1.0f, -1.0f); // Верх лево
- glVertex3f(-2.0f, 1.0f, -3.0f); // Низ лево
- glVertex3f(0.0f, 1.0f, -3.0f); // Низ право
- glColor3ub(100, 194, 160); // Tradewind
- glVertex3f(-2.0f, 1.0f, -1.0f); // Верх право квадрата (Левая)
- glVertex3f(-2.0f, 1.0f, -3.0f); // Верх лево
- glVertex3f(-1.0f, -1.0f, -1.0f); // Низ лево
- glVertex3f(-1.0f, -1.0f, 1.0f); // Низ право
- glColor3ub(128, 156, 61); // Sushi
- glVertex3f(0.0f, 1.0f, -3.0f); // Верх право квадрата (Право)
- glVertex3f(0.0f, 1.0f, -1.0f); // Верх лево
- glVertex3f(1.0f, -1.0f, 1.0f); // Низ лево
- glVertex3f(1.0f, -1.0f, -1.0f); // Низ право
- glEnd();
- ///////////////////////////////////////////////////////
- glLoadIdentity();
- glTranslatef(6.0f, 0.0f, -9.0f); // Сдвиг влево и вглубь экрана
- glRotatef(rtrY, 0.0f, 1.0f, 0.0f); // Вращение по оси Y
- glRotatef(rtrX, 1.0f, 0.0f, 0.0f); //Вращение по оси X
- glRotatef(rtrZ, 0.0f, 0.0f, 1.0f); //Вращение по оси Z
- glBegin(GL_TRIANGLES); // Начало рисования TRIANGLES
- glColor3ub(224, 154, 63); // Tigers Eye
- glVertex3f(0.0f, 1.0f, 0.0f); // Верх треугольника (Передняя)
- glVertex3f(-1.0f, -1.0f, 1.0f); // Левая точка (Передняя)
- glVertex3f(1.0f, -1.0f, 1.0f); // Правая точка (Передняя)
- glColor3ub(148, 186, 196); // Niagara
- glVertex3f(0.0f, 1.0f, 0.0f); // Верх треугольника (Правая)
- glVertex3f(1.0f, -1.0f, 1.0f); // Лево треугольника (Правая)
- glVertex3f(1.0f, -1.0f, -1.0f); // Право треугольника (Правая)
- glColor3ub(158, 166, 122); // Green Smoke
- glVertex3f(0.0f, 1.0f, 0.0f); // Низ треугольника (Сзади)
- glVertex3f(1.0f, -1.0f, -1.0f); // Лево треугольника (Сзади)
- glVertex3f(-1.0f, -1.0f, -1.0f); // Право треугольника (Сзади)
- glColor3ub(215, 80, 63); // Flame Pea
- glVertex3f(0.0f, 1.0f, 0.0f); // Верх треугольника (Левая)
- glVertex3f(-1.0f, -1.0f, -1.0f); // Лево треугольника (Левая)
- glVertex3f(-1.0f, -1.0f, 1.0f); // Право треугольника (Левая)
- //нижняя часть
- glColor3ub(148, 186, 196); // Niagara
- glVertex3f(0.0f, -3.0f, 0.0f); // Верх треугольника (Передняя)
- glVertex3f(-1.0f, -1.0f, 1.0f); // Левая точка (Передняя)
- glVertex3f(1.0f, -1.0f, 1.0f); // Правая точка (Передняя)
- glColor3ub(224, 154, 63); // Tigers Eye
- glVertex3f(0.0f, -3.0f, 0.0f); // Верх треугольника (Правая)
- glVertex3f(1.0f, -1.0f, 1.0f); // Лево треугольника (Правая)
- glVertex3f(1.0f, -1.0f, -1.0f); // Право треугольника (Правая)
- glColor3ub(215, 80, 63); // Flame Pea
- glVertex3f(0.0f, -3.0f, 0.0f); // Низ треугольника (Сзади)
- glVertex3f(1.0f, -1.0f, -1.0f); // Лево треугольника (Сзади)
- glVertex3f(-1.0f, -1.0f, -1.0f); // Право треугольника (Сзади)
- glColor3ub(158, 166, 122); // Green Smoke
- glVertex3f(0.0f, -3.0f, 0.0f); // Верх треугольника (Левая)
- glVertex3f(-1.0f, -1.0f, -1.0f); // Лево треугольника (Левая)
- glVertex3f(-1.0f, -1.0f, 1.0f); // Право треугольника (Левая)
- glEnd();
- glFlush();
- // Меняем местами задний и передний буферы
- glutSwapBuffers();
- }
- void Reshape(int width, int height) {
- w = width;
- h = height;
- // Дадим знать OpenGL в какую область будет производиться отрисов-
- // ка - в данном случае: всё окно
- glViewport(0, 0, w, h);
- // Установим текущую матрицу - матрицу проективного преобразования
- glMatrixMode(GL_PROJECTION);
- // Сделаем матрицу проективного преобразования единичной
- glLoadIdentity();
- // Применим матрицу перспективного преобразования исходя из задан-
- // ного угла обзора, отношения ширины к высоте боковых и врехних/
- // нижних отсекающих плоскостей и расстояния ближней и дальней от-
- // секающих плоскостей
- gluPerspective(70.0f, w / h, 0.1f, 100);
- // Установим текущей - матрицу видового преобразования, чтобы далее
- // В программе мы могли работать только с ней
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void keyboard(unsigned char key, int x, int y)
- {
- float speed = 10.0;
- switch (key) {
- case '1':
- rtrY += speed;
- glutPostRedisplay();
- break;
- case '2':
- rtrY -= speed;
- glutPostRedisplay();
- break;
- case '3':
- rtrX += speed;
- glutPostRedisplay();
- break;
- case '4':
- rtrX -= speed;
- glutPostRedisplay();
- break;
- case '5':
- rtrZ += speed;
- glutPostRedisplay();
- break;
- case '6':
- rtrZ -= speed;
- glutPostRedisplay();
- break;
- default:
- break;
- }
- }
- int main(int argc, char *argv[]) {
- glutInit(&argc, argv);
- glutInitWindowSize(1200, 600);
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
- glutCreateWindow("Computer Graphics #8");
- glutDisplayFunc(DrawGLScene);
- glutReshapeFunc(Reshape);
- glutKeyboardFunc(keyboard);
- Init();
- glutMainLoop();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment