Суффикс
|
Описание
|
Тип в С
|
Тип в OpenGL
|
b
|
8-разрядное целое
|
signed char
|
GLbyte
|
s
|
16-разрядное целое
|
short
|
GLshort
|
i
|
32-разрядное целое
|
Int long
|
GLint, GLsizei
|
f
|
32-разрядное число с
плавающей точкой
|
float
|
GLfloat, GLclampf
|
d
|
64-разрядное число с
плавающей точкой
|
double
|
GLdouble, GLclampd
|
ub
|
8-разрядное беззнаковое
целое
|
unsigned char
|
GLubyte, GLboolean
|
us
|
16-разрядное беззнаковое
целое
|
GLushort
|
ui
|
32-разрядное беззнаковое
целое
|
unsigned int
unsigned long
|
GLuint, GLenum, GLbitfield
|
Таким образом, две команды glVertex2i (1,3); glVertex2f (1.0f, 3.0f); являются эквивалентными, за исключением того, что первая
из них определяет координаты вершины как 32-разрядные целые числа, а вторая
определяют их как числа с плавающей точкой с одинарной точностью. [1]
Наименования некоторых команд библиотеки OpenGL могут иметь
заключительный символ v, который указывает на то, что данная команда принимает
указатель на вектор (или массив) значений, а не набор индивидуальных параметров.
Много команд имеют как векторные, так и невекторные версии, но некоторые
команды принимают только индивидуальные параметры, тогда как другие команды
требуют, чтобы, по крайней мере, некоторые из их параметров были определены как
векторы. Следующие строки показывают, как можно было бы использовать векторную
и невекторную версию команды, которая устанавливает текущий цвет:
f (1.0, 0.0, 0.0);color_array [ ] = {1.0, 0.0, 0.0);
glColor3fv (color_array);
Наконец, библиотека OpenGL определяет тип данных GLvoid. Этот тип данных
наиболее часто используется для тех команд библиотеки OpenGL, которые принимают
в качестве параметров указатели на массивы значений.
1.3 OpenGL
как конечный автомат
Графическая система OpenGL представляет собой конечный автомат. В ходе
работы этот автомат переводится в различные состояния (или режимы), которые
затем остаются в силе до тех пор, пока вы не будут изменены. Например, текущий
цвет представляет собой переменную состояния. Можно установить в качестве
текущего белый, красный, или любой другой цвет, и после этого каждый объект
будет выводиться на экран с этим цветом до тех пор, пока для текущего цвета не
будет установлено какое-нибудь другое значение. Текущий цвет является лишь
одной из множества переменных состояния, которые поддерживает библиотека
OpenGL. Другие переменные состояния управляют такими вещами, как текущая
визуализация и преобразования проецирования, шаблоны штриховки линий и
многоугольников, режимы вывода многоугольников на экран, соглашения по упаковке
пикселей, местоположение и характеристики источников освещения, а также
свойства материалов объектов, выводимых на экран. Множество переменных
состояния относятся к режимам, которые включаются или отключаются с помощью
команд glEnable() или glDisable() соответственно.
Каждая переменная состояния или режим имеют значение по умолчанию, и в
любой момент времени можно запросить у системы текущие значения каждой из этих
переменных. Как правило, для этого используется одна из шести команд:
glGetBooleanv( ), glGetDoubIev( ), glGetFloatv( ), glGetlntegerv( ),
glGetPointerv( ) или gIIsEnabled( ). To, какую из этих команд следует выбрать,
зависит от того, в виде какого типа данных необходимо получить ответ. Для
некоторых переменных состояния используются более конкретные команды запроса
(такие как glGetLight*( ), glGetError( ) или glGetPolygonStipple( )). Кроме
этого, можно сохранить набор переменных состояний в стеке атрибутов с помощью
команд glPushAttrib( ) или gIPushCIientAttrib( ), временно изменить их, а затем
восстановить значения этих переменных с помощью команд glPopAttrib ) или
glPopClienlAttrib( ). Для временных изменений состояния необходимо использовать
именно эти команды, а не любые из команд запроса, так как они более эффективны.
[4]
1.4 Конвейер
визуализации OpenGL
Большинство реализаций библиотеки OpenGL имеет одинаковый порядок
операций, определенную последовательность стадий обработки, которая называется
конвейером визуализации OpenGL. Этот порядок функционирования, показанный на
рисунке 1.1, не является строгим правилом реализации библиотеки OpenGL, однако
он представляет собой надежное руководство для предсказания результата работы
OpenGL.
Следующая диаграмма демонстрирует концепцию сборочного конвейера Генри
Форда, которую библиотека OpenGL использует для обработки данных.
Геометрические данные (вершины, прямые и многоугольники) проходят через
последовательность блоков, в число которых входят вычислители и операции
обработки вершин, в то время как пиксельные данные (пиксели, изображения и
растровые образы) для определенной части процесса визуализации обрабатываются
по-другому. Оба типа данных подвергаются одним и тем же заключительным
операциям (операции растеризации и пофрагментной обработки), прежде чем
итоговые пиксельные данные записываются в буфер кадра.
Рисунок 1.1 - Типовой конвейер OpenGL
Функционирование конвейера можно разбить на несколько основных стадий:
. Списки вывода. Все данные, вне зависимости от того, описывают ли
они геометрию или пиксели, могут быть сохранены в списке вывода для текущего
или более позднего использования (альтернативой сохранению данных в списке
вывода является немедленная обработка данных, она также известна под названием
непосредственный режим работы). После того как список вывода был создан,
сохраненные данные посылаются из этого списка вывода точно так же, как если бы
они были посланы прикладной программой в непосредственном режиме работы. [4]
. Вычислители. Все геометрические примитивы, в конечном счете,
описываются вершинами. Параметрические кривые и поверхности могут быть
первоначально описаны контрольными точками и полиномиальными функциями, которые
называются базовыми функциями. Вычислители предоставляют метод получения
вершин, используемый для представления поверхности по контрольным точкам. Таким
методом является полиномиальное отображение, которое может формировать нормаль
к поверхности, координаты текстуры, цвета и значения пространственных координат
по контрольным точкам. [4]
. Операции обработки вершин. Для данных по вершинам следующей
является стадия "операций обработки вершин", которая преобразовывает
вершины в примитивы. Некоторые типы данных по вершинам (например,
пространственные координаты) преобразовываются в матрицы чисел с плавающей
точкой размером 4x4. Пространственные координаты проецируются из положения в
трехмерном пространстве в положение на экране.
Если разрешено использование расширенных функциональных возможностей, то
данная стадия обработки данных еще более насыщена. Если используется наложение
текстур, то на этой стадии могут быть сгенерированы и преобразованы координаты
текстуры. Если разрешено освещение, то здесь выполняются вычисления параметров
освещения, для чего используются преобразованные вершины, нормаль к
поверхности, положение источника освещения, свойства материала и другая
информация освещения, необходимая для получения значения цвета. [8]
4. Сборка примитивов. Операция отсечения, основная часть сборки
примитивов, представляет собой удаление частей геометрии, которые выходят за
пределы полупространства, определенного некоторой плоскостью. При отсечении
точек просто пропускаются или отбрасываются вершины; при отсечении линий или
многоугольников могут добавляться дополнительные вершины в зависимости от того,
как отсекается линия или многоугольник. В некоторых случаях этот процесс
сопровождается перспективным делением, которое заставляет удаленные
геометрические объекты казаться меньше, чем более близкие объекты. После этого
применяются операции получения окна просмотра (Viewport) и глубины (z-координата). В зависимости от способа построения
многоугольник может быть выведен на экран в виде точек или в виде линий.
Результатом выполнения этой стадии являются законченные геометрические
примитивы, которые представляют собой преобразованные и отсеченные вершины и
связанные с ними значения цвета, глубины и иногда координаты текстур, а также
указания для выполнения стадии растеризации.
. Операции обработки пикселей. В то время как геометрические
данные следуют одним путем по конвейеру визуализации OpenGL, пиксельные данные следуют другим маршрутом. Пиксели
из определенного массива в системной памяти сначала распаковываются из
какого-либо одного множества форматов в надлежащее количество компонентов.
Затем эти данные масштабируются, смещаются и обрабатываются посредством карты
элементов отображения. После этого результаты фиксируются и либо записываются в
область памяти, выделенную под текстуры, либо передаются на стадию
растеризации. Если пиксельные данные считываются из буфера кадра, то
выполняются операции по передаче пикселя (масштабирование, смещение,
отображение и фиксация). Затем полученные результаты упаковываются в
соответствующий формат и возвращаются в некоторый массив системной памяти.
Существуют специальные операции копирования пикселей для копирования
данных из буфера кадра в другие части буфера кадра или в область памяти,
выделенную для текстур. Выполняется однопроходная реализация операций при
передаче пикселя, а затем данные записываются в область памяти, выделенную для
текстур или обратно в буфер кадра.
. Сборка текстуры. OpenGL-приложения могут накладывать изображения
текстуры на геометрические объекты для того, чтобы сделать их вид более
реалистичным. Если используется несколько изображений текстуры, то весьма
разумно будет поместить их в объекты текстуры для упрощения переключения между
ними. Некоторые реализации библиотеки OpenGL могут иметь специальные ресурсы
для ускоренного выполнения операций над текстурами. Это может быть реализовано
как специализированная, высокопроизводительная область памяти, выделенная для
текстур. Если такая память доступна, объекты текстуры могут быть упорядочены по
приоритетам для облегчения управления этим ограниченным и ценным ресурсом. [9]
. Растеризация. Растеризация представляет собой преобразование как
геометрических, так и пиксельных данных во фрагменты. Каждый квадратный
фрагмент соответствует определенному пикселю в буфере кадра. Штриховка линий и
многоугольников, ширина линии, размер точки, модель закраски и вычисления
покрытия, необходимые для поддержки сглаживания, учитываются как вершины,
которые соединяются в линии, или как внутренние пиксели, рассчитанные для
закрашенного многоугольника. Значения цвета и глубины назначаются для каждого
квадратного фрагмента.
. Операции обработки фрагментов. Прежде чем значения фактически
сохраняются в буфере кадра, выполняется ряд операций, в результате чего
фрагменты могут быть изменены или даже отброшены. Все эти операции могут быть
включены или отключены.
Первой операцией, с которой можно столкнуться, является наложение
текстур. Эта операция заключается в том, что тексель (элемент текстуры)
генерируется из памяти текстур для каждого фрагмента и применяется к
конкретному фрагменту. После этого могут применяться вычисления тумана, которые
сопровождаются альфа-тестом, тестом трафарета и тестом буфера глубины.
Неудачное завершение включенного теста может прекратить длительную обработку
квадрата фрагмента. Затем могут быть выполнены операции смешивания цветов,
псевдосмешивания (размывания) цветов для передачи полутонов, логической
обработки и маскирования с помощью битовой маски. Наконец, полностью
обработанный фрагмент выводится в соответствующий буфер, где он окончательно
превращается в пиксель и достигает своего конечного местоположения.
2. Разработка приложения для построения динамического изображения
трехмерной модели объекта "Нефтяная платформа"
2.1
Инициализация библиотеки OpenGL
Первоначально необходимо подключить используемые свободно
распространяемые библиотеки. Для этого в файле stdafx.h
следует подключить заголовочные файлы, содержащие описания функций OpenGL, а именно: gl.h, glu.h, glaux.h, после чего следует в свойствах
проекта прописать библиотеки, необходимые для работы с функциями OpenGL: opengl32.lib, glu32.lib, glaux.lib.
Процесс инициализации библиотеки OpenGL состоит из следующих этапов:
. Выбор и установка формата пикселей. Здесь указывается такая
информация как глубина цвета, флаги поверхности и т.д. Вся эта информация
представляется в специальной структуре PIXELFORMATDESCRIPTOR. После заполнения полей структуры,
необходимо установить в системе выбранный формат пикселей. На основании
введенных данных выбирается наиболее подходящий формат пикселя из
поддерживаемых в контексте устройства. После того, как система выбрала формат
пикселей, необходимо установить его в контексте устройства.
. Создание контекста вывода для библиотеки OpenGL. На этом этапе создаются контексты
устройства и воспроизведения OpenGL,
совместимые с установленным оборудованием и программным обеспечением. После
создания контекста необходимо установить его текущим, а по завершению работы
программы следует позаботиться о его удалении. Также на этом шаге необходимо
установить требуемые стили окна.
2.2 Проектирование трехмерной модели и настройка параметров отображения
сцены
Разработанную модель нефтяной платформы можно условно разбить на группы
основных элементов:
. Каркас:
- корпус платформы,
- помещения;
. Буровая установка:
- бур,
- дополнительное оборудование,
- цистерны,
. Опоры.
Фото прототипа разработанной модели, диаграмма классов и обобщенный
алгоритм работы программы вынесены в приложение А. Листинг проекта вынесен в
приложение Б.
Все элементы платформы выполнены с использованием объектов библиотеки AUX. Для построения модели используются
стандартные примитивы этой библиотеки.
Во избежание сложностей в подборе координат все отдельные элементы сцены
заключены в операторные скобки glPushMatrix( ), glPopMatrix( ).
Область вывода сцены на экран определена таким образом, что
подстраивается под форму и размеры окна, при этом пропорции модели не
искажаются. Проект предоставляет возможность самостоятельно настроить
перспективу, но это делать не рекомендуется. По-умолчанию установлена
перспектива gluPerspective( ) с специфичным для данного
приложения набором параметров.
Сцена освещается одним источником света с различными параметрами набора
свойств.
Анимационная составляющая модели представлена вращающейся буровой
установкой. При нажатии на соответствующую кнопку "Q" на клавиатуре, буровая
установка начинает вращаться.
При начальной инициализации проекта задается ряд параметров отображения
сцены, в том числе:
- glEnable(GL_DEPTH_TEST): включает тест глубины;
- glEnable(GL_COLOR_MATERIAL): отрисовывать цветные поверхности;
- glEnable(GL_LIGHTING): pазpешает освещение сцены сpедствами OpenGL;
- glEnable(GL_NORMALIZE): создание нормалей к поверхностям;
- glEnable(GL_AUTO_NORMAL): режим автоматического вычисления
нормалей;
- glEnable(GL_TEXTURE_2D): разрешает наложение текстур на
объекты;
- glShadeModel (GL_SMOOTH): создает
плавные тени при освещении;
- glPolygonMode(GL_FRONT_AND_BACK, PolygonMode): определяет стиль рисования полигонов, а именно: отрисовывать передние
и задние поверхности, принцип соединения вершин (задается программно).
2.3
Разработка инструментов управления настройками приложения
Для настройки многочисленных параметров приложения предусмотрено
многофункциональное меню "Опции". Внешний вид этой экранной формы
представлен на рисунке 2.2:
Рисунок 2.2 - экранная форма "Опции"
С помощью инструментов, расположенных на форме и объединенных в
тематические группы поддерживается настройка следующих компонентов:
. Вращение сцены. Возможно включить, или отключить вращение,
задать плоскости в которых будет вращаться сцена, направления вращения, а также
скорость вращения. Опция вращения реализуется двумя функциями
glRotatef(XSceneRot,0,1,0), glRotatef(YSceneRot,1,0,0), расположенными перед
всеми блоками рисования частей корабля, что позволяет поворачивать всю сцену
целиком. Автоматическое вращение поддерживается благодаря созданию специального
таймера с параметрами, зависящими от заданной скорости вращения;
. Вращение буровой установки. Вращается по нажатию кнопки "Q" на клавиатуре;
. Режим рисования полигонов. Позволяет задать соответствующий
режим: будут ли отрисовываться поверхности, либо только линии, составляющие
каркас, либо только точки. Осуществляется нажатием кнопки "W";
. Цвет. Позволяет задать желаемые цвета для корпуса с опорами,
строений и буровой установки. Выбор цвета осуществляется с помощью стандартного
диалогового окна, реализуемого классом CColorDialog. По завершению работы этого
диалога он возвращает код цвета в специальном формате COLORREF, после чего
необходимо преобразовать его к стандартной палитре RGB с помощью функций GetRValue(color), GetGValue(color), GetBValue(color), а после чего
преобразовать полученные значения к стандартам библиотеки OpenGL;
. Свет. Позволяет задать любые комбинации из пяти доступных
источников света. Задание свойств источников света достаточно трудоемкая процедура
и требует определенных знаний от пользователя, в связи с чем, было решено
запретить подобные изменения;
. Туман. Возможно включить, или отключить туман, задать модель
рисования тумана и его цвет. Интенсивность тумана принята 0,2 и не подлежит
изменению.
Обработка введенных параметров производится после завершения работы с
диалоговым окном при условии, что пользователь подтвердил свой выбор. В
зависимости от конфигурации переключателей и заполнения текстовых полей
изменяются соответствующие переменные класса, значения которых учитываются при
отрисовке сцены.
Следует отметить, что ранее введенные данные не передаются в диалоговое
окно при повторном его запуске. Это одно из возможных направлений улучшения
программы.
Кроме всего вышеперечисленного пользователь может изменить перспективу с
помощью окна, изображенного на рисунке 2.3, вызов которого осуществляется с
панели инструментов приложения.
Рисунок 2.3 - Экранная форма настройки перспективы
Пользователь может выбирать один из четырех типов перспективы: glOrtho (ортографическая проекция), glFrustum (одноточечная перспективная
проекция), gluPerspective (аналогично glFrustum), gluLookAt (позволяет определить ориентацию
наблюдателя в пространстве). В зависимости от выбранного типа будет меняться
набор доступных для редактирования текстовых полей.
2.4 Обработка
событий
В проекте реализована возможность управления сценой и её элементами с
помощью клавиатуры и мыши. Пользователь может вращать, сдвигать, приближать и
удалять сцену, а также управлять вращением всей платформы или буровой
установки.
Существует несколько способов перехватить и обработать нажатия клавиш на
клавиатуре. В проекте для этого используется обработчик события WM_CHAR: void CKarkasView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags). Чтобы определить какая именно клавиша нажата
достаточно проверить передаваемый в функцию параметр nChar.
Для реализации вращения в вертикальной плоскости обрабатывается событие WM_MOUSEWHEEL функцией:
BOOL CKarkasView::OnMouseWheel(UINT nFlags, short zDelta,
CPoint pt). Здесь
параметр zDelta
принимает значение
соответствующее направлению вращения скроллера.
Кроме того, для создания анимации и автоматического вращения сцены
требуется также обработать события, генерируемые таймерами. Для этого
обрабатывается событие WM_TIMER функцией: void
CKarkasView::OnTimer(UINT nIDEvent). Здесь следует учесть, что все таймеры
приложения генерируют одинаковые события и обрабатываются одной функцией. Чтобы
различать "авторов" сообщений в функцию передается параметр nIDEvent.
Вызов окон настройки, а также выстрел пушки осуществляются с помощью
кнопок, расположенных на панели инструментов (рисунок 2.4).
Рисунок 2.4 - Панель инструментов приложения
Для обработки их нажатия используются соответственно функции: void CKarkasView::OnBum( ), void CKarkasView::OnOptions( ),
void CKarkasView::OnPersp( ).
3. Информационное и программное обеспечение
3.1 Общие
сведения о программе
В ходе выполнения курсовой работы было разработано однодокументное windows-приложение на основе OpenGL для построения динамического
изображения трехмерной модели объекта "Нефтяная платформа". Программа
написана на языке высокого уровня C++ в среде Microsoft Visual C++ 6.0 с использованием библиотеки классов MFC. Для функционирования программы на
компьютере должны быть установлены свободно распространяемые графические
библиотеки OpenGL: opengl32.lib, glu32.lib, glaux.lib.
3.2
Функциональное назначение
Программа отображает в главном окне детализированную трехмерную модель
нефтяной платформы средствами графических библиотек OpenGL. Пользователь может по своему усмотрению изменять ряд
настроек приложения (автоматическое вращение сцены, вращение бура, поворот в
вертикальной плоскости, конфигурацию освещения, параметры цвета, туман и режим
полигонов), сменить перспективу, масштабировать изображение, вращать и сдвигать
сцену, а также её части. Все настройки приложения вынесены в диалоговые окна.
Для упрощения работы пользователю предоставлен интуитивно понятный интерфейс,
представляющий собой набор специальных элементов управления, благодаря которым
ему не требуется знать специфические команды и массивы параметров. Например,
для задания цвета не требуется вводить три компонента цветовой палитры RGB. Вместо этого пользователю
достаточно выбрать понравившийся цвет из специализированного диалогового окна.
3.3 Логическая структура и функциональная декомпозиция проекта
Обобщенный алгоритм построения трехмерного объекта средствами OpenGL и диаграмма классов приложения
представлены в приложении А.
В ходе объектно-ориентированной декомпозиции были выделены и описаны
классы созданного приложения (таблица 3.1).
Таблица 3.1 - Описание классов приложения
Название класса
|
Описание класса
|
CLR1View
|
Отвечает за отображение
содержания документа и графической информации. В данном случае методы именно
этого класса отвечают за рисование модели нефтяной платформы и обработку
событий;
|
CLR1Doc
|
Реализует основные
возможности внутреннего представления документа. Этот класс используется для
управления данными;
|
CLR1App
|
Класс, отвечающий за
создание и инициализацию главного окна и опрос системных сообщений;
|
CMainFrame
|
Представляет объекты,
обеспечивающие окно-рамку (frame) вокруг отображения документа;
|
DlgOptions
|
Класс диалогового окна,
отвечающий за изменение многочисленных параметров приложения;
|
DlgPers
|
Класс диалогового окна,
отвечающий за смену перспективы и настройку её параметров;
|
CAboutDlg
|
Класс диалогового окна
справки.
|
В таблицах 3.2.-3.3 приведена спецификация важнейшего класса приложения.
Однако, в них отображены только ключевые поля и методы класса, реализующие
работу приложения.
Таблица 3.2 - Методы класса CLR1View
Название метода класса
|
Назначение
|
Usr_bInitOpenGL
( )
|
Функция инициализации
библиотеки OpenGL;
|
Usr_bSetupPixelFormat
( )
|
Функция установки формата
пикселей;
|
Usr_DestroyOpenGL
( )
|
Функция, освобождающая
ресурсы по завершению работы приложения;
|
Usr_PreInit ( )
|
Функция, ответственная за
включение режимов работы библиотеки, настройку освещения и т.д.
|
Usr_RenderScene
( )
|
Функция, отвечающая за
отрисовку модели;
|
Usr_ReSize (int
X, int Y, int width, int height )
|
Функция, отвечающая за
поддержание параметров области вывода при изменении размеров и формы окна;
|
CKarkasView ( )
|
Конструктор класса;
|
OnChar (UINT
nChar, … ) OnMouseWheel (short zDelta, …)
|
Функции, отвечающие за
обработку нажатий клавиш на клавиатуре и вращения колеса мыши;
|
OnTimer (UINT
nIDEvent)
|
Функция, обрабатывающая
таймеры;
|
Cylinder ( )
|
Функция рисования сплошного
или каркасного цилиндра
|
Cube ( )
|
Функция рисования сплошного
или каркасного параллелограмма
|
программа графический библиотека декомпозиция
Таблица 3.3 - Переменные класса CLR1View
Название поля класса
|
Назначение
|
float m_AngleBur
|
Переменная, хранящая угол
поворота буровой установки
|
BOOL b_RotateBur
|
Переменные, показывающая
следует ли вращать буровую установку
|
BOOL m_Wire
|
Признак режима отображения
полигонов
|
float m_UgolX
|
BOOL
m_NeedRotate
|
Признак, показывающий нужно
ли вращать всю сцену
|
float m_Angle
|
Угол поворота всей сцены
|
int m_Timer
|
Идентификатор таймера
|
3.4
Требования к техническому и программному обеспечению
Для корректной работы приложения на компьютере должны быть установлена
операционная система семейства Windows:
Windows 2000 Service Pack 3, Windows Server 2003, Windows XP Service Pack 2, Windows Vista, Windows 7. Минимальные и рекомендуемые
системные требования указаны в таблице 3.4.
Таблица 3.4 - Минимальные и рекомендуемые системные требования
Устройство
|
Минимальные системные
требования
|
Рекомендуемые системные
требования
|
Процессор
|
600 МГц
|
1 ГГц
|
Оперативная память
|
192 МБ
|
256 МБ
|
Свободное место на жестком
диске
|
100 МБ
|
100 МБ
|
Монитор
|
800 x 600 256 colors
|
1024 x 768 High
Color - 16-bit
|
3.5 Руководство пользователя
Для запуска приложения необходимо скопировать в одну директорию
исполняемый файл программы HeftPlat.exe, после чего запустить приложение.
Внешний вид основного окна приложения отражен на рисунке А.2.
1. По-умолчанию включены все источники света. Автоматическое
вращение отключено. Режим полигонов - поверхности. Элементы платформы окрашены
в различные цвета. Вызов окон настройки сцены и перспективы (рисунки 2.2 и
2.3), а также вращение буровой установки осуществляется нажатием кнопки "Q". Автоматическое вращение всей
модели в горизонтальной плоскости осуществляется по нажатии кнопки
"Пробел".
Заключение
Разработанный программный продукт удовлетворяет всем требованиям,
выявленным в результате тщательного исследования предметной области и задач,
стоящих перед специалистами, работающими в сфере моделирования. Приложение
позволяет легко и быстро создавать модель и выводить ее на экран, а после
управлять ей и её частями, задавать многочисленные параметры, определять
поведение сцены.
Следует отметить, что существует множество перспектив по расширению
функциональных возможностей программы. Дальнейшее развитие позволит усилить
детализацию, увеличить число настраиваемых параметров, ускорить работу
программы.
Список литературы
1. The red book - #"511451.files/image005.gif">
Рисунок А.1- Прототип модели нефтяной платформы
Рисунок А.2 - Главная форма приложения
Схема А.1 - Диаграмма классов приложения
Схема А.2 - Обобщенный алгоритм работы программы
ПРИЛОЖЕНИЕ Б
фрагменты КОДа ПРОГРАММЫ
// Функция рисования трехмерной сцены
void CLR1View::usr_RenderScene()
{(1.0f, 1.0f, 1.0f, 1);(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);();(0.0f, 0.0f,
-7.0f);();(m_UgolX,1,0,0);(m_Angle,0,1,0);f(0.0f, 0.0f, 1.0f);
//auxWireCube(4.0);
// Платформаf (0.5, 0.5, 0.5,
0.0);();(8.0, 1.0, 8.0);(0.5);();
// Бочкиf (1.0, 0.0, 0.0,
0.0);();(-2.0, -0.5, 1.0);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0,
-0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0,
0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1,
0.7);();();(2.0, -0.5, 1.0);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0,
-0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0,
0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1, 0.7);(0.0, 0.0, -0.3);(0.1,
0.7);();
// Постройкаf (0.7, 0.5, 0.3,
0.0);();(-1.5, 0.45, 0.0);(1.0, 1.0, 4.0);(0.5);();();(-0.5, 0.75, 0.0);(5.0,
1.0, 5.0);(0.5);();
// Бурf (0.0, 0.0, 1.0,
1.0);();(m_AngleBur, 0.0, 1.0, 0.0);(0.0, 1.0, 0.0);(0.25, 2.5);(0.2,
5.0);(0.0, -2.0, 0.0);(0.5);(0.0, -0.8, 0.0);(0.5);();f (0.5, 0.5, 0.5, 0.0);
// Опора 1();(-1.0, -1.25,
-1.0);(1.0, 2.0, 1.0);(1.0);();
// Опора 2();(-1.0, -1.25,
1.0);(1.0, 2.0, 1.0);(1.0);();
// Опора 3();(1.0, -1.25,
-1.0);(1.0, 2.0, 1.0);(1.0);();();();(::wglGetCurrentDC());
}