Otchet_po_KG

ФГОУ ВПО Пермский государственный институт искусства и культуры
Кафедра Информатики и информационных технологий
















Отчет по дисциплине
«Компьютерная графика»








Выполнила: Перевалов Р.О.
гр. ИР 10/1

Проверил:
Лясин В.Н.









Пермь 2011

Постановка задачи:
Изобразить по средствам языка программирования OpenGL трёхмерную сцену состоящую из нескольких домов. Организовать перемещение по сцене.

Анализ программы:
Определения команд GL находятся в файле gl.h, для включения которого нужно написать
#include
Для работы с библиотекой GLU нужно аналогично включить файл glu.h.Версии этих библиотек, как правило, включаются в дистрибутивы систем программирования, например Microsoft Visual C++.В отличие от стандартных библиотек, пакет GLUT нужно инсталлировать и подключать отдельно.Все команды (процедуры и функции) библиотеки GL начинаются с префикса gl, все константы – с префикса GL_. Соответствующие команды и константы библиотек GLU и GLUT аналогично имеют префиксы glu (GLU_) и glut (GLUT_).
Функция glutInit(&argc, argv) производит начальную инициализацию самой библиотеки GLUT.
Команда glutInitDisplayMode(GLUT_RGB) инициализирует буфер кадра и настраивает полноцветный (непалитровый) режим RGB.
glutInitWindowSize(Width, Height) используется для задания начальных размеров окна.
Наконец, glutCreateWindow("Red square example") задает заголовок окна и визуализирует само окно на экране.
Команды
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
регистрируют функции Display(), Reshape() и Keyboard() как функции, которые будут вызваны, соответственно, при перерисовке окна, изменении размеров окна, нажатии клавиши на клавиатуре. Контроль всех событий и вызов нужных функций происходит внутри бесконечного цикла в функции glutMainLoop().Заметим, что библиотека GLUT не входит в состав OpenGL, а является лишь переносимой прослойкой между OpenGL и оконной подсистемой, предоставляя минимальный интерфейс. OpenGL- приложение для конкретной платформы может быть написано с использованием специфических API (Win32, X Window и т.д.), которые как правило предоставляют более широкие возможности.
Положение вершины определяются заданием ее координат в двух-, трех-, или четырехмерном пространстве (однородные координаты). Это реализуется с помощью нескольких вариантов команды glVertex*:
void glVertex[2 3 4][s i f d] (type coords)
void glVertex[2 3 4][s i f d]v (type *coords)
Каждая команда задает четыре координаты вершины: x, y, z, w. Команда glVertex2* получает значения x и y. Координата z в таком случае устанавливается по умолчанию равной 0, координата w – равной 1. Vertex3* получает координаты x, y, z и заносит в координату w значение 1. Vertex4* позволяет задать все четыре координаты.
Для задания текущего цвета вершины используются команды :
void glColor[3 4][b s i f] (GLtype components)
void glColor[3 4][b s i f]v (GLtype components)
Первые три параметра задают R, G, B компоненты цвета, а последний параметр определяет коэффициент непрозрачности (так называемая альфа-компонента). Если в названии команды указан тип f’ (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение альфа-компоненты устанавливается равным 1.0, что соответствует полной непрозрачности. Тип ub’ (unsigned byte) подразумевает, что значения должны лежать в отрезке [0,255].
Чтобы задать атрибуты графического примитива, одних координат вершин недостаточно. Эти вершины надо объединить в одно целое, определив необходимые свойства. Для этого в OpenGL используются так называемые операторные скобки, являющиеся вызовами специальных команд OpenGL Определение примитива или последовательности примитивов происходит между вызовами команд
void glBegin (GLenum mode);
void glEnd (void);
Параметр mode определяет тип примитива, который задается внутри и может принимать следующие значения:
GL_POINTS каждая вершина задает координаты некоторой точки.
GL_LINES каждая отдельная пара вершин определяет
отрезок; если задано нечетное число вершин,
то последняя вершина игнорируется.
GL_LINE_STRIP каждая следующая вершина задает отрезок вместе с предыдущей.
GL_LINE_LOOP отличие от предыдущего примитива только в том, что последний отрезок определяется последней и первой вершиной, образуя замкнутую ломаную.
GL_TRIANGLES каждые отдельные три вершины определяют треугольник; если задано не кратное трем число вершин, то последние вершины игнорируются.
GL_TRIANGLE_STRIP каждая следующая вершина задает треугольник вместе с двумя предыдущими.
GL_TRIANGLE_FAN треугольники задаются первой вершиной и каждой следующей парой вершин (пары не пересекаются).
GL_QUADS каждая отдельная четверка вершин определяет четырехугольник; если задано не кратное четырем число вершин, то последние вершины игнорируются.
GL_QUAD_STRIP четырехугольник с номером n определяется вершинами с номерами 2n-1, 2n, 2n+2, 2n+1.
GL_POLYGON последовательно задаются вершины выпуклого
многоугольника.
Для задания глобальных параметров освещения используются
команды
void glLightModel[i f] (GLenum pname, GLenum param)
void glLightModel[i f]v (GLenum pname, const GLtype *params)
Аргумент pname определяет, какой параметр модели освещения будет настраиваться и может принимать следующие значения:
GL_LIGHT_MODEL_LOCAL_VIEWER параметр param должен быть булевым и задает положение наблюдателя. Если он равен GL_FALSE, то направление обзора считается параллельным оси –z, вне зависимости от положения в видовыx координатах. Если же он равен
GL_TRUE, то наблюдатель находится в начале видовой системы координат. Это может улучшить качество освещения, но усложняет его расчет. Значение по умолчанию: GL_FALSE.
GL_LIGHT_MODEL_TWO_SIDE параметр param должен быть булевым и управляет режимом расчета освещенности, как для лицевых, так и для обратных граней. Если он равен GL_FALSE, то освещенность рассчитывается только для лицевых граней. Если же он равен GL_TRUE, расчет проводится и для обратных граней. Значение по умолчанию: GL_FALSE.
GL_LIGHT_MODEL_AMBIENT параметр params должен содержать четыре целых или вещественных числа, которые определяют цвет фонового освещения даже в случае отсутствия определенных источников света. Значение по умолчанию: (0.2, 0.2, 0.2,1.0).
GL_TEXTURE_GEN_MODE определяет функцию для наложения текстуры.
GL_TEXTURE_MIN_FILTER параметр param определяет функцию, которая будет использоваться для сжатия текстуры. При значении GL_NEAREST будет использоваться один (ближайший), а при значении GL_LINEAR четыре ближайших элемента текстуры. Значение по умолчанию:GL_LINEAR.
GL_TEXTURE_MAG_FILTER параметр param определяет функцию, которая будет использоваться для увеличения(растяжения) текстуры. При значении
GL_NEAREST будет использоваться один (ближайший), а при значении GL_LINEAR
четыре ближайших элемента текстуры. Значение по умолчанию:GL_LINEAR.
GL_TEXTURE_WRAP_S параметр param устанавливает значение координаты s, если оно не входит в отрезок [0,1]. При значении GL_ REPEAT целая часть s отбрасывается, и в результате изображение размножается по поверхности. При значении
GL_CLAMP используются краевые значения: 0 или 1, что удобно использовать, если на объект накладывается один образ. Значение по умолчанию: GL_REPEAT.













































Скриншоты:







Текст программы:

#include
#include
#include "glut.h"
#include
#include ·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Направление взгляда
v=y+cos(a); // Направление взгляда

gluLookAt(x,y,z,u,v,w,0,0,1);

glPushMatrix(); // Сохраняем текущие координаты


// Дом первый
// Передняя стена (снаружи слева)
glEnable(GL_TEXTURE_2D);
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Передняя стена (слева к двери)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -25, -150, 33);
glTexCoord2f(0.0,0.5);
glVertex3f( -25, -130, 33);
glTexCoord2f(2.0,0.5);
glVertex3f( -25, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( -25, -150, -100);
glEnd();

// Передняя стена (снаружи справа)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -150, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( 150, -150, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( 150, -150, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -150, -100);
glEnd();

// Передняя стена (справа к двери)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -150, 33);
glTexCoord2f(0.0,0.5);
glVertex3f( 25, -130, 33);
glTexCoord2f(2.0,0.5);
glVertex3f( 25, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -150, -100);
glEnd();

// Передняя стена (снаружи над дверью)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, -150, 100);
glTexCoord2f(1.0,6.0);
glVertex3f( 150, -150, 33);
glTexCoord2f(1.0,0.0);
glVertex3f( -150, -150, 33);
glEnd();

// Передняя стена (над дверью к двери)
steni.SetActive
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Дверь
door.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -25, -130, 33);
glTexCoord2f(0.0,1.0);
glVertex3f( 25, -130, 33);
glTexCoord2f(1.0,1.0);
glVertex3f( 25, -130, -100);
glTexCoord2f(1.0,0.0);
glVertex3f( -25, -130, -100);
glEnd();

