Разработка приложения с использованием OpenGL для динамического изображения трехмерной модели объекта "Часовой механизм"

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Министерство образования и науки Российской Федерации Государственное образовательное учреждение Высшего профессионального образования «Северокавказский государственный университет» Кафедра информационных систем и технологий

Пояснительная записка к курсовой работе

на тему: «Разработка приложения с использованием OpenGL для динамического изображения трехмерной модели объекта „Часовой механизм“»

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

Выполнил: И.А. Семенов

Ставрополь, 2011

Содержание

opengl приложение программирование интерфейс

Введение

1. Программирование с использованием библиотеки OpenGL

1.1 Функции для рисования геометрических объектов

1.2 Модель освещения

1.3 Спецификация материалов

1.4 Описание источников света

1.5 Эффект тумана

2. Разработка приложения для построения динамического изображения трехмерной модели объекта «Часовой механизм»

2.1 Разработка процедуры визуализации трехмерной сцены

2.2 Разработка интерфейса пользователя

2.3 Разработка подсистемы управлениями событиями

3. Информационное и программное обеспечение

3.1 Общие сведения о программе

3.2 Функциональное назначение

3.3 Логическая структура и функциональная декомпозиция проекта

3.4 Требования к техническому программному обеспечению

3.5 Руководство пользователя

Заключение и выводы

Список литературы

Приложение А. Код приложения

Приложение Б. Диаграмма классов

Приложение В. Блок схема

Приложение Г. Экранные формы

Введение

OpenGL является одним из самых популярных прикладных программных интерфейсов (API — Application Programming Interface) для разработки приложений в области двумерной и трехмерной графики.

Стандарт OpenGL (Open Graphics Library — открытая графическая библиотека) был разработан и утвержден в 1992 году ведущими фирмами в области разработки программного обеспечения как эффективный аппаратно-независимый интерфейс, пригодный для реализации на различных платформах.

Характерными особенностями OpenGL, которые обеспечили распространение и развитие этого графического стандарта, являются:

— Стабильность. Дополнения и изменения в стандарте реализуются таким образом, чтобы сохранить совместимость с разработанным ранее программным обеспечением.

— Надежность и переносимость. Приложения, использующие OpenGL, гарантируют одинаковый визуальный результат вне зависимости от типа используемой операционной системы и организации отображения информации. Кроме того, эти приложения могут выполняться как на персональных компьютерах, так и на рабочих станциях и суперкомпьютерах.

— Легкость применения. Стандарт OpenGL имеет продуманную структуру и интуитивно понятный интерфейс, что позволяет с меньшими затратами создавать эффективные приложения, содержащие меньше строк кода, чем с использованием других графических библиотек. Необходимые функции для обеспечения совместимости с различным оборудованием реализованы на уровне библиотеки и значительно упрощают разработку приложений.

Описать возможности OpenGL можно через функции его библиотеки. Все функции можно разделить на пять категорий:

— Функции описания примитивов определяют объекты нижнего уровня иерархии (примитивы), которые способна отображать графическая подсистема. В OpenGL в качестве примитивов выступают точки, линии, многоугольники и т. д. ;

— Функции описания источников света служат для описания положения и параметров источников света, расположенных в трехмерной сцене;

— Функции задания атрибутов. С помощью задания атрибутов программист определяет, как будут выглядеть на экране отображаемые объекты. Другими словами, если с помощью примитивов определяется, что появится на экране, то атрибуты определяют способ вывода на экран. В качестве атрибутов OpenGL позволяет задавать цвет, характеристики материала, текстуры, параметры освещения;

— Функции визуализации позволяет задать положение наблюдателя в виртуальном пространстве, параметры объектива камеры. Зная эти параметры, система сможет не только правильно построить изображение, но и отсечь объекты, оказавшиеся вне поля зрения;

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

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

1. Программирование с использованием библиотеки OpenGL

1.1 Функции для рисования геометрических объектов

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

С каждой вершиной ассоциируются ее атрибуты. В число основных атрибутов входят положение вершины в пространстве, цвет вершины и вектор нормали. Положение вершины определяются заданием ее координат в двух, трех, или четырехмерном пространстве (однородные координаты). Это реализуется с помощью нескольких вариантов команды glVertex*:

— void glVertex[2 3 4][s i f d] (type coords);

— void glVertex[2 3 4][s i f d]v (type *coords).

