Машинная и компьютерная графика
Оглавление
Введение
.
Общие сведения о OpenGL
.
Разработка логотипа
.
Разработка программы. Функции, использованные в программе
.1
Построение модели
3.2 Возможность
перемещения
3.3 Задание освещения
.
Результат выполнения работы
Заключение
Список
используемых источников
Приложение.
Листинг программы
Введение
Компьютерная или машинная графика - это вполне
самостоятельная область человеческой деятельности со своими проблемами и
спецификой. Компьютерная графика - это и новые эффективные технические средства
для проектировщиков, конструкторов и исследователей, и программные системы и
машинные языки, и новые научные, учебные дисциплины, родившиеся на базе синтеза
таких наук как аналитическая, прикладная, начертательная геометрия,
программирование для ЭВМ, методы вычислительной математики и т. п.[1]
Актуальность работы: основными задачами машинной графики
являются ввод (считывание) графической информации в ЭВМ, вывод ее из ЭВМ
(формирование изображений), а также определенного рода переработка информации в
компьютере. Таким образом, основные задачи машинной геометрии или, как говорят,
автоматизированного геометрического моделирования и конструирования - синтез в
ЭВМ и анализ геометрических объектов, решение задач геометрического характера.
При обработке информации, связанной с изображением, выделяют
три основных направления:
.Распознавание образов;
.Обработка изображений;
.Машинная и компьютерная графика.
Основная задача распознавания образов состоит в распознавании
имеющегося изображения на формально понятном языке символов. Распознавание
образов есть совокупность методов, позволяющих получать изображения, поданные
на вход, либо отнесение некоторых изображений к некоторому классу.
Обработка изображений рассматривает задачи, в которых и
входные, и выходные данные являются изображениями. Примерами обработки
изображений могут служить:
.Передача изображений вместе с удалением шумов и сжатием
данных;
.Переход от одного вида изображений к другому;
.Контрастирование различных снимков.
Компьютерная или машинная графика применяется, когда исходной
является информация не изобразительной природы, например, визуализация
экспериментальных данных в виде графиков или гистограмм, вывод графики в
компьютерных играх или синтез сцен для тренажеров. Можно сказать, что
компьютерная графика рисует, опираясь на формульные представления, и имеет
набор средств.[2]
Цель работы:
Средствами библиотеки OpenGL создать трехмерное изображение
символики факультета.
Основные задачи:
Основными задачами являются:
изучить принципы работы библиотеки OpenGL;
научиться создавать приложения с применением трехмерной
графики;
создать трехмерное изображение символики факультета.
1. Общие сведения о OpenGL
Библиотека OpenGL представляет из себя интерфейс
программирования трехмерной графики. Единицей информации является вершина, из
них состоят более сложные объекты.непосредственно не поддерживает работу с
устройствами ввода, такими как мышь или клавиатура, так как эта библиотека
является платформенно-независимой. Чтобы задействовать функции конкретной
операционной системы, необходимо воспользоваться надстройками над OpenGL,
такими как библиотеки GLUT или GLAUX.
На данный момент реализация OpenGL включает в себя следующие
библиотеки: OpenGL, GLU, GLUT, GLAUX. Библиотеки GLAUX и GLUT используются для
создания так называемых консольных приложений. [3]
2. Разработка логотипа
Разработка логотипа - это
трудная задача, так как на небольшом пространстве требуется передать главный
смысл того, чему посвящен логотип. Вместе с тем, изображаемое должно быть
понятным и запоминающимся даже человеку, не знакомому с предметом символики.
Рисунок 1 - Логотип
факультета информационных технологий
В основе разработанной
мною символики факультета лежат понятные всем сокращения: ТГТУ (Тамбовский государственный
технический университет) и ФИТ (Факультет "Информационных
Технологий").
Логотип исполнен в виде
ключа. По моему мнению, наш факультет является ключевым (т.е главным) во всем
университете. КЛЮЧ - символ обладания чем-либо[10]. Я думаю, что в данном
случае логотип определяет обладание знаниями, своеобразный «ключ к знаниям».
Ведь развитие компьютерных технологий позволило обществу подойти к глобальной
проблеме информатизации, связанной с быстро возрастающими интеграционными
процессами, проникающими во все сферы нашей деятельности: науку, культуру,
образование, производство, управление и т. д.
opengl логотип программа
освещение
3. Разработка программы. Функции, использованные в программе
3.1 Построение модели
Геометрические объекты в
OpenGL задаются вершинами. Вершина - это точка в пространстве графической
сцены. Для ее определения в библиотеке OpenGL реализована специальная команда:
void glVertex [2 3 4][s i f d][v](type coord) [7]
Вызов любой команды
glVertex* всегда определяется четырьмя однородными координатами: x, y, z и w.
Если вызывается команда glVertex3*, то вершина задается x, y и z координатами,
при этом w полагается равной 1. Для двумерного случая z - 0, а w - 1.Вершины в
OpenGL объединяются в графические примитивы. Это может быть фигура, такая как
точка, линия, многоугольник, прямоугольник пикселей или битовый массив. Каждая
вершина примитива имеет ассоциированные с ней данные. Каждая стена дома состоит
из шести прямоугольников. Для того чтобы сохранить содержимое текущей матрицы
для дальнейшего использования, применяются команды glPushMatrix (); glPopMatrix
();
Пример:();(GL_QUADS);d(3.0,
3.0, 1.0);d(3.0, 3.0, -1.0);d(-3.0, 3.0, -1.0);d(-3.0, 3.0, 1.0);();
glPopMatrix ();
3.2 Возможность
перемещения
В программе используются
модельно-видовые преобразования. К ним относят перенос, поворот и изменение
масштаба вдоль координатных осей. Для проведения этих операций достаточно
умножить на соответствующую матрицу каждую вершину объекта и получить
измененные координаты этой вершины:
(x’, y’, z’, 1)T = M *
(x, y, z, 1)T
где M - матрица
модельно-видового преобразования. Перспективное преобразование и проектирование
производится аналогично. Сама матрица может быть создана с помощью следующих
команд:
(xPos, yPos, zPos); //
производит перенос объекта, прибавляя к координатам его вершин значения своих
параметров.(xRot, 0.0f, 0.0f, 1.0f); // объект будет вращаться относительно оси
Oz на угол xRot.(yRot, 1.0f, 0.0f, 0.0f); // объект будет вращаться
относительно оси Ox на угол yRot
Все эти преобразования
изменяют текущую матрицу, а поэтому применяются к примитивам, которые
определяются позже. В случае, если надо, например, повернуть один объект сцены,
а другой оставить неподвижным, удобно сначала сохранить текущую видовую матрицу
в стеке командой glPushMatrix(), затем вызвать glRotate() с нужными
параметрами, описать примитивы, из которых состоит этот объект, а затем
восстановить текущую матрицу командой glPopMatrix()[4].
Пример, использования
этих функций в программе:
glPushMatrix();(2*time, 1,0,0);(-0.3,0,0);d(1,1,1);();(120,0,1,0);(GL_S,
GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);(GL_T, GL_TEXTURE_GEN_MODE,
GL_EYE_LINEAR);(quadObj, GLU_FILL);(quadObj, 0.6, 3.5, 30,20);
glPopMatrix();(); [6]
.3 Задание освещения
дает богатые возможности
разработчику моделировать реалистическую графику сцен, где присутствует свет.
Предусмотрен механизм задания световых характеристик материала объекта,
параметров источников света и модели освещения. Рассмотрим эти возможности
Для использования
освещения сначала надо установить соответствующий режим вызовом команды
glEnable(GL_LIGHTNING), а затем включить нужный источник командой
glEnable(GL_LIGHT0)[5].
Для задания освещения в
данной программе были объявлены следующие переменные и использованы следующие
команды:
GLfloat fAmbLight[] = {
0.2f, 0.2f, 0.2f };fDiffLight[] = { 0.2f, 0.2f, 0.2f };fspec[] = { 0.5f, 0.5f,
0.5f };(GL_LIGHT0, GL_AMBIENT, fAmbLight);(GL_LIGHT0, GL_DIFFUSE,
fDiffLight);(GL_LIGHT0, GL_SPECULAR, fspec);
Параметр fAmbLight
определяет рассеянный цвет материала (цвет материала в тени).
Параметр fDiffLight
определяет цвет диффузного отражения материала.
GLfloat fspec[] = { 0.5f,
0.5f, 0.5f };(GL_FRONT_AND_BACK,GL_SPECULAR, fspec);
Параметр fspec определяет
интенсивность (цвет) зеркального отражения от данного источника света.[8]
glMaterialf
(GL_FRONT,GL_SHININESS, 128);
Параметр mat_shininess
определяет степень зеркального отражения.
4. Результат выполнения работы
Рисунок 2 - Трёхмерное изображение
содержащее символику факультета
Рисунок 3 - Трёхмерное
изображение содержащее символику факультета
На данном рисунке
представлено
движение эмблемы факультета информационных технологий. Она сначала приближается
к нам, а потом удаляется.
Заключение
В данной работе были рассмотрены основные
понятия компьютерной графики. Также было сказано о её сильном распространении в
современном мире. Ведь ни один фильм, ни одна реклама чего-либо не делает без
участия машинной графики. Она нашла применение и в образовательном процессе -
благодаря её использованию упрощается процесс восприятия информации.
Так как главной целью
была разработка трехмерной символики факультета с помощью средств OpenGL, то были представлены
общие сведения о этой библиотеке.
Я считаю, что
поставленные мною цели и основные задачи были выполнены. В результате на выходе
получилась программа, листинг которой представлен в приложении.
Список используемых
источников
1.
Сайт http://ru.wikipedia.org/wiki/Компьютерная_графика
.
Сайт http://dic.academic.ru/dic.nsf/enc_culture/1025/Компьютерная.
.
Р.Д. Верма. Введение в OpenGL. - М.: Горячая Линия - Телеком, 2004. - 304 с.
4.
Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL. - М.: Вильямс, 2001. -
592 с.
.
Френсис Хилл. OpenGL. Программирование компьютерной графики. - СПб.: Питер,
2002. - 1088 с.
6.
Мейсон Ву, Джеки Нейдер, Том Девис, Дейв Шрайнер OpenGL. Официальное
руководство программиста. - М.: ДиаСофтЮП, 2002. - 592 c.
<http://ru.wikipedia.org/wiki/Сортировка_вставками.%0D>7.
Ю. Тихомиров. OpenGL. Программирование трехмерной графики. - СПб.:
БХВ-Петербург, 1998. - 304 с.
. Ричард С. Райт,
мл., Бенджамин Липчак. OpenGL.
Суперкнига. - М.: Вильямс, 2006. - 1040 с.
. Сайт
http://nehe.gamedev.net/
.Сайт
http://slovari.yandex.ru/~книги/Символы,%20знаки,%20эмблемы/Ключ/
Приложение. Листинг программы
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#pragma comment (lib, "glaux.lib") ;int
photo_tex;_RGBImageRec* photo_image;int space_tex;_RGBImageRec*
space_image;CALLBACK resize(int width,int height) [9]
{(0,0,width,height);( GL_PROJECTION );();(-5,5, -5,5, 2,12);(
0,0,5, 0,0,0, 0,1,0 );( GL_MODELVIEW );
}CALLBACK display(void)
{double xRotate=0, yRotate=0, zRotate=0, radius=0;double dr =
0.01;( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
);(GL_TEXTURE_2D);d(1,1,1);(GL_TEXTURE_2D, space_tex );(GL_QUADS);d(0,0);
glVertex3d(-5,-5, 3); glTexCoord2d(0,1); glVertex3d(-5, 5, 3);d(1,1);
glVertex3d( 5, 5, 3);d(1,0); glVertex3d( 5,-5, 3);();();(0.1,0, radius);(0,0.1,
radius);(8,5,0);(0.5,1);(xRotate, 0, 0, 10 );(yRotate, 0, 2, 0 );(zRotate, 1,
0, 0 );(GL_TEXTURE_2D, photo_tex);(GL_QUADS);d(0,0); glVertex2d(-8,-8);d(0,1);
glVertex2d(-8, 8);d(1,1); glVertex2d( 8, 8);d(1,0); glVertex2d( 8,-8);();+=
0;+= 0;+= 0;-= dr;(radius<-3 || radius>0)
{= -dr;-= 2*dr;
}();(GL_TEXTURE_2D);();
}main()
{( 50, 10, 400, 400);( AUX_RGB | AUX_DEPTH | AUX_DOUBLE
);(TEXT("Курсовая работа") );(display);(resize);(GL_UNPACK_ALIGNMENT,
1);_image = auxDIBImageLoadW(L"photo1.bmp");_image =
auxDIBImageLoadW(L"space1.bmp");(1, &photo_tex);(1, &space_tex);(GL_TEXTURE_2D,
photo_tex );(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_NEAREST);D(GL_TEXTURE_2D, 0,
3,_image->sizeX,_image->sizeY,
, GL_RGB, GL_UNSIGNED_BYTE,_image->data);(GL_TEXTURE_2D,
space_tex );(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER, GL_NEAREST);D(GL_TEXTURE_2D, 0,
3,_image->sizeX,_image->sizeY,
, GL_RGB, GL_UNSIGNED_BYTE,_image->data);(display);
}