Машинная и компьютерная графика
Компьютерная или машинная графика — это вполне самостоятельная область человеческой деятельности со своими проблемами и спецификой. Компьютерная графика — это и новые эффективные технические средства для проектировщиков, конструкторов и исследователей, и программные системы и машинные языки, и новые научные, учебные дисциплины, родившиеся на базе синтеза таких наук как аналитическая, прикладная… Читать ещё >
Машинная и компьютерная графика (реферат, курсовая, диплом, контрольная)
Оглавление Введение
1. Общие сведения о OpenGL
2. Разработка логотипа
3. Разработка программы. Функции, использованные в программе
3.1 Построение модели
3.2 Возможность перемещения
3.3 Задание освещения
4. Результат выполнения работы Заключение Список используемых источников Приложение. Листинг программы
Введение
Компьютерная или машинная графика — это вполне самостоятельная область человеческой деятельности со своими проблемами и спецификой. Компьютерная графика — это и новые эффективные технические средства для проектировщиков, конструкторов и исследователей, и программные системы и машинные языки, и новые научные, учебные дисциплины, родившиеся на базе синтеза таких наук как аналитическая, прикладная, начертательная геометрия, программирование для ЭВМ, методы вычислительной математики и т. п. 1]
Актуальность работы: основными задачами машинной графики являются ввод (считывание) графической информации в ЭВМ, вывод ее из ЭВМ (формирование изображений), а также определенного рода переработка информации в компьютере. Таким образом, основные задачи машинной геометрии или, как говорят, автоматизированного геометрического моделирования и конструирования — синтез в ЭВМ и анализ геометрических объектов, решение задач геометрического характера.
При обработке информации, связанной с изображением, выделяют три основных направления:
1.Распознавание образов;
2.Обработка изображений;
3.Машинная и компьютерная графика.
Основная задача распознавания образов состоит в распознавании имеющегося изображения на формально понятном языке символов. Распознавание образов есть совокупность методов, позволяющих получать изображения, поданные на вход, либо отнесение некоторых изображений к некоторому классу.
Обработка изображений рассматривает задачи, в которых и входные, и выходные данные являются изображениями. Примерами обработки изображений могут служить:
1.Передача изображений вместе с удалением шумов и сжатием данных;
2.Переход от одного вида изображений к другому;
3.Контрастирование различных снимков.
Компьютерная или машинная графика применяется, когда исходной является информация не изобразительной природы, например, визуализация экспериментальных данных в виде графиков или гистограмм, вывод графики в компьютерных играх или синтез сцен для тренажеров. Можно сказать, что компьютерная графика рисует, опираясь на формульные представления, и имеет набор средств. 2]
Цель работы:
Средствами библиотеки OpenGL создать трехмерное изображение символики факультета.
Основные задачи:
Основными задачами являются:
— изучить принципы работы библиотеки OpenGL;
— научиться создавать приложения с применением трехмерной графики;
— создать трехмерное изображение символики факультета.
1. Общие сведения о OpenGL
Библиотека 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 ();
Пример:
PushMatrix ();
glBegin (GL_QUADS);
glVertex3d (3.0, 3.0, 1.0);
glVertex3d (3.0, 3.0, -1.0);
glVertex3d (-3.0, 3.0, -1.0);
glVertex3d (-3.0, 3.0, 1.0);
glEnd ();
glPopMatrix ();
3.2 Возможность перемещения
В программе используются модельно-видовые преобразования. К ним относят перенос, поворот и изменение масштаба вдоль координатных осей. Для проведения этих операций достаточно умножить на соответствующую матрицу каждую вершину объекта и получить измененные координаты этой вершины:
(x', y', z', 1) T = M * (x, y, z, 1) T
где M — матрица модельно-видового преобразования. Перспективное преобразование и проектирование производится аналогично. Сама матрица может быть создана с помощью следующих команд:
glTranslatef (xPos, yPos, zPos); // производит перенос объекта, прибавляя к координатам его вершин значения своих параметров.
glRotatef (xRot, 0.0f, 0.0f, 1.0f); // объект будет вращаться относительно оси Oz на угол xRot.
glRotatef (yRot, 1.0f, 0.0f, 0.0f); // объект будет вращаться относительно оси Ox на угол yRot
Все эти преобразования изменяют текущую матрицу, а поэтому применяются к примитивам, которые определяются позже. В случае, если надо, например, повернуть один объект сцены, а другой оставить неподвижным, удобно сначала сохранить текущую видовую матрицу в стеке командой glPushMatrix (), затем вызвать glRotate () с нужными параметрами, описать примитивы, из которых состоит этот объект, а затем восстановить текущую матрицу командой glPopMatrix ()[4].
Пример, использования этих функций в программе:
glPushMatrix ();
glRotated (2*time, 1,0,0);
glTranslated (-0.3,0,0);
glColor3d (1,1,1);
glPushMatrix ();
glRotated (120,0,1,0);
glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluDisk (quadObj, 0.6, 3.5, 30,20);
glPopMatrix ();
glPopMatrix (); [6]
3.3 Задание освещения
OpenGL дает богатые возможности разработчику моделировать реалистическую графику сцен, где присутствует свет. Предусмотрен механизм задания световых характеристик материала объекта, параметров источников света и модели освещения. Рассмотрим эти возможности
Для использования освещения сначала надо установить соответствующий режим вызовом команды glEnable (GL_LIGHTNING), а затем включить нужный источник командой glEnable (GL_LIGHT0)[5].
Для задания освещения в данной программе были объявлены следующие переменные и использованы следующие команды:
GLfloat fAmbLight[] = { 0.2f, 0.2f, 0.2f };
GLfloat fDiffLight[] = { 0.2f, 0.2f, 0.2f };
GLfloat fspec[] = { 0.5f, 0.5f, 0.5f };
glLightfv (GL_LIGHT0, GL_AMBIENT, fAmbLight);
glLightfv (GL_LIGHT0, GL_DIFFUSE, fDiffLight);
glLightfv (GL_LIGHT0, GL_SPECULAR, fspec);
Параметр fAmbLight определяет рассеянный цвет материала (цвет материала в тени).
Параметр fDiffLight определяет цвет диффузного отражения материала.
GLfloat fspec[] = { 0.5f, 0.5f, 0.5f };
GlMaterialfv (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/Компьютерная_графика
2. Сайт http://dic.academic.ru/dic.nsf/enc_culture/1025/Компьютерная.
3. Р. Д. Верма.
Введение
в OpenGL. — М.: Горячая Линия — Телеком, 2004. — 304 с.
4. Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL. — М.: Вильямс, 2001. — 592 с.
5. Френсис Хилл. OpenGL. Программирование компьютерной графики. — СПб.: Питер, 2002. — 1088 с.
6. Мейсон Ву, Джеки Нейдер, Том Девис, Дейв Шрайнер OpenGL. Официальное руководство программиста. — М.: ДиаСофтЮП, 2002. — 592 c.
7. Ю. Тихомиров. OpenGL. Программирование трехмерной графики. — СПб.: БХВ-Петербург, 1998. — 304 с.
8. Ричард С. Райт, мл., Бенджамин Липчак. OpenGL. Суперкнига. — М.: Вильямс, 2006. — 1040 с.
9. Сайт http://nehe.gamedev.net/
10.Сайт http://slovari.yandex.ru/~книги/Символы,%20знаки,%20эмблемы/Ключ/
Приложение. Листинг программы
#include
#include
#include
#include
#pragma comment (lib, «glaux.lib») ;
unsigned int photo_tex;
AUX_RGBImageRec* photo_image;
unsigned int space_tex;
AUX_RGBImageRec* space_image;
void CALLBACK resize (int width, int height) [9]
{
glViewport (0,0,width, height);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-5,5, -5,5, 2,12);
gluLookAt (0,0,5, 0,0,0, 0,1,0);
glMatrixMode (GL_MODELVIEW);
}
void CALLBACK display (void)
{
static double xRotate=0, yRotate=0, zRotate=0, radius=0;
static double dr = 0.01;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable (GL_TEXTURE_2D);
glColor3d (1,1,1);
glBindTexture (GL_TEXTURE_2D, space_tex);
glBegin (GL_QUADS);
glTexCoord2d (0,0); glVertex3d (-5,-5, 3); glTexCoord2d (0,1); glVertex3d (-5, 5, 3);
glTexCoord2d (1,1); glVertex3d (5, 5, 3);
glTexCoord2d (1,0); glVertex3d (5,-5, 3);
glEnd ();
glPushMatrix ();
glTranslated (0.1,0, radius);
glTranslated (0,0.1, radius);
glTranslated (8,5,0);
auxWireCylinder (0.5,1);
glRotated (xRotate, 0, 0, 10);
glRotated (yRotate, 0, 2, 0);
glRotated (zRotate, 1, 0, 0);
glBindTexture (GL_TEXTURE_2D, photo_tex);
glBegin (GL_QUADS);
glTexCoord2d (0,0); glVertex2d (-8,-8);
glTexCoord2d (0,1); glVertex2d (-8, 8);
glTexCoord2d (1,1); glVertex2d (8, 8);
glTexCoord2d (1,0); glVertex2d (8,-8);
glEnd ();
xRotate += 0;
yRotate += 0;
zRotate += 0;
radius -= dr;
if (radius<-3 || radius>0)
{
dr = -dr;
radius -= 2*dr;
}
glPopMatrix ();
glDisable (GL_TEXTURE_2D);
auxSwapBuffers ();
}
void main ()
AUX_DEPTH