// Передняя стена (внутри слева)

oboi.SetActive();// Текстура внутренних стен
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Передняя стена (внутри справа)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -130, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( 150, -130, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( 150, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -130, -100);
glEnd();

// Передняя стена (внутри над дверью)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
gl
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Задняя стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 130, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 130, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, 130, -100);
glEnd();

// Задняя стена (снаружи)
steni.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, 150, -100);
glEnd();

// Левая стена (снаружи)
steni.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( -150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( -150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, -150, -100);
glEnd();

// Левая стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -130, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( -130, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( -130, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -130, -150, -100);
glEnd();


// Правая стена (снаружи)
steni.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( 150, -150, -100);
glEnd();

// Правая стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 130, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 130, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 130, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( 130, -150, -100);
glEnd();

// Потолок
poto
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Крыша
steni.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, 101);
glTexCoord2f(0.0,4.0);
glVertex3f( -150, -150, 101);
glTexCoord2f(4.0,4.0);
glVertex3f( 150, -150, 101);
glTexCoord2f(4.0,0.0);
glVertex3f( 150, 130, 101);
glEnd();

// Трава
trava.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -10000, 10000, -100.1);

·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Пол
pol.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, -100);
glTexCoord2f(0.0,4.0);
glVertex3f( -150, -130, -100);
glTexCoord2f(4.0,4.0);
glVertex3f( 150, -130, -100);
glTexCoord2f(4.0,0.0);
glVertex3f( 150, 130, -100);
glEnd();