Каждая команда задает четыре координаты вершины: х, у, z, w. Команда glVertex2* получает значения х и у. Координата z в таком случае устанавливается по умолчанию равной 0, координата w — равной 1. Vertex3* получает координаты х, у, z и заносит в координату w значение 1. Vertex4* позволяет задать все четыре координаты. Для ассоциации с вершинами цветов, нормалей и текстурных координат используются текущие значения соответствующих данных, что отвечает организации OpenGL как конечного автомата. Эти значения могут быть изменены в любой момент с помощью вызова соответствующих команд.

Для задания текущего цвета вершины используются команды:

— void glColor[3 4] [b s i f] (GLtype components);

— void glColor[3 4] [b s i f]v (GLtype components).

Первые три параметра задают R, G, В компоненты цвета, а последний параметр определяет коэффициент непрозрачности (так называемая альфа компонента). Если в названии команды указан тип 'Г (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение альф компоненты устанавливается равным 1. 05 что соответствует полной непрозрачности. Тип 4ub' (unsigned byte) подразумевает, что значения должны лежать в отрезке [0,255].

Вершинам можно назначать различные цвета, и, если включен соответствующий режим, то будет проводиться линейная интерполяция цветов по поверхности примитива. Для управления режимом интерполяции используется команда void glShadeModel (GLenum mode) вызов которой с параметром GL_SMOOTH включает интерполяцию (установка по умолчанию), ас GLFLAT — отключает.

Любые вершины надо объединить в одно целое, определив необходимые свойства. Для этого в OpenGL используются так называемые операторные скобки, являющиеся, вызовами специальных команд OpenGL Определение примитива или последовательности примитивов происходит между вызовами команд void glBegin (GLenum mode); void glEnd (void); Параметр mode определяет тип примитива, который задается внутри и может принимать следующие значения: GLPOINTS, GLLINES, GLLINESTRIP, GLLINELOOP, GLTRIANGLES, GLPOLYGON, GLTR1ANGLESTR1P, GL_QUAD_STRIP, GLTRIANGLEFAN, GL_QUADS.

Кроме примитивов в библиотеках GLU и GLUT описаны более сложные фигуры, такие как сфера, цилиндр, диск (в GLU) и сфера, куб, конус, тор, тетраэдр, додекаэдр, икосаэдр, октаэдр pi чайник.

1.2 Модель освещения

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

— 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_LIGHT_MODEL_TWO_SIDE параметр param должен быть булевым и управляет режимом расчета освещенности, как для лицевых, так и для обратных граней. Значение по умолчанию: GL_FALSE;

— GL_LIGHT_MODEL_AMBIENT параметр params должен содержать четыре целых или вещественных числа, которые определяют цвет фонового освещения даже в случае отсутствия определенных источников света. Значение по умолчанию: (0. 2, 0. 2, 0. 2,1. 0).

1.3 Спецификация материалов

Для задания параметров текущего материала используются команды:

— void glMaterial[i f] (GLenum face, GLenum pname, GLtype param);

— void glMaterial[i f]v (GLenum face, GLenum pname, GLtype *params).

С их помощью можно определить рассеянный, диффузный и зеркальный цвета материала, а также степень зеркального отражения и интенсивность излучения света, если объект должен светиться. Какой именно параметр будет определяться значением param, зависит от значения pname:

— GL_AMBIENT параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют рассеянный цвет материала (цвет материала в тени). Значение по умолчанию: (0. 2, 0. 2, 0. 2, 1. 0);

— GL_DIFFUSE параметр params должен содержать четыре целых или вещественных значения цветов RGB А, которые определяют диффузный цвет материала. Значение по умолчанию: (0. 8, 0. 85 0. 8, 1. 0);

— GL_SPECULAR параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют зеркальный цвет материала. Значение по умолчанию: (0. 0, 0. 0, 0. 0, 1. 0).

— GL_SHININESS параметр params должен содержать одно целое или вещественное значение в диапазоне от 0 до 128, которое определяет степень зеркального отражения материала. Значение по умолчанию 0;

— GL_EMISSION параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют интенсивность излучаемого света материала. Значение по умолчанию: (0. 0, 0. 0, 0. 0, 1. 0);

— GL_AMBIENT_AND_DIFFUSE эквивалентно двум вызовам команды glMaterial*() со значением pname GL_AMBIENT и GL_DIFFUSE и одинаковыми значениями params.

Из этого следует, что вызов команды glMaterial[i f]() возможен только для установки степени зеркального отражения материала (shininess). Команда glMaterial[i f]v () используется для задания остальных параметров.

