Софт-Архив

Gltranslated img-1

Gltranslated

Рейтинг: 5.0/5.0 (1695 проголосовавших)

Описание

Создание компьютерной графики при помощи OpenGL - реферат, курсовая работа, диплом

Создание компьютерной графики при помощи OpenGL

Чтобы скачать работу бесплатно нужно подписаться на нашу группу ВКонтакте! Просто подпишитесь, нажав на кнопку внизу.

Через несколько секунд после проверки подписки появится ссылка на продолжение загрузки работы.

РЕФ-Мастер - уникальная программа для самостоятельного написания рефератов, курсовых, контрольных и дипломных работ. При помощи РЕФ-Мастера можно легко и быстро сделать оригинальный реферат, контрольную или курсовую на базе готовой работы - Создание компьютерной графики при помощи OpenGL.

3. Напишите программу вывода графика функции x =2* sin ( z )* cos ( y )-3* tg ( y ) используя алгоритм плавающего горизонта. Модифицируйте программу таким образом, чтобы поверхност ь состояла из четырехугольников

#include <windows.h>

Видео

Другие статьи, обзоры программ, новости

Opengl glTranslated, glTranslatef

glTranslated, glTranslatef

void glTranslatef(

GLfloat x,

GLfloat y,

Parameters

Specify the x, y, and z coordinates of a translation vector.

The glTranslate function moves the coordinate system origin to the point specified by (x,y,z). The translation vector is used to compute a 4x4 translation matrix:

The current matrix (see glMatrixMode) is multiplied by this translation matrix, with the product replacing the current matrix. That is, if M is the current matrix and T is the translation matrix, then M is replaced with M·T.

If the matrix mode is either GL_MODELVIEW or GL_PROJECTION, all objects drawn after glTranslate is called are translated. Use glPushMatrix and glPopMatrix to save and restore the untranslated coordinate system.

The following functions retrieve information related to the glTranslated and glTranslatef functions:

glGet with argument GL_MATRIX_MODE

glGet with argument GL_MODELVIEW_MATRIX

glGet with argument GL_PROJECTION_MATRIX

glGet with argument GL_TEXTURE_MATRIX

GL_INVALID_OPERATION is generated if glTranslate is called between a call to glBegin and the corresponding call to glEnd

glMatrixMode, glMultMatrix, glPushMatrix, glRotate, glScale

Применение аффинных преобразований к сдвигу, повороту, переносу, отражению, и проектирования, 2x- и 3x-мерного изображения

Применение аффинных преобразований к сдвигу, повороту, переносу, отражению, и проектирования, 2x- и 3x-мерного изображения

Лабораторная работа № 3

          Тема:   Применение аффинных преобразований к сдвигу, повороту, переносу, отражению, и проектирования, 2 x - и 3 x -мерного изображения.

Цель: изучить основные приёмы работы с изображением в аффинной системе координат.

Теоретические сведения

Аффинным называется такое изображения плоскости (пространства) в другой плоскости (пространстве), при котором каждая прямая отображается в прямую. Библиотека  OpenGL содержит в себе функции и процедуры, для работы с аффинными преобразованиями.

glTranslated (dx, dy, dz: Тип_переменных ) – процедура переноса системы координат.

    Синтаксис dx , dy , dz”: обозначения осей координат.

    Синтаксис Тип_переменных : обозначения типа координат (double, float, shortint, integer).

glRotated (Angle, x, y, z: Тип_переменных ) – процедура разворота системы координат.

    Синтаксис x , y , z”: обозначения радиус-вектора.

    Синтаксис Angle: обозначения  поворота.

glScaled (kx, ky, kz: Тип_переменных ) – процедура масштабирования.

    Синтаксис kx , ky , kz”: обозначения коэффициента масштабирования.

Вывести на экран изображение стрелки и проверить работу процедуру OpenGL.

С применением OpenGL написать процедуру для вывода окружности с центром в начале координат и радиусом 1.

Путём преобразований координат и вызова написанной процедуры вывести на экран несколько окружностей в разных позициях и с разным радиусом.

Компьютерная графика

Компьютерная графика

Основы проектирования 3D моделей реального мира в программном продукте Dev C++. Выбор и обоснование языка программирования. Реализация построения интерактивной модели. Минимальные требования к технической базе. Алгоритм визуализации спортивного зала.

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже. Подобные документы

Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.

дипломная работа [3,6 M], добавлен 16.11.2011

Разработка компьютерной игры, выбор структур, используемых данных, технологии, языка и среды программирования. Алгоритм и программа для реализации игры, функциональные возможности и сопровождение разрабатываемой системы. Выбор стратегии тестирования.

курсовая работа [341,9 K], добавлен 19.04.2011

Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).