// Небо напротив камеры
nebo.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -10000,
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
· Небо справа от камеры
nebo.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 5000, -10000, 10000);
glTexCoord2f(0.0,1.0);
glVertex3f( 5000, 10000, 10000);
glTexCoord2f(1.0
·,1.0);
glVertex3f( 5000, 10000, -100);
glTexCoord2f(1.0,0.0);
glVertex3f( 5000, -10000, -100);
glEnd();

// Небо позади камеры
neboz.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -10000, -5000, 10000);
glTexCoord2f(0.0,1.0);
glVertex3f( 10000, -5000, 10000);
glTexCoord2f(1.0,1.0);
glVertex3f( 10000, -5000, -100);
glTexCoord2f(1.0,0.0);
glVertex3f( -10000, -5000, -100);
glEnd();

// Небо слева от камеры
neboz.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -5000, -10000, 10000);
glTexCoord2f(0.0,1.0);
glVertex3f( -5000, 10000, 10000);
glTexCoord2f(1.0,1.0);
glVertex3f( -5000, 10000, -100);
glTexCoord2f(1.0,0.0);
glVertex3f( -5000, -10000, -100);
glEnd();

// крыша (с лева)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( -170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с права)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с переди)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, -170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, -75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с зади)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, 170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();

//дом второй
glPushMatrix();
glTranslated(-500, -150, 0);