Параметр face определяет тип граней, для которых задается этот материал и может принимать значения GL_FRONT, GLBACK или GLFRONTANDBACK.

1.4 Описание источников света

Определение свойств материала объекта имеет смысл, только если в сцене есть источники света. Иначе все объекты будут черными. Добавить в сцену источник света можно с помощью команд:

— void glLight[i f] (GLenum light, GLenum pname, GLfloat param);

— void glLight[i f] (GLenum light, GLenum pname, GLfloat * params).

Параметр light однозначно определяет источник света. Он выбирается из набора специальных символических имен вида GL_LIGHTi, где i должно лежать в диапазоне от 0 до константы GL_MAXLIGHT, которая обычно не превосходит восьми.

Параметры pname и params имеют смысл, аналогичный команде glMaterial*(). Рассмотрим значения параметра pname:

— GL_SPOT_EXPONENT параметр param должен содержать целое или вещественное число от 0 до 128, задающее распределение интенсивности света. Значение по умолчанию: 0 (рассеянный свет);

— GL_SPOT_CUTOFF параметр param должен содержать целое иливещественное число между 0 и 90 или равное 180, которое определяет максимальный угол разброса света. Значение по умолчанию: 180;

— GL_AMBIENT параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет фонового освещения. Значение по умолчанию: (0. 0, 0. 0, 0. 0, 1. 0);

— GL_DIFFUSE параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет диффузного освещения. Значение по умолчанию: (1. 0, 1. 0, 1. 0, 1. 0) для GL_LIGHT0 и (0. 0, 0. 0, 0. 0, 1. 0) для остальных;

— GL_SPECULAR параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет зеркального отражения. Значение по умолчанию: (1. 0, 1. 0, 1. 0, 1. 0) для GLLIGHT0и (0. 0, 0. 0, 0. 0, 1. 0) для остальных;

— GL_POSITION параметр params должен содержать четыре целых или вещественных числа, которые определяют положение источника света. Значение по умолчанию: (0. 0, 0. 0, 1. 0, 0. 0);

— GL_SPOT_DIRECTION параметр params должен содержать четыре целых или вещественных числа, которые определяют направление света. Значение по умолчанию: (0. 0, 0. 0, -1. 0, 1. 0).

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

1.5 Эффект тумана

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

Туман в OpenGL реализуется путем изменения цвета объектов в сцене в зависимости от их глубины, т. е. расстояния до точки наблюдения. Изменение цвета происходит либо для вершин примитивов, либо для каждого пикселя на этапе растеризации в зависимости от реализации OpenGL. Для включения эффекта затуманивания необходимо вызвать команду glEnable (GL_FOG).

Метод вычисления интенсивности тумана в вершине можно определить с помощью команд:

— void glFog[if] (enum pname, T param);

— void glFog[if]v (enum pname, T params).

Аргумент pname может принимать следующие значения:

— GL_FOGMODE аргумент param определяет формулу, по которой будет вычисляться интенсивность тумана в точке. В этом случае param может принимать значения: GL_EXP, GL_EXP2, GL_LINEAR.

— GL_FOG_DENSITY param определяет коээфициент d;

— GL_FOG_START param определяет коэффициент s;

— GL_FOG_END param определяет коэффициент е.

Цвет тумана задается с помощью аргумента pname, равного GL_FOG_COLOR в этом случае params — указатель на массив из 4-х компонент цвета.

2. Разработка приложения для построения динамического изображения трехмерной модели объекта «Часовой механизм»

2.1 Разработка процедуры визуализации трехмерной сцены

Прорисовка в рабочей области начинается с метода void CTIMEView: :OnDraw (CDC* pDC), в котором вызывается функция usr_Bigen (). Она отвечает за прорисовку функциональных частей и за некоторые важные расчёты, которые связаны с расположением некоторых отдельных деталей. Так же в методе usr_Bigen () организован вызов функции usr_DrawBox (), которая организует рисование корпуса часов.

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

