Автор работы: Пользователь скрыл имя, 17 Декабря 2013 в 17:48, курсовая работа
OpenGL — это мощный программный интерфейс, применяемый для получения высококачественных, программно генерируемых изображений и интерактивных приложений, использующих двух- и трехмерные объекты, а также растровые изображения.
OpenGL - это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире. Ещё в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга.
Общие сведения о OpenGL…………………………………………………………4
1 Эскиз логотипа………….……………………………………………………...6
2 Разработка программы. Функции, использованные в программе…………..7
3 Результат выполнения программы….…………………………………….…12
4 Заключение…………………………………………………………………….15
5 Список используемых источников……………
Подп. и дата
Изм.
Лист
№ докум.
Подпись
Дата
Лист
3
ТГТУ – 230400.264 ПЗ
Разраб.
Попов И.И.
Провер.
Репина Ю.Е.
Реценз.
Н. Контр.
Утверд.
Иванова О.Г.
ГГ
Хранение и обработка данных с использование линейных списков
Лит.
Листов
20
БИС-32
Подп. и дата
Изм.
Лист
№ докум.
Подпись
Дата
Лист
ТГТУ – 230400.264 ПЗ
СОДЕРЖАНИЕ
Общие
сведения о OpenGL…………………………………………………………
1 Эскиз логотипа………….……………………………………………
2 Разработка программы. Функции, использованные в программе…………..7
3 Результат выполнения программы….…………………………………….…12
4 Заключение……………………………………………………
5 Список используемых источников……………………………………….….16
Приложение……………………………………………………
ОБЩИЕ СВЕДЕНИЯ О OPENGL
OpenGL — это мощный программный интерфейс, применяемый для получения высококачественных, программно генерируемых изображений и интерактивных приложений, использующих двух- и трехмерные объекты, а также растровые изображения.
OpenGL - это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире. Ещё в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга. Таким образом была разработана графическая библиотека IRIS GL. На основе библиотеки IRIS GL, в 1992 году был разработан и утверждён графический стандарт OpenGL. Разработчики OpenGL - это крупнейшие фирмы разработчики как оборудования так и программного обеспечения: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.
OpenGL переводится как Открытая Графическая Библиотека (Open Graphics Library), это означает, что OpenGL - это открытый и мобильный стандарт. Программы, написанные с помощью OpenGL можно переносить практически на любые платформы, получая при этом одинаковый результат, будь это графическая станция или суперкомпьютер. OpenGL освобождает программиста от написания программ для конкретного оборудования. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то библиотека выполняет её программно.
Что же представляет из себя OpenGL? С точки зрения программиста OpenGL - это программный интерфейс для графических устройств, таких как графические ускорители. Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг. Говоря более простым языком, Вы определяете объекты, задаёте их местоположение в трёхмерном пространстве, определяете другие параметры (поворот, растяжение, ...), задаёте свойства объектов(цвет, текстура, материал, ...), положение наблюдателя, а библиотека OpenGL позаботится о том чтобы отобразить всё это на экране. Поэтому можно сказать, что библиотека OpenGL является только воспроизводящей (Rendering) библиотекой, потому что она не поддерживает какие либо периферийные устройства, таких как клавиатура и мышь, она также не поддерживает никаких менеджеров окон. Программист должен сам заботится о том как обеспечить взаимодействие периферийных устройств с библиотекой OpenGL.
Цель курсовой работы – разработать логотип Института ИАиИТ средствами OpenGL
Для достижения этой цели определены следующие задачи:
1 Эскиз логотипа
Рисунок 1 – Эскиз
2 Разработка программы. Функции, использованные в программе
Подключаем необходимые
#include <GL\glut.h>
int movex=0,movey=0;
Чтобы упростить однотипные действия при рисовании трёхмерных прямоугольников, из которых будет состоять логотип, напишем следующую функцию, которая при задании x и y координат передней грани, глубины и цвета будет автоматически дорисовывать остальные грани фигуры:
void drawcube(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,float z, float cr1,float cg1,float cb1,float cr2,float cg2,float cb2){
z=z/2;
glBegin(GL_QUADS);
glColor3f(cr1,cg1,cb1);
//передняя грань
glVertex3f(x4,y4,z);
glVertex3f(x3,y3,z);
glVertex3f(x2,y2,z);
glVertex3f(x1,y1,z);
//задняя грань
glVertex3f(x4,y4,-z);
glVertex3f(x3,y3,-z);
glVertex3f(x2,y2,-z);
glVertex3f(x1,y1,-z);
//верхняя грань
glColor3f(cr2,cg2,cb2);
glVertex3f(x1,y1,z);
glVertex3f(x1,y1,-z);
glVertex3f(x2,y2,-z);
glVertex3f(x2,y2,z);
//нижняя грань
glVertex3f(x3,y3,-z);
glVertex3f(x3,y3,z);
glVertex3f(x4,y4,z);
glVertex3f(x4,y4,-z);
//левая грань
glVertex3f(x1,y1,z);
glVertex3f(x1,y1,-z);
glVertex3f(x4,y4,-z);
glVertex3f(x4,y4,z);
//правая грань
glVertex3f(x2,y2,-z);
glVertex3f(x2,y2,z);
glVertex3f(x3,y3,z);
glVertex3f(x3,y3,-z);
glEnd();
}
Устанавливаем освещение и задаем свойства материалов [3]:
void init(void)
{
glClearColor(0.3,0.5,0.6,0.0);
glShadeModel(GL_SMOOTH);
GLfloat light_ambient[]={0.7, 0.7, 0.7, 0.0};
GLfloat light_diffuse[]={1.0,1.0,1.0,
GLfloat light_specular[]={0.2,0.2,0.2,
GLfloat light_position[]={0.0,10.0,3.
GLfloat mat_specular[]={0.8,0.8,0.8,0.
GLfloat mat_shininess[]={50.0};
glMaterialfv(GL_FRONT,GL_
glMaterialfv(GL_FRONT,GL_
glLightfv(GL_LIGHT0,GL_AMBIENT
glLightfv(GL_LIGHT0,GL_DIFFUSE
glLightfv(GL_LIGHT0,GL_
glLightfv(GL_LIGHT0,GL_
glLightModeli(GL_LIGHT_MODEL_
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
Параметры окна [3]:
void reshape(int w, int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0,(GLfloat) w/ (GLfloat) h,1.0,30.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-9.0);
gluLookAt(0.0,0.0,8.0,0.0,0.
}
Отображение созданного рисунка [4]:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|G
glPushMatrix();
glRotatef((GLfloat)movex,0.0,
glRotatef((GLfloat)movey,1.0,
//подставка
drawcube(-1.0,-4.0,//
1.0,-4.0,//координаты x2 y2
2.0,-4.7,//координаты x3 y3
-2.0,-4.7,//координаты x4 y4
0.6,//глубина фигуры
0.9,0.9,0.9,//цвет передней и задней граней
0.3,0.3,0.3);//цвет боковых граней
//рамка монитора
drawcube(-5.0,3.5,5.0,3.5,4.0,
drawcube(-5.0,3.5,-4.0,2.5,-4.
drawcube(-4.0,-2.5,2.0,-2.5,1.
//стрелка
drawcube(-3.6,2.1,5.5,2.1,7.0,
drawcube(-3.6,0.0,7.0,0.0,5.5,
//буквы
glTranslatef(0.0,0.0,0.5);
drawcube(-1.6,1.9,-0.6,1.9,-1.
drawcube(0.3,1.9,3.3,1.9,3.05,
drawcube(1.0,1.0,2.0,1.0,1.25,
glPopMatrix();
glutSwapBuffers();
}
Реакция на клавиатуру [8]:
void keyboard(unsigned char key,int x, int y)
{
switch(key)
{
case 'd':
movex=(movex+3)%360;
glutPostRedisplay();
break;
case 'a':
movex=(movex-3)%360;
glutPostRedisplay();
break;
case 'w':
movey=(movey-3)%360;
glutPostRedisplay();
break;
case 's':
movey=(movey+3)%360;
glutPostRedisplay();
break;
case 'q':
movex=0;
movey=0;
glutPostRedisplay();
break;
default:
break;
}
}
Тело программы [10]:
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_
glutInitWindowSize(500,500);
glutInitWindowPosition(100,
glutCreateWindow("Logo");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
5 Результат выполнения программы
Рисунок 2 – Первоначальное положение
Рисунок 3 – Вращение по оси Y
Рисунок 4 – Вращение по оси X
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы были выполнены следующие задачи:
1. Разработан логотип
2. Разработана программа
Вследствие этого была достигнута цель курсовой работы – разработанный логотип реализован средствами OpenGL в программном коде С++. Программа выводит на экран созданный логотип. Есть возможность рассмотреть логотип со всех сторон, управляя клавишами «w», «a», «s», «d», «a».
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. Гайдуков, С. И. OpenGl. Профессиональное
программирование трехмерной графики
на C++. [Электронный ресурс] / С. И. Гайдуков.
– Режим доступа: http://books.google.ru/books/
2. Энджел, Э. Интерактивная компьютерная графика. Вводный курс на базе OpenGL: учеб. / Э. Энджел. – В.: Вильямс, 2001. – 592 с.
3. Хилл, Ф. Программирование компьютерной графики. Для профессионалов: учеб. / Ф.Хилл. – СПБ.: Питер, 2002. – 1082 с.
4. Ричард С.Р. OpenGL. Суперкнига: учеб. / С.Р. Ричард, Б. Липчак. – В.: Вильямс, 2006. – 1040 с.
5. Баяковский Ю.М. Графическая библиотека OpenGL: учеб. / Ю.М. Баяковский, А.В. Игнатенко, А.И. Фролов. – М.: Москва, 2003. – 130 с.
6. Херн, Д. Компьютерная графика и стандарт OpenGL: учеб. / Д. Херн, П. Бейкер. – В.: Вильямс, 2005. – 1168 с.
7. Ву, М. OpenGL. Руководитель по программированию: учеб. / М. Ву, Т. Девис, Д. Нейдер. – СПБ.: Питер, 2006. – 624 с.
8. Уроки OpenGL. [Электронный ресурс] – Режим доступа: http://masandilov.ru/opengl/
9. Д. Шрейнер. OpenGL Programming Guide: учеб. / Д. Шрейнер, А. Александреску. – А.: Addison-Wesley, 2013. – 984 с.
10. А.В. Боресков Графика трехмерной компьютерной игры на основе OpenGL : учеб. / А.В. Боресков — М.: Диалок-МИФИ, 2004. — 385 с.
ПРИЛОЖЕНИЕ
//Курсовая_работа_МиССГИ.exe
//Выполнил студент группы БИС-32 Попов И.И.
#include <GL\glut.h>
int movex=0,movey=0;
void drawcube(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,float z, float cr1,float cg1,float cb1,float cr2,float cg2,float cb2){
z=z/2;
glBegin(GL_QUADS);
glColor3f(cr1,cg1,cb1);
//передняя грань
glVertex3f(x4,y4,z);
glVertex3f(x3,y3,z);
glVertex3f(x2,y2,z);
glVertex3f(x1,y1,z);
//задняя грань
glVertex3f(x4,y4,-z);
glVertex3f(x3,y3,-z);
glVertex3f(x2,y2,-z);
glVertex3f(x1,y1,-z);
//верхняя грань
glColor3f(cr2,cg2,cb2);
glVertex3f(x1,y1,z);
glVertex3f(x1,y1,-z);
glVertex3f(x2,y2,-z);
glVertex3f(x2,y2,z);
//нижняя грань
glVertex3f(x3,y3,-z);
glVertex3f(x3,y3,z);
glVertex3f(x4,y4,z);
glVertex3f(x4,y4,-z);
//левая грань
glVertex3f(x1,y1,z);
glVertex3f(x1,y1,-z);
glVertex3f(x4,y4,-z);
glVertex3f(x4,y4,z);
//правая грань
glVertex3f(x2,y2,-z);
glVertex3f(x2,y2,z);
glVertex3f(x3,y3,z);
glVertex3f(x3,y3,-z);
glEnd();
}
void init(void)
{
glClearColor(0.3,0.5,0.6,0.0);
glShadeModel(GL_SMOOTH);
GLfloat light_ambient[]={0.7, 0.7, 0.7, 0.0};
GLfloat light_diffuse[]={1.0,1.0,1.0,
GLfloat light_specular[]={0.2,0.2,0.2,
GLfloat light_position[]={0.0,10.0,3.
GLfloat mat_specular[]={0.8,0.8,0.8,0.
GLfloat mat_shininess[]={50.0};
glMaterialfv(GL_FRONT,GL_
glMaterialfv(GL_FRONT,GL_
glLightfv(GL_LIGHT0,GL_AMBIENT
glLightfv(GL_LIGHT0,GL_DIFFUSE
glLightfv(GL_LIGHT0,GL_
glLightfv(GL_LIGHT0,GL_
glLightModeli(GL_LIGHT_MODEL_
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
//Параметры окна
void reshape(int w, int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0,(GLfloat) w/ (GLfloat) h,1.0,30.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-9.0);
gluLookAt(0.0,0.0,8.0,0.0,0.
}
////отображение рисунка
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|G
glPushMatrix();
glRotatef((GLfloat)movex,0.0,
glRotatef((GLfloat)movey,1.0,
//подставка
drawcube(-1.0,-4.0,//
1.0,-4.0,//координаты x2 y2
2.0,-4.7,//координаты x3 y3
-2.0,-4.7,//координаты x4 y4
0.6,//глубина фигуры
0.9,0.9,0.9,//цвет передней и задней граней
0.3,0.3,0.3);//цвет боковых граней
//рамка монитора
drawcube(-5.0,3.5,5.0,3.5,4.0,
drawcube(-5.0,3.5,-4.0,2.5,-4.
drawcube(-4.0,-2.5,2.0,-2.5,1.
//стрелка
drawcube(-3.6,2.1,5.5,2.1,7.0,
drawcube(-3.6,0.0,7.0,0.0,5.5,
//буквы
glTranslatef(0.0,0.0,0.5);
drawcube(-1.6,1.9,-0.6,1.9,-1.
drawcube(0.3,1.9,3.3,1.9,3.05,
drawcube(1.0,1.0,2.0,1.0,1.25,
glPopMatrix();
glutSwapBuffers();
}
//реакция клавиатуру
void keyboard(unsigned char key,int x, int y)
{
switch(key)
{
case 'd':
movex=(movex+3)%360;
glutPostRedisplay();
break;
case 'a':
movex=(movex-3)%360;
glutPostRedisplay();
break;
case 'w':
movey=(movey-3)%360;
glutPostRedisplay();
break;
case 's':
movey=(movey+3)%360;
glutPostRedisplay();
break;
case 'q':
movex=0;
movey=0;
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_
glutInitWindowSize(500,500);
glutInitWindowPosition(100,
glutCreateWindow("Logo");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
Инв. № дубл.