steni2.SetActive();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -150, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( -25, -150, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( -25, -150, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( -150, -150, -100);
glEnd();

// Передняя стена (слева к двери)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -25, -150, 33);
glTexCoord2f(0.0,0.5);
glVertex3f( -25, -130, 33);
glTexCoord2f(2.0,0.5);
glVertex3f( -25, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( -25, -150, -100);
glEnd();

// Передняя стена (снаружи справа)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -150, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( 150, -150, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( 150, -150, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -150, -100);
glEnd();

// Передняя стена (справа к двери)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -150, 33);
glTexCoord2f(0.0,0.5);
glVertex3f( 25, -130, 33);
glTexCoord2f(2.0,0.5);
glVertex3f( 25, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -150, -100);
glEnd();

// Передняя стена (снаружи над дверью)
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, -150, 100);
glTexCoord2f(1.0,6.0);
glVertex3f( 150, -150, 33);
glTexCoord2f(1.0,0.0);
glVertex3f( -150, -150, 33);
glEnd();

// Передняя стена (над дверью к двери)
steni2.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -25, -150, 33);
glTexCoord2f(0.0,0.5);
glVertex3f( -25, -130, 33);
glTexCoord2f(1.0,0.5);
glVertex3f( 25, -130, 33);
glTexCoord2f(1.0,0.0);
glVertex3f( 25, -150, 33);
glEnd();

// Дверь
door.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -25, -130, 33);
glTexCoord2f(0.0,1.0);
glVertex3f( 25, -130, 33);
glTexCoord2f(1.0,1.0);
glVertex3f( 25, -130, -100);
glTexCoord2f(1.0,0.0);
glVertex3f( -25, -130, -100);
glEnd();

// Передняя стена (внутри слева)

oboi.SetActive();// Текстура внутренних стен
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -130, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( -25, -130, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( -25, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( -150, -130, -100);
glEnd();

// Передняя стена (внутри справа)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 25, -130, 33);
glTexCoord2f(0.0,2.5);
glVertex3f( 150, -130, 33);
glTexCoord2f(2.0,2.5);
glVertex3f( 150, -130, -100);
glTexCoord2f(2.0,0.0);
glVertex3f( 25, -130, -100);
glEnd();

// Передняя стена (внутри над дверью)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -130, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, -130, 100);
glTexCoord2f(1.0,6.0);
glVertex3f( 150, -130, 33);
glTexCoord2f(1.0,0.0);
glVertex3f( -150, -130, 33);
glEnd();

// Задняя стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 130, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 130, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, 130, -100);
glEnd();

// Задняя стена (снаружи)
steni2.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, 150, -100);
glEnd();

// Левая стена (снаружи)
steni2.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( -150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( -150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -150, -150, -100);
glEnd();

// Левая стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -130, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( -130, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( -130, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( -130, -150, -100);
glEnd();


// Правая стена (снаружи)
steni2.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 150, -150, -50);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, -50);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f( 150, -150, -100);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 150, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, 50);
glTexCoord2f(3.0,0.0);
glVertex3f( 150, -150, 50);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 150, -150, 50);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, -50, 50);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, -50, -50);
glTexCoord2f(3.0,0.0);
glVertex3f( 150, -150, -50);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 150, 50, 50);
glTexCoord2f(0.0,6.0);
glVertex3f( 150, 150, 50);
glTexCoord2f(3.0,6.0);
glVertex3f( 150, 150, -50);
glTexCoord2f(3.0,0.0);
glVertex3f( 150, 50, -50);
glEnd();

// Правая стена (внутри)
oboi.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(130, -150, 100);
glTexCoord2f(0.0,6.0);
glVertex3f(130, 150, 100);
glTexCoord2f(3.0,6.0);
glVertex3f(130, 150, 50);
glTexCoord2f(3.0,0.0);
glVertex3f(130, -150, 50);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(130, -150, -50);
glTexCoord2f(0.0,6.0);
glVertex3f(130, 150, -50);
glTexCoord2f(3.0,6.0);
glVertex3f(130, 150, -100);
glTexCoord2f(3.0,0.0);
glVertex3f(130, -150, -100);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(130, 50, 50);
glTexCoord2f(0.0,6.0);
glVertex3f(130, 150, 50);
glTexCoord2f(3.0,6.0);
glVertex3f(130, 150, -50);
glTexCoord2f(3.0,0.0);
glVertex3f(130, 50, -50);
glEnd();

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(130, -150, 50);
glTexCoord2f(0.0,6.0);
glVertex3f(130, -50, 50);
glTexCoord2f(3.0,6.0);
glVertex3f(130, -50, -50);
glTexCoord2f(3.0,0.0);
glVertex3f(130, -150, -50);
glEnd();