Далее рисуется 60 точек на циферблате. Они располагаются вдоль края диска, что придает вид минутной разметке. Следующим шагом является рисование стрелок. Стрелки в зависимости от их функционального назначения имеют свои параметры. Секундная стрелка более узкая и длинная, имеет красный цвет. Минутная стрелка также длинная, но более широкая и имеет синий цвет. Часовая стрелка коротка, широкая синего цвета. Сами стрелки реализуются в виде линий. Чтобы создавалась иллюзия работы часового механизма в передвижении стрелок, используются глобальные переменные, которые хранят в себе предыдущее положение стрелок и перед прорисовкой стрелок происходит перерасчёт, где должна находиться каждая из стрелок. Позже в виде параметров в функцию glRotatef поступают перерасчитанные переменные.

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

Далее рисуется часовая разметка на циферблате. Происходит расчёт необходимых параметров, задаётся цвет. Часовая разметка на циферблате представляет собой лини различной длинны, направленные к центру от края диска циферблата, и равномерно распределены по нему.

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

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

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

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

Изображение бриллианта в центре циферблата также имеет декоративный смысл. Он изображается с помощью готовой функции auxSolidIc6sahedron (0. 05), где 0,05 его размер.

Так же в сцене присутствуют локальные источники света, их два. Можно включать/выключать эффект тумана и задавать ему любые параметра цвета от 0 до 1 в формате RGB.

Наглядная последовательность применяемых функций в курсовом проекте представлена в «Приложении В». А результат работы программы в «Приложении Г»

2.2 Разработка интерфейса пользователя

Пользователь имеет широкий набор возможностей воздействовать на сцену:

— задавать угол вращения и точку в трехмерном пространстве, относительно которой будет происходить вращение;

— устанавливать время на часах;

— задавать цвет тумана;

— временно приостанавливать вращение, время и запускать его с точки приостановки;

— изменять масштаб модели;

— ускорять и корректировать угол вращения в динамическом режиме.

Для использования этих возможностей пользователь может использовать: меню и горячие клавиши.

Рассмотрим пункты меню. Пункт View содержим под пункты:

— Toolbar для отображения/скрытия панели инструментов;

— Status bar для отображения/скрытия строки состояния;

— Rotate вызывает диалоговое окно, в котором задаётся угол вращения и точка в трехмерном пространстве, относительно которой будет происходить вращение;

— Installation of time вызывает диалоговое окно, в котором устанавливается время на часах;

— Fog вызывает диалоговое окно, в котором задаётся цвет тумана.

Пункт Stop содержит под пункты:

— All_stop временно приостанавливает вращение и время;

— Time_stop временно приостанавливает только время;

— Rotate_stop временно приостанавливает только вращение.

Пункт Start содержим под пункты:

— Allstart запускает время и вращение с точки приостановки;

— Time_start запускает только время с точки приостановки;

— Rotate_start запускает только вращение с точки приостановки. Горячие клавиши расширяют функциональную возможность меню.

Рассмотрим функциональное назначение клавиш:

— Клавиша «Т» для увеличения масштаба объекта;

— Клавиша «> 1» для уменьшения масштаба объекта;

— Клавиша «+» для увеличения угла вращения;

— Клавиша «-» для уменьшения угла вращения;

— Клавиша «А» для уменьшения значения координаты относительно оси х;

— Клавиша «W» для увеличения значения координаты относительно оси у;

— Клавиша «Q» для увеличения значения координаты относительно оси;

— Клавиша «Е» для уменьшения значения координаты относительно оси z.

Программный код создания пользовательского интерфейса представлен в «Приложении А».

2.3 Разработка подсистемы управлениями событиями

Любое windows-положение основано на событиях и их обработке, другими словами поведение программы управляется событиями. Данный проект тоже является windows приложением, и, следовательно, обработка событий занимает важное место. Любая программа, основанная на MFC, берет на себя заботу об обработке события, программист должен лишь указать код, который нужно выполнить при возникновении конкретного события.

К основным событиям, играющим важную, для корректной работы разработанной программы относятся следующие:

— WM_KEYDOWN;

— ID_START_ALLSTART: COMMAND;

— 1D_START_ROTATESTART: COMMAND;

— ID_START_TIMEESTART: COMMAND;

— ID_STOP_ALLSTOP: COMMAND;

— ID_STOP_ROTATESTOP: COMMAND;

— ID_STOP_TIMEESTOP: COMMAND;

— ID_VIEW_FOG: COMMAND;

— ID_VIEWJNSTALLATIONOFTIME: COMMAND;

— ID_VIEW_ROTATE: COMMAND.

