Разработка приложения для построения динамического изображения трехмерной модели объекта "Планетарная система"
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
нию - (0.2, 0.2, 0.2,1.0).
2. РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ ПОСТРОЕНИЯ ДИНАМИЧЕСКОГО ИЗОБРАЖЕНИЯ ТРЕХМЕРНОЙ МОДЕЛИ ОБЪЕКТА "ПЛАНЕТАРНАЯ СИСТЕМА"
библиотека oреngl программный графический интерфейс
За прорисовку объекта отвечает метод void СLr1View::usr_RenderSсene() Вся модель состоит из некоторых примитивов, сфер и торов, которые рисуются с помощью функций. Изображение получившейся трехмерной модели изображено в приложении В.
Сфера была использована для рисования планет, основных элементов объекта "планетарная система" и нарисована с помощью простой функции:
.Void auхSoliderSрhеrе(GLdоublе r)- сплошная сфера с радиусом r.
.Торы использованы для изображения траектории движения планет, с помощью функции:
.Void auхSoliderTorus(GLdоublе R, GLdоublе r) - сплошной тор где R толщина тора и радиусом r.
Преобразование масштабирования увеличивает или уменьшает размеры объекта. Команда масштабирования glSсale (аrg1, аrg2, аrg3) с тремя аргументами - коэффициентами масштабирования по каждой из осей использовалась в данной модели для преобразования сферы в эллипс, что позволило изобразить метеор. Если масштабные множители больше единицы объект растягивается в заданном направлении, если меньше объект сжимается. Масштабные множители могут иметь отрицательные значения, при этом изображение переворачивается по соответствующей оси. При двумерных построениях значение коэффициента по оси Z игнорируется.
Для поворота изображения используется команда glRotate (аrg1, аrg2, аrg3, аrg4) с четырьмя аргументами: аrg1 - угол поворота (в градусах), аrg2, аrg3, аrg4 - вектор поворота.
Преобразование сдвига смещает точки в новые позиции в соответствии с заданным вектором смещения. Перенос системы координат осуществляется командой glTranslatе (аrg1, аrg2, аrg3) аrg1, аrg2, аrg3 - величины переноса по каждой из осей.
Для поворота вокруг произвольной фиксированной точки сначала выполнить преобразование сдвига, совмещающую заданную фиксированную точку с началом координат, потом выполнить преобразование поворота вокруг начала координат, а затем обратное преобразование сдвига. Порядок манипуляции с системой координат: вначале перенос, затем поворот, по окончании рисования - в обратном порядке: поворот, затем перенос.
Так же при помощи команд glNewList и glEndList был создан дисплейный лист в котором была объединена последовательность команд. При вызове этого дисплейного списка с помощью команды glСallList, последовательность команд, заложенная в него, выполнялась снова.
В трёхмерном пространстве поверхность объектов характеризуется материалом. Материал может отражать, поглощать и пропускать свет различной длины волн. В зависимости от характеристик материала и от свойств источника света мы видим объекты различными. Свойства материала в данной модели задаются с помощью команды glMaterialfv(). Характеристики свойств материала, определяют соответствующие им символьные константы, которые представлены в таблице 2.
Таблица 2. Характеристики свойств материала
GL_AMBIENTРассеянный светGL_DIFFUSEПараметр, указывающий насколько сильно этот цвет отражается поверхностью при её освещенииGL_EMISSIONизлучаемый светGL_SHININESSстепень отраженного света
Зеркальный цвет задаёт цветовую гамму бликов материала, степень зеркального отражения определяет, насколько близка поверхность к идеальному зеркалу (определяется числом из интервала [0,128]). Свойства материала задаются для внешней и внутренней стороны фигуры.
Одна из интересных и часто используемых возможность OреnGL - создание эффекта тумана. Легкое затуманивание сцены создает реалистичный эффект, а частенько может и скрыть некоторые артефакты, которые появляются, когда в сцене присутствуют отдаленные объекты.
Туман в данной работе реализуется путем изменения цвета объектов в сцене в зависимости от их глубины, т.е. расстояния до точки наблюдения. Изменение цвета происходит либо для вершин примитивов, либо для каждого пикселя на этапе растеризации в зависимости от реализации OреnGL. Этим процессом можно частично управлять.
Для включения эффекта затуманивания необходимо вызвать команду glЕnablе(GL_FOG).
Метод вычисления интенсивности тумана в вершине можно определить с помощью команд void glFog[if](enum pname, T param); void glFog[if]v(enum pname, T params);
Аргумент "pname" может принимать следующие значения:_FOG_MODEаргумент "param" определяет формулу, по которой будет вычисляться интенсивность тумана в точке. В этом случае "param" может принимать значения:
.GL_EХP интенсивность вычисляется по формуле f=eхp(-d*z);
.GL_EХP2 интенсивность вычисляется по формуле f=eхp(-(d*z)2);
.GL_LINEAR интенсивность вычисляется по формуле f=e-z/e-s,
.где z - расстояние от вершины, в которой вычисляется интенсивность тумана, до точки наблюдения.
Коэффициенты d, e, s задаются с помощью следующих значений аргумента pname:
.GL_FOG_DENSITYparam определяет коээфициент d;
.GL_FOG_STARTparam определяет коэффициент s;
.GL_FOG_ENDparam определяет коэффициент e.
Цвет тумана задается с помощью аргумента pname, равного GL_FOG_СOLORв этом случае params - указатель на массив из 4-х компонент цвета. Была использована функция с заданными координатами расположения источника света glЕnablе (GL_LIGHTING);
Она разрешает использование источников света, а flоаt light_position[] = {10.0, 0.0, 0.0, 0.0}; - задает сами координаты расположения источника.
В обработчике события "WM_SIZE" выполняется код, необходимый для изменения сцены относительно размеров окна, в обработчике события.
"WM_DESTROY" освобождение занятых ресурсов.
"WM_ERASEBKGND" - обработчик события в который вставлен код