курсовая работа [55,1 K], добавлен 21.11.2012

Построение систем визуализации моделей раскроя и их модификации. Анализ способов и методов создания универсального хранилища данных, на примере построения динамически формируемого информационного файла. Графические возможностей языка высокого уровня С.

научная работа [355,5 K], добавлен 06.03.2009

Современные алгоритмы машинной графики. Алгоритмы построения изображения. Глобальная модель освещения Уиттеда. Выбор и обоснование языка и среды программирования. Вспомогательные классы свойств трехмерных объектов. Условия применения программы.

курсовая работа [785,7 K], добавлен 24.06.2009

Минимальные технические требования для работы с программным продуктом. Требования к условиям выполнения работ по проектированию. Выбор среды и языка программирования. Требования к функционированию. Инфологическая модель структуры хранения данных.

дипломная работа [3,3 M], добавлен 21.11.2011

Требования к техническим, программным средствам разработки и функционированию программы. Обоснование выбранного языка программирования. Описание алгоритма решения задачи, тестирование ее основных функций. Понятие дружелюбного пользовательского интерфейса.

курсовая работа [85,9 K], добавлен 31.10.2014

Разработка корпоративной и сети масштаба города (Metro Area Network, MAN) в программном продукте OpNet IT Guru Academic Edition v.9.1 и анализ полученных результатов. Определение профиля трафика, настройка оборудования, выбор типа собираемой статистики.

лабораторная работа [2,9 M], добавлен 04.02.2013

Программа по созданию стрелочных часов. Минимальные требования к составу и параметрам технических средств программы. Выбор и обоснование системы программирования Microsoft Visual Studio. Общее описание алгоритма. Руководство пользователя и программиста.

контрольная работа [1017,1 K], добавлен 11.12.2012

Векторная компьютерная графика. Графические примитивы. Графические возможности языка программирования Pascal. Методические рекомендации к изучению графики в языке программирования Pascal. Построение графиков функций.

курсовая работа [28,3 K], добавлен 13.06.2007

Размещено на http://www.allbest.ru/

Компьютерная графика - это область информатики, занимающаяся проблемами получения различных изображений (рисунков, чертежей, мультипликации) на компьютере. Работа с компьютерной графикой - одно из самых популярных направлений использования персонального компьютера, причем занимаются этой работой не только профессиональные художники и дизайнеры. Существуют несколько основных видов графики - двумерная, которая включает в себя фрактальную, растровую и векторную графику, и трехмерная, которая пользуется в настоящее время гораздо большей популярностью из-за возможности создавать более реалистичные и оригинальные объекты. Трёхмерная графика (3D, 3 Dimensions, русск. 3 измерения) -- раздел компьютерной графики, совокупность приемов и инструментов (как программных, так и аппаратных), предназначенных для изображения объёмных объектов. Больше всего применяется для создания изображений на плоскости экрана или листа печатной продукции в архитектурной визуализации, кинематографе, телевидении, компьютерных играх, печатной продукции, а также в науке и промышленности.

Трёхмерное изображение на плоскости отличается от двумерного тем, что включает построение геометрической проекции трёхмерной модели сцены на плоскость (например, экран компьютера) с помощью специализированных программ.

Для получения трёхмерного изображения на плоскости требуются следующие шаги: - моделирование -- создание трёхмерной математической модели сцены и объектов в ней. - рендеринг (визуализация) -- построение проекции в соответствии с выбранной физической моделью.

- вывод полученного изображения на устройство вывода - дисплей или принтер.

1. ОПИСАНИЕ ОБЪЕКТА МОДЕЛИРОВАНИЯ