В обработчике события «WM_S1ZE» выполняется код, необходимый для изменения сцены относительно размеров окна, в обработчике события «WMDESTROY» освобождение занятых ресурсов. В обработчик «WMERASEBKGND» вставлен код для предотвращения мерцания. В обработчике «WM_TIMER» вызывается метод usr_Bigen (), который перерисовывает сцену заново. В обработчике «WM_KEYDOWN» выполняются действия с объектом, которые соответствуют нажатой кнопки. Остальные события служат для обработки событий выбор пунктов главного меню. Из описании приведенных выше хорошо видно, что для чего служит.

3. Информационное и программное обеспечение

3.1 Общие сведения о программе

Программа называется «Трехмерная модель часового механизма», версия 1.0. При её использовании, пользователь получает возможность работать с визуальной моделью часов. Вращать объект (модель) относительно трёх осей, изменять скорость вращения. Включать/выключать эффект тумана, выбирать цвет тумана, изменять масштаб. Приостанавливать как часовой механизм, так и вращение и снова запускать с места приостановки. Программное обеспечение, на котором разработано приложение — Microsoft Visual C++ 6.0.

3.2 Функциональное назначение

Данная программа предназначается для представления трехмерной модели часового механизма. Приложение дает следующие возможности:

— наблюдать модель;

— задавать угол вращения и точку в трехмерном пространстве, относительно которой будет происходить вращение;

— устанавливать время на часах;

— задавать цвет тумана;

— временно приостанавливать вращение, время и запускать его с точки приостановки;

— изменять масштаб модели;

— ускорять и корректировать угол вращения в динамическом режиме.

3.3 Логическая структура и функциональная декомпозиция проекта

Первый этап. В методе «PreCreateWindow» устанавливается стиль окна, после чего — формат пикселей, это делается функцией usr_bSetupPixelFormat, в котором в свою очередь выполняются ChoosePixelFormat и SetPixelFormat, которые проверяют формат и устанавливают его соответственно.

Второй этап. Создается контекст воспроизведения, за это отвечает OnCreate, эта функция создает новый контекст воспроизведения OpenGL. Для удаления контекста есть функция OnDelete. За инициализацию отвечает метод usr_bInitOpenGL.

При завершении работы программы нужно освободить занятые ресурсы, за это отвечает метод userDestory OpenGL.

Еще один важный метод (usr_ReSize) устанавливает область вывода, и перспективу. Он вызывается при каждом изменении размера окна.

Рисование самой сцены. За это отвечает метод usr_Bigen, который вызывается при каждой перерисовки окна, и в свою очередь вызывает вспомогательную функцию рисования (usrDrawBox).

Метод «usrDrawBox» рисует сам корпус для часов и бриллиант в центре циферблата, имеющий функции декоративного украшения.

Так как данная программа является так называемым windows-приложением, то алгоритм её работы зависит от конкретных событий, а пользователь, в свою очередь, получает возможность, через интерфейс, «порождать» эти события. Единственное событие, которое генерируется без участия пользователя и будет существовать до закрытия приложения — это таймер. Поэтому важную роль играют обработчики событий, таких как выбор пунктов меню, нажатие горячих клавиш (некоторые из них синхронизированы между собой). Самые важные для понимания логической структуры программы события описаны в разделе «2.3 Разработка подсистемы управления событиями».

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

Ниже приведена таблица, в которой отображены основные методы (функции) и описано, за что они отвечают.

Таблица 1 — Основные методы и функции

Имя функции

Формальные параметры

Описание (метода)

PreCreateWindow

CREATESTRUCT& cs

Инициализация окна

usr_bSetupPixelFormat

-

Установка формата пикселей

usr_bInitOpenGL

-

Инициализация OpenGL

usr_DestoryOpenGL

-

Освобождение ресурсов (из-под OpenGL)

usr_ReSize

int x, int y, int width, int height

Корректирует вывод сцены на экран при изменении размера окна

usr_Bigen

-

Рисует функциональные части часового механизма

usr_DrawBox

-

Рисует корпус часов

Таблица 2 — Основные классы и их функции

Имя класса

Имя метода

Назначение класса

CAboutDlg

CAboutDlg, DoDataExchange

Справка о программе

CTIMEApp

CTIMEApp, Initlnstance, OnAppAbout

Отвечает за программу под windows

CMainFrame

AssertValid, CMainFrame, Dump, CMainFrame, OnCreate, PreCreateWindow

Отвечает за главное окно

CTIMEDoc

CTIMEDoc, AssertValid, -CTIMEDoc, Dump, OnNewDocument, Serialize

Занимается обработкой данных

CTIMEView