// Потолок
potolok.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -130, 130, 100);
glTexCoord2f(0.0,4.0);
glVertex3f( -130, -130, 100);
glTexCoord2f(4.0,4.0);
glVertex3f( 130, -130, 100);
glTexCoord2f(4.0,0.0);
glVertex3f( 130, 130, 100);
glEnd();
// Крыша
steni.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, 101);
glTexCoord2f(0.0,4.0);
glVertex3f( -150, -150, 101);
glTexCoord2f(4.0,4.0);
glVertex3f( 150, -150, 101);
glTexCoord2f(4.0,0.0);
glVertex3f( 150, 130, 101);
glEnd();

// Пол
pol.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -150, 130, -100);
glTexCoord2f(0.0,4.0);
glVertex3f( -150, -130, -100);
glTexCoord2f(4.0,4.0);
glVertex3f( 150, -130, -100);
glTexCoord2f(4.0,0.0);
glVertex3f( 150, 130, -100);
glEnd();

// крыша (с лева)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( -170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с права)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( 170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с переди)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, -170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, -170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, -75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
// крыша (с зади)
krisha.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f( -170, 170, 90);
glTexCoord2f(0.0,6.0);
glVertex3f( 170, 170, 90);
glTexCoord2f(3.0,6.0);
glVertex3f( 0, 75, 200);
glTexCoord2f(3.0,0.0);
glVertex3f( 0, -75, 200);
glEnd();
glPopMatrix();

glutSwapBuffers();
}

void Keyboard(unsigned char key, int x1, int y1)
{
switch (key)
{
case 'a': x-=sin(a+1.5)*speed; y-=cos(a+1.5)*speed; glutIdleFunc(Display); break;
case 'd': x+=sin(a+1.5)*speed; y+=cos(a+1.5)*speed; glutIdleFunc(Display); break;
case 'w': x+=(u-x)*speed; y+=(v-y)*speed; glutIdleFunc(Display); break;
case 's': x-=(u-x)*speed; y-=(v-y)*speed; glutIdleFunc(Display); break;
case 'q': w+=0.1; glutIdleFunc(Display); break;
case 'e': w-=0.1; glutIdleFunc(Display); break;
case 'z': a-=0.10; glutIdleFunc(Display); break;
case 'x': a+=0.10; glutIdleFunc(Display); break;
case 'c': z+=10;w+=10; glutIdleFunc(Display); break;
case 'v': z-=10;w-=10; glutIdleFunc(Display); break;
default: break;
}
}


void Reshape(int w, int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(90,1,30,10000);
glMatrixMode (GL_MODELVIEW);
}

int main(int argc, char **argv)
{
float pos[4] = {-512,512,100,1};
float dir[3] = {0,50,0};

GLfloat mat_specular[] = {0.63,0.56,0.37,1};
GLfloat mat_ambient[] = {0.25,0.2,0.07,1};
GLfloat mat_diffuse[] = {0.75, 0.61, 0.23,1};

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(Width, Height);
glutInitWindowPosition(0,0);
glutCreateWindow("Перевалов Роман");
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(90,1.25,30,500);
glMatrixMode ( GL_MODELVIEW );
glLoadIdentity ();
glutKeyboardFunc(Keyboard);
InitTextures();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialf(GL_FRONT, GL_SHININESS, 51.2);
glLighti(GL_LIGHT0, GL_SPOT_EXPONENT, 0);
glLighti(GL_LIGHT0, GL_SPOT_CUTOFF, 180);
glutMainLoop();

}


Рисунок 1Рисунок 415

Приложенные файлы

  • doc 18081236
    Размер файла: 6 MB Загрузок: 0

Добавить комментарий