Шахматы -- настольная логическая игра специальными фигурами на 64-клеточной доске для двух соперников, сочетающая в себе элементы искусства (в части шахматной композиции), науки и спорта. Название берёт начало из персидского языка: шах и мат, что значит властитель (шах) умер. История шахмат насчитывает не менее полутора тысяч лет. Считается, что игра-прародитель, чатуранга, появилась в Индии не позже VI века нашей эры. По мере распространения игры на Арабский Восток, затем в Европу и Африку, правила менялись. В том виде, который игра имеет в настоящее время, она сформировалась к XV веку, окончательно правила были стандартизованы в XIX веке, когда стали систематически проводиться международные турниры.

Виды шахматных фигур и их назначение:

- Король (Юникод: ??) -- главная шахматная фигура, хотя и не сильнейшая. Цель шахматной партии -- объявить мат королю соперника.

- Ферзь(перс. ferzin -- визирь, советник; Юникод: ??) -- самая сильная шахматная фигура. Считается, что материальная ценность ферзя равна 8-9 пешкам. Таким образом он по силе превосходит ладью и лёгкую фигуру, уступает двум ладьям и примерно равен трём лёгким фигурам.

- Ладья (Юникод ??) -- шахматная фигура. Она примерно равноценна 5 пешкам. Ладья может двигаться на любое число полей по горизонтали или по вертикали при условии, что на её пути нет фигур. Ладьи в начале партии занимают поля a1 и h1 (белые ладьи), a8 и h8 (чёрные ладьи).

- Слон (иногда встречается название «офицер»)(Юникод ??) -- шахматная фигура. Слон примерно эквивалентен коню. Ближе к эндшпилю, если пешки на обеих сторонах доски, слон становится сильнее коня, но конь немного сильнее если пешки только на одной стороне.

- Конь (Юникод ??) -- шахматная фигура, в начале партии располагающаяся на полях b1, g1 (белые кони) и b8, g8 (чёрные кони). По цене конь примерно равен слону или трём пешкам. Три коня примерно равны ферзю или двум ладьям. Ценность коня возрастает в закрытых позициях, где дальнобойность других фигур (ферзя, ладей и слонов) ограничена.