CTIMEView, ReSize, usr_Prelnit, usr_DrawBox, DestroyOpenGL, usr_bSetupPixelFormat, blnitOpenGL, usr_Bigen, PreCreateWindow, Create, OnDestroy, OnSize, OnTimer, EraseBkgnd, OnViewRotate

Занимается отображением данных

3.4 Требования к техническому программному обеспечению

Для успешной эксплуатации программного продукта необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium с тактовой частотой 800 МГц и выше, оперативная память — не менее 16 Мбайт, свободное дисковое пространство — не менее 10 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов — 256). Программное обеспечение: операционная система WINDOWS 2000/XP и выше.

3.5 Руководство пользователя

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

— задавать угол вращения и точку в трехмерном пространстве, относительно которой будет происходить вращение;

— устанавливать время на часах;

— задавать цвет тумана;

— временно приостанавливать вращение, время и запускать его с точки приостановки;

— изменять масштаб модели;

— ускорять и корректировать угол вращения в динамическом режиме.

Чтобы начать вращать объект можно воспользоваться одним из способов:

— выбрать пункт меню «View» -> «Rotate» (Приложение Г, Рисунок Г. 2). В появившемся диалоговом окне установить точку координаты, задав определённые параметры на осях х, у, z и задать угол (чем больше угол вращения, тем выше скорость вращения).

— нажатиями клавиш «A», «D», «W», «S», «Q», «Е» установить точку координаты (относительно которой будет происходить вращение), задав определённые параметры на осях х, у, z соответственно. Для задания угла используются клавиша «+» и клавиша «-», результаты их нажатия соответственно увеличивают или уменьшают угол поворота. Этот способ больше подходит для коррекции уже существующего вращения, он является более динамичным.

Для установки времени на часах необходимо выбрать пункт меню «View"-> «Time». В появившемся диалоговом окне задать нужное время (Приложение Г, Рисунок Г. З).

Для установки тумана нужного цвета необходимо выбрать пункт меню «View» -> «Fog». В появившемся диалоговом окне задать нужные значения каждого цвета в диапазоне от 0 до 1 (Приложение Г, Рисунок Г. 4). Цвет устанавливается в формате RGB.

Также существует возможность изменения масштаба объекта. Для этого необходимо нажать клавишу «Т», и в зависимости от того какая из клавиш будет нажата, масштаб будет уменьшаться или увеличиваться. На масштаб наложены ограничения.

Существует возможность временно приостановить и снова запустить с места остановки либо часовой механизм, либо вращение объекта, либо и то и другое. Для этого необходимо воспользоваться пунктами меню «Start» и «Stop». У каждого есть подпункт функциональное назначение, которого интуитивно понятно из названия.

Заключение и выводы

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

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

Как результат получилось windows-приложение, представляющее довольно точную модель реально существующих часов.

Список литературы

1. Порев В. Н. Компьютерная графика. СПб., BHV, 2002

2. Шикин А. В., Боресков А. В. Компьютерная графика. Полигональные модели. Москва, ДИАЛОГ-МИФИ, 2001

3. Тихомиров Ю. Программирование трехмерной графики. СПб, «БХВ — Петербург» 2002

4. Хилл Ф., OpenGL. Программирование компьютерной графики. СПб.: «Питер», 2004

5. Боресков — Графика трехмерной игры на OpenGL (2004)

6. Поляков, Брусенцев — Методы и алгоритмы компьютерной графики в примерах на Visual C++(2003)

7. Эйнджел — Интерактивная компьютреная графика. Вводный курс на базе OpenGL (2001)

8. Херн, Бейкер — Компьютерная графика и стандарт OpenGL (2005)

9. Программирование GLUT: окна и анимация. Miguel Angel Sepulveda, LinuxFocus

10. Компьютерная графика и стандарт OpenGL, 3-е издание, Дональд Херн, М. Паулин Бейкер

11. Алгоритмы: построение и анализ 2-е издание, Томас X. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн

Приложение А. Фрагмент кода приложения

Приложение Б. Диаграмма классов

Приложение В. Блок схема

Приложение Г. Экранные формы

Рисунок Г. 1 — Главное окно программы

Рисунок Г.2 — Окно настройки вращения

Рисунок Г. З — Окно настройки времени

Рисунок Г.4 — Окно настройки тумана

Рисунок Г.5 — Главное окно программы, после применения настроек

ПоказатьСвернуть
Заполнить форму текущей работой