- Пешка (Юникод: ??) -- основная единица измерения шахматного материала (в шахматах её не принято называть фигурой). В пешечном эквиваленте измеряют «вес» и других фигур (лёгкая фигура примерно эквивалентна трем пешкам, ладья -- пяти). По Ф. Филидору пешка -- «душа шахматной партии», структура пешечного расположения определяет стратегический рисунок партии. В эндшпиле роль пешек значительно возрастает, особенно далеко продвинутых (близких к полю превращения). Буквенное обозначение -- п. (В шахматной нотации обычно используется только при записи положения фигур на диаграмме, а в процессе партии опускается

Внешний вид спортивных снарядов приведён на рисунке 1.

Рисунок 1: 1-Король 2-Ферзь 3-Слон 4-Конь 5-Ладья 6-Пешка

2. МАТЕМАТИЧЕСКОЕ И АЛГОРИТМИЧЕСКОЕ ОБЕСПЕЧЕНИЕ

2.1 Математическая модель

Трёхмерная графика оперирует с объектами в трёхмерном пространстве. Обычно результаты представляют собой плоскую картинку, проекцию. Трёхмерная компьютерная графика широко используется в кино, компьютерных играх.

В трёхмерной компьютерной графике все объекты обычно представляются как набор поверхностей или частиц. Минимальную поверхность называют полигоном. В качестве полигона обычно выбирают треугольники.

Всеми визуальными преобразованиями в 3D-графике управляют матрицы (см. также: аффинное преобразование в линейной алгебре). В компьютерной графике используется три вида матриц:

· матрица поворота

· матрица сдвига

· матрица масштабирования

Любой полигон можно представить в виде набора из координат его вершин. Так, у треугольника будет 3 вершины. Координаты каждой вершины представляют собой вектор (x, y, z). Умножив вектор на соответствующую матрицу, мы получим новый вектор. Сделав такое преобразование со всеми вершинами полигона, получим новый полигон, а преобразовав все полигоны, получим новый объект, повёрнутый/сдвинутый/масштабированный относительно исходного.

В разрабатываемой программе будем использовать ПГМ, написанную на языке Dev С++ .

Все математические действия производимые в программе будут происходить с помощью перемножения матриц смещения, масштабирования и вращения.

Смещение точки-вектора на заданную величину реализуется посредством умножения ее координатной модели на матрицу вида:

где m - смещение координат точек относительно оси х,

n - смещение координат точек относительно оси у,

l - смещение координат точек относительно оси z.

Поворот точки-вектора на заданную величину, относительно определенной оси реализуется посредством умножения ее координатной модели на матрицу вида:

Матрицами вращения вокруг оси декартовой правой системы координат на угол ? в трёхмерном пространстве являются:

· Вращение вокруг оси x:

· Вращение вокруг оси y:

· Вращение вокруг оси z:

В программе будут использоваться матрицы поворота вокруг осей, а так же матрицы смещения. Первоначально на необходимо сделать чтобы модель плавно двигалась вокруг своей оси. Для этого возьмём матрицу вращения вокруг оси y:

Где ? - это постепенно изменяющийся угол;

Для того чтобы изображение можно было передвигать, добавим матрицу смещения:

Где Kx, Ky, Kz - соответствующее приращение к начальным значениям x,y,z для перемещения изображения на это расстояние.

Для визуализации ордена потребуется проводить для каждой точки в трёхмерной системе координат поворот и масштабирование в пространстве. Потребуется провести такие преобразования: a*A, a*B, a*C, a*D, где - а - точка-вектор, над которым требуется произвести действия, а A,B,C,D - матрицы поворотов и масштабирования.

Смещение точки-вектора на заданную величину реализуется посредством умножения ее координатной модели на матрицу вида:

где m - смещение координат точек относительно оси х,

n - смещение координат точек относительно оси у,

l - смещение координат точек относительно оси z.

Матрицы поворота вокруг осей x, y, z на угол a

GlTranslated function (Windows)

Parameters

The z coordinate of a translation vector.

Return value

This function does not return a value.

The glTranslated function produces the translation specified by (x. y. z ). The translation vector is used to compute a 4x4 translation matrix:

The current matrix (see glMatrixMode ) is multiplied by this translation matrix, with the product replacing the current matrix. That is, if M is the current matrix and T is the translation matrix, then M is replaced with M•T.

If the matrix mode is either GL_MODELVIEW or GL_PROJECTION, all objects drawn after glTranslated is called are translated. Use glPushMatrix and glPopMatrix to save and restore the untranslated coordinate system.

The following functions retrieve information related to glTranslated :

glGet with argument GL_MATRIX_MODE

glGet with argument GL_MODELVIEW_MATRIX

glGet with argument GL_PROJECTION_MATRIX

glGet with argument GL_TEXTURE_MATRIX

Графическая библиотека opengl

Графическая библиотека opengl

Лабораторная работа № 2.

1. Введение

OpenGL – Open Graphics Library, открытая графическая библиотека. Термин "открытый" – означает независимый от производителей. Имеется спецификация (стандарт) на OpenGL, где все четко задокументировано и описано. Библиотеку OpenGL может производить кто угодно. Главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Как следствие, в библиотеке нет никаких темных мест, секретов, недокументированных возможностей и т. п, те кто программировал под MS Windows или MS DOS понимают о чем я говорю. Библиотеку выпускают такие корпорации, как Microsoft, Silicon Graphics, а также просто группы программистов. Одним из таких примеров служит реализация Mesa. Эту библиотеку написали целый ряд программистов, главным автором является Brian Paul. Библиотека Mesa распространяется в исходных текстах на языке Си и собирается почти для любой операционной системы. Стандарт OpenGL развивается с 1992 года. Он разрабатывается фирмой Silicon Graphics. С тех пор библиотека завоевала огромную популярность и была интегрирована с множеством языков и систем разработки приложений. Вы можете писать программу с использованием OpenGL на Си, С++, Pascal, Java и многих других языках. Основное предназначение OpenGL программирование трехмерной графики.

Библиотека OpenGL представляет собой интерфейс программирования трехмерной графики. Единицей информации является вершина, из них состоят более сложные объекты. Программист создает вершины, указывает, как их соединять (линиями или многоугольниками), устанавливает координаты и параметры камеры и ламп, а библиотека OpenGL берет на себя работу создания изображения на экране. OpenGL идеально подходит для программистов, которым необходимо создать небольшую трехмерную сцену и не задумываться о деталях реализации алгоритмов трехмерной графики. Для профессионалов, занимающихся программированием трехмерной графики, библиотека тоже будет полезной, т. к. она представляет основные механизмы и выполняет определенную автоматизацию. Используя OpenGL можно с легкостью создать трехмерные поверхности, наложить на них текстуры, осветить источниками света, сделать эффект тумана, прозрачности, смешивания цветов, а также наложить трафарет, передвигать объекты сцены, лампы и камеры по заданным траекториям, сделав тем самым анимацию. OpenGL непосредственно не поддерживает работу с устройствами ввода, такими как мышь или клавиатура, т. к. эта библиотека является платформенно независимой. Но можно задействовать функции конкретной операционной системы, под которую вы пишите свою программу или воспользоваться надстройками над OpenGL, такими как библиотеки GLUT или GLAUX.

2. Первая программа

Самым простым объектом, с помощью которого можно увидеть всю мощь OpenGL, является сфера. Можно попытаться ее изобразить. Для этого надо создать новый проект в VisualC++, выполнив следующие действия:

- запустить Visual C++;

- выполнить команду File | New…;

- в открывшемся диалоговом окне выбрать тип проекта Win32 Application, в поле Project Name указать имя проекта, а в поле Location – папку в которой будет находиться проект;

- нажать кнопку OK. Затем, ничего не изменяя, – кнопку Finish и еще раз OK;

- скопировать в папку проекта два файла Sample. cpp и Sample. h (выдаются преподавателем);

- подключить эти два файла к проекту выполнив команду Project | Add To Project | Files…;

- далее выполнить команду Project->Settings, выбрать закладку Link и добавить в поле Object/library modules следующие lib-файлы: opengl32.lib, glu32.lib и glaux. lib;

- вставьте в функцию Display следующий код:

GlColor3d(1,0,0);

AuxSolidSphere(1);

- создать exe-модуль (F7).

Поясним назначение вставленных двух функций. Функция glColor3d устанавливает текущий цвет, которым будут рисоваться фигуры. Тут нужно пояснить, как устанавливается цвет и общую философию в названии функций OpenGL. Цвет устанавливается четырьмя параметрами: красный, синий, зеленый и прозрачность. Эти параметры варьируются в диапазоне от нуля до единицы. Четвертый параметр нам пока не нужен, поэтому мы вызвали glColor с тремя параметрами. В этом случае, значение четвертого параметра, прозрачности, по умолчанию считается равным единице, т. е. абсолютно непрозрачным, ноль – будет абсолютно прозрачным. Применяется следующий синтаксис вызова функций – FuncionName[n=число параметров][тип параметров].

Доступны следующие типы:

B – GLbyte байт;

S – GLshort короткое целое;

I – GLint целое;

F – GLfloat дробное;

D – GLdouble дробное с двойной точностью;

Ub – GLubyte беззнаковый байт;

Us – GLushort беззнаковое короткое целое;

Ui – GLuint беззнаковое целое;

V – массив из n параметров указанного типа;

В нашем случае – glColor3d – означает, что в функцию передается три параметра типа GLdouble. Также можно было вызвать glColor3i, т. е. три параметра типа GLint. Если тип параметров короткое целое, целое, байт или длинное, то компонента цвета приводится к диапазону [0,1]. Приведение к этому диапазону осуществляется по следующим правилам. В случае беззнакового типа возможное наибольшее значение приводится к единице, ноль к нулю. В случае знакового максимальное значение приводится к единице или к минус единице, а минус единица будет приведена к единице. На практике обычно пользуются одним из трех случаев, рассмотренных в качестве примера ниже. Например, для беззнакового байта приведение будет осуществлено по следующей формуле: значение_переменной_хранимой_в_байте/255, т. к. 255 максимальное число, хранимое в одном байте. Функция glColor3dv означает, что в качестве параметров передается массив из трех элементов типа GLdouble. Например:

Double array[] = <0.5, 0.75, 0.3>;

GlColor3dv(array);

GlColor3ub(200,100,0); // приводится к

// 200/256, 100/256, 0,256

GlColor3d(0.25,0.25,0); // темно-желтый

GlColot3ub(0,100,0); // темно-зеленый

GlColor3ub(0,0,255); // синий

3. Простые объекты. Общие положения

Точки, линии, треугольники, четырехугольники, многоугольники –простые объекты, из которых состоят любые сложные фигуры. OpenGL непосредственно не поддерживает функций для создания таких сложных объектов как сфера, цилиндр тор и др. т. е. таких функций нет в opengl32.dll. Эти функции есть в библиотеки утилит glu32.dll, и устроены они следующим образом. Для того чтобы нарисовать сферу функция auxSolidSphere использует функции из библиотеки glu32.dll, а те в свою очередь, используют базовую библиотеку opengl32.dll и из линий или многоугольников строят сферу. Примитивы создаются следующим образом:

glVertex[2 3 4][s i f d](…); // первая вершина

… // тут остальные вершины

glVertex[2 3 4][s i f d](…); // последняя

GlEnd(); // закончили рисовать примитив

Сначала необходимо указать начало рисования – glBegin с соответствующим параметром.

Возможные значения mode перечислены ниже в таблице. Далее указываются вершины, определяющие объекты указанного типа. Обычно вершину задают одним из четырех способов.

Указывает на конец рисования объектов типа, указанного в glBegin. Далее подробно разберем создание всех примитивов.

Компьютерная визуализация

Порт вывода и система координат Установка порта вывода

Графический вывод обычно осущестсвляется в некоторую прямоугольную область экрана или окна. В OpenGL-визуализации эта область называется порт вывода. Именно в этой прямоугольной области будет размещено библиотекой сформированное изображение. Его размеры определяются относительно левого верхнего угла окна и измеряются в пикселах. Для определения порта вывода приложение должно отследить событие изменения размеров окна и определить порт вывода с использованием функции:

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);

Аргументы (x, y) определяют положение верхнего левого угла порта вывола, а width и height -- его размеры. По умолчанию библиотека растягивает порт вывода на всё OpenGL-окно.

Координатная система

Прежде чем быть отображённой на экране вершина, заданная в системе координат сцены должна пройти процесс проецирования. Для описания и проведения преобразований систем координат в библиотеке OpenGL используется матричный аппарат. Сама система координат и ее преобразования описываются матрицами в так называемых однородных координатах.

Во-первых, вершина преобразуется в матрицу 1X4, в которой первые три элемента представляют собой координаты x, y, z. Четвёртое число - масштабный коэффициент w, который обычно равен 1.0. Вершина домножается на видовую матрицу, которая описывает преобразования видовой системы координат. Получаем вершину в координатах вида. Она в свою очередь домножается на матрицу проекций и получаем вершину в координатах проекции. На этом этапе некоторве вершины отбрасываются (из-за непопадания в объём визуализации). Затем вершины нормализуются для передачи перспективы (если координата w не равна 1.0). Окончательное проецирование вершины на двумерную поверхность экрана выполняется библиотекой OpenGL самостоятельно и вмешаться в этот процесс нельзя.

Матрица проекций

Матрица проекций отвечает за то, какой объём пространства будет визуализироваться, каким образом вершины графических примитивов будут спроецированы на двумерную поверхность экрана монитора. Преобразования матрицы проекций ведут к тому, что все изображение будет изменяться (масштабироваться, перемещаться или вращаться). В OpenGL возможно использование двух режимов матрицы проекций: перспективная и ортографическая.

При перспективной проекции используется тот факт, что для человеческий глаз работает с предметом дальнего типа, размеры которого имеют угловые размеры. Чем дальше объект, тем меньше он нам кажется. Таким образом, объём пространства, который визуализируется представляет собой пирамиду.

Матрица преспективной проекции определяется с использованием функции:

void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

(left, bottom, -near) и (right, top, -near) определяют координаты ближней отсекающей рамки; near и far имеют всегда положительные значения и определяют расстояние от точки зрения до ближней и дальней отсекающих рамок.

Для задания матрицы перспективной проекции также можно использовать функцию gluPerspective(), которая имеет другие аргументы

void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far);

Аргумент fovy (field of view) определяет поле зрения, а aspect -- отношение ширины отсекающей рамки к высоте. near и far имеют всегда положительные значения и определяют расстояние от точки зрения до ближней и дальней отсекающих рамок.

Перспективное проецирование обычно используется в играх и приложениях, где требуется добиться высокой реалистичности объектов, подожей на визуализацию глазом. Для двумерной и трехмерной визуализации научных и технических данных обычно используется ортографическая проекция. Рассмотрим установку ортографической проекции сначала для двумерной визуализации. При ортографической проекции объём пространства, который визуализируется представляет собой параллелепипед:

Особенностями ортографической проекции является то, что расстояние от камеры до объектов не влияет на итоговое изображение.

Для установки и последующего изменения матрицы проекций следует выполнить функцию glMatrixMode(GL_PROJECTION). Для начала также следует отменить все предыдущие установки и преобразования, сделав матрицу проекций единичной с помошью функции glLoadIdentity(). Матрица ортографической проекции устанавливается с использованием функции, которая имеет следующий прототип:

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

(left, bottom, -near) и (right, top, -near) -- точки, определяющие ближнюю отсекающую рамку. (left, bottom, -far) и (right, top, -far) -- точки, определяющие дальнюю отсекающую рамку. После применения этой команды направление проецирования параллельно оси z в сторону отрицательных значений

//Функция изменения размеров и установки координат

void Reshape(int width, int height)

//Установка порта вывода

glViewport(0, 0, width, height);

//Режим матрицы проекций

glMatrixMode(GL_PROJECTION);

//Единичная матрица

glLoadIdentity();

//Установка двумерной ортографической системы координат

glOrtho(-50. 50. -50. 50. -1. 1.);

//Режим видовой матрицы

glMatrixMode(GL_MODELVIEW);

Специально для двумерной визуализации можно использовать функцию, которая имеет следующий прототип:

void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);

Эта функция аналогична glOrtho(), при вызове которой аргумент near=-1.0, а far=1.0. В процессе двумерной визуализации z-координата у вершин имеет значение 0, то есть объекты находятся на средней плоскости.

При необходимости сохранения пропорций установку системы координат необходимо осуществлять с учетом отношения ширины и высоты окна.

//Установка ортографической системы координат

double aspect=width/double(height);

if(width>=height)

gluOrtho2D(-50.*aspect, 50.*aspect, -50. 50.);

gluOrtho2D(-50. 50. -50./aspect, 50./aspect);

Видовая матрица

Видовая матрица отвечает за систему координат создаваемой трехмерной модели. В процессе создания модели видовая матрица может многократно изменяться для того, чтобы видоизменить изображение отдельных графических примитивов (превратить квадрат в прямоугольник, куб в параллелепипед, сферу в эллипсоид). Для установки и последующего изменения видовой матрицы следует выполнить функцию glMatrixMode(GL_MODELVIEW). Для начала также следует отменить все предыдущие установки и преобразования, сделав матрицу проекций единичной с помошью функции glLoadIdentity(). Если координаты вершин объекта задаются при его создании, то дополнительные преобразования системы координат не требуются. Однако часто это сложно или просто невозможно.

Кубик рубик на OpenGl

Кубик рубик на OpenGl

Задача: Построить 3D модель кубика-рубика используя графическую библиотеку OpenGL.

Кубик рубик размера 3*3*3 состоит из 27 мелких кубиков.

Будет удобно создать класс мелкого кубика (Small_Cube).

В нём будет хранится цвета шести граней и размер.

1) нарисовать (draw);

2) повернуть на угол 90 градусов вдоль координатной оси (rotateX, rotateY, rotateZ);

3) установить цвет грани с конкретным номером от 0 до 5 (setColor).

Следующий класс - класс самого кубика-рубика (Cube).

В нём хранится размер, 6 цветов, массив 3*3*3 объектов Small_Cube, углы поворота каждой грани.

1) Повернуть грань с конкретным номером на угол 90 градусов. Для этого просто будем менять местами элементы 3-х мерного массива, и при этом поварачивать сами части тоже на 90 градусов.

2) Повернуть грань с конкретным номером на угол A градусов (A < 90). Для каждой грани будем хранить угол, на который она сейчас повёрнута. Если он становится кратным 90, то вызываем метод под пунктом 1.

3) Нарисовать. Рисуем грань которая повёрнута на угол не кратный 90, затем все остальные.

Клавиши в промежутке ['0', '5'] - команды поворота грани.

Правая кнопка мыши - смена режима (автоматическая прокрутка и управление вручную).

Клавиши вверх, вниз, влево, вправо - вращение.

Home, End - приближение/отдаление