Введение в OpenGL. Рисование простейших геометрических объектов. Работа с OpenGL при помощи библиотеки GLUT
Изучение основ использования OpenGL, которая является мультиплатформенной библиотекой. Рассмотрение основных шагов для построения программы: инициализации GLUT, установки параметров окна. Создание консольного приложения. Определение синтаксиса команд.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.06.2014 |
Размер файла | 18,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение в OpenGL. Рисование простейших геометрических объектов. Работа с opengl при помощи библиотеки GLUT
Цель работы. Изучение основ использования OpenGL и GLUT. Создание простейшего приложения с использованием OpenGL.
1. Что такое GLUT?
OpenGL является мультиплатформенной библиотекой, т.е. программы, написанные с помощью OpenGL, можно легко переносить на различные операционные системы, при этом получая один и тот же визуальный результат. Единственное, что плохо - это то, что для конкретной операционной системы необходимо по-своему производить настройку OpenGL. То есть, допустим, Вы написали OpenGL программу под Windows и захотели перенести её в Linux, код OpenGL должен перенестись без проблем, но операции с окнами, интерфейс управления, операции с устройствами ввода/вывода нужно заново переписать уже под другую операционную систему - Linux. К счастью, существует специальная мультиплатформенная библиотека, позволяющая решить вышеописанные проблемы. И называется эта библиотека - GLUT.
2. Основные шаги для построения минимальной программы
Прежде всего необходимо научиться самому основному - это созданию окна, в котором можно будет рисовать с помощью OpenGL. Минимальная программа, которая создает окно и что-нибудь рисует там, состоит из следующих шагов:
1. Инициализация GLUT
2. Установка параметров окна.
3. Создание окна.
4. Установка функций, отвечающих за рисование в окне и изменение формы окна.
5. Вход в главный цикл GLUT.
Рассмотрим все 5 пунктов поподробнее.
1. Инициализация GLUT производится командой:
void glutInit(int *argcp, char **argv);
Первый параметр представляет собой указатель на количество аргументов в командной строке, а второй - указатель на массив аргументов. Обычно эти значения берутся из главной функции программы: int main(int argc, char *argv[]).
2. Установка параметров окна содержит в себе несколько этапов. Прежде всего, необходимо указать размеры окна:
void glutInitWindowSize(int width, int height);
Первый параметр width - ширина окна в пикселях, второй height - высота окна в пикселях. Если эту команду опустить, то GLUT сам установит размеры окна по умолчанию, обычно это 300x300.
Далее можно задать положение создаваемого окна относительно верхнего левого угла экрана. Делается это командой:
void glutInitWindowPosition(int x, int y);
Необходимо также установить для окна режим отображения информации, т. е. установить для окна такие параметры, как: используемая цветовая модель, количество различных буферов, и т.д. Для этого в GLUT существует команда:
void glutInitDisplayMode(unsigned int mode);
У команды имеется единственный параметр, который может быть представлен одной из следующих констант или комбинацией этих констант с помощью побитового ИЛИ.
Константа |
Значение |
|
GLUT_RGB |
Для отображения графической информации используются 3 компоненты цвета RGB |
|
GLUT_RGBA |
То же что и RGB, но используется также 4 компонента ALPHA (прозрачность) |
|
GLUT_INDEX |
Цвет задается не с помощью RGB компонентов, а с помощью палитры. Используется для старых дисплеев, где количество цветов, например, 256 |
|
GLUT_SINGLE |
Вывод в окно осуществляется с использованием 1 буфера. Обычно используется для статического вывода информации |
|
GLUT_DOUBLE |
Вывод в окно осуществляется с использованием 2 буферов. Применяется для анимации, чтобы исключить эффект мерцания |
|
GLUT_ACCUM |
Использовать также буфер накопления (Accumulation Buffer). Этот буфер применяется для создания специальных эффектов, например отражения и тени |
|
GLUT_ALPHA |
Использовать буфер ALPHA. Этот буфер, как уже говорилось, используется для задания 4-го компонента цвета - ALPHA. Обычно применяется для таких эффектов, как прозрачность объектов и антиалиасинг |
|
GLUT_DEPTH |
Создать буфер глубины. Этот буфер используется для отсечения невидимых линий в 3D пространстве при выводе на плоский экран монитора |
|
GLUT_STENCIL |
Буфер трафарета используется для таких эффектов, как вырезание части фигуры, делая этот кусок прозрачным. Например, наложив прямоугольный трафарет на стену дома, Вы получите окно, через которое можно увидеть, что находится внутри дома |
|
GLUT_STEREO |
Этот флаг используется для создания стереоизображений. Используется редко, так как для просмотра такого изображения нужна специальная аппаратура |
Вот пример использования этой команды: void glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
3. Создание окна. После того как окно установлено, необходимо его создать.
int glutCreateWindow(const char *title);
Эта команда создаёт окно с заголовком, который Вы укажете в качестве параметра, и возвращает HANDLER окна в виде числа int. Этот HANDLER обычно используется для последующих операций над этим окном, таких как изменение параметров окна и закрытие окна.
4. Установка функций, отвечающих за рисование в окне и изменение формы окна.
После того как окно, в которое будет выводиться графическая информация, подготовлено и создано, необходимо связать с ним процедуры, которые будут отвечать за вывод графической информации, следить за размерами окна, следить за нажатиями на клавиши и т.д. Самая первая и самая необходимая функция, которую мы рассмотрим, отвечает за рисование. Именно она всегда будет вызываться операционной системой, чтобы нарисовать (перерисовать) содержимое окна. Итак, задаётся эта функция командой:
void glutDisplayFunc(void (*func)(void));
Единственный параметр этой функции - это указатель на функцию, которая будет отвечать за рисование в окне. Например, чтобы функция void Draw(void), определенная в вашей программе, отвечала за рисование в окне, надо присоединить ее к GLUT следующим образом: glutDisplayFunc(Draw);
И ещё одна функция, которая является важной - это функция, которая отслеживает изменения окна. Как только у окна изменились размеры, необходимо перестроить вывод графической информации уже в новое окно с другими размерами. Если этого не сделать, то, например, увеличив размеры окна, вывод информации будет производиться в старую область окна, с меньшими размерами. Определить функцию, отвечающую за изменение размеров окна, нужно следующей командой:
void glutReshapeFunc(void (*func)(int width, int height));
Единственный параметр - это указатель на функцию, отвечающую за изменение размеров окна, которая как видно должна принимать два параметра width и height, соответственно ширина и высота нового (измененного) окна. мультиплатформенный glut программа
5. Вход в главный цикл GLUT.
Ну и последнее, что необходимо сделать, чтобы запустить программу - это войти в так называемый главный цикл GLUT. Этот цикл запускает на выполнение так называемое сердце GLUT, которое обеспечивает взаимосвязь между операционной системой и теми функциями, которые отвечают за окно, получают информацию от устройств ввода/вывода. Для того чтобы перейти в главный цикл GLUT, надо выполнить единственную команду:
void glutMainLoop(void);
Вот в принципе основные шаги для самой простейшей GLUT программы. Ниже приведена простейшая программа с использованием средств библиотеки GLUT, которая рисует в окне изображение сферы.
Команда glFlush() гарантирует, что команда рисования будет выполнена немедленно, а не сохранена в буфере.
И ещё, прежде чем использовать функции из GLUT, необходимо к программе подключить заголовок: #include <GL/glut.h>.
3. Создание консольного приложения, использующего OpenGL
Самым простым объектом, с помощью которого можно увидеть всю мощь OpenGL, является сфера. Давайте попытаемся ее изобразить. Для этого надо создать новый проект в VisualC++, выполнить следующие действия:
1. Запустите MSVisualC++6.0.
2. Щелкните меню File->New->Win32 Console Application.
3. Выберите каталог и имя проекта, впишите - sphere, щелкните OK.
4. Выберите An Empty Project, щелкните Finish.
5. Создайте в проекте файл sphere.c.
6. Щелкните Build->Set Active Configuration и установите тип проекта sphere - Win32 Release
7. Далее, щелкайте Project->Settings->Link->Object/library modules и добавьте туда opengl32.lib, glu32.lib и gllut32a.lib.
8. Теперь откомпилируйте и запустите Вашу программу. Меню Build->Execute Sphere.exe
Текст программы Sphere.exe:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <GL/glut.h>
void resize(int width,int height)
{
}
void display(void)
{
glColor3d(1,1,0);
glutSolidSphere(1.0, 25, 25);
glFlush();
}
void init(void)
{
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glClearColor (0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-5.0,5.0,-5.0,5.0,2.0,12.0);
gluLookAt( 0,0,5, 0,1,0, 0,1,0 );
glMatrixMode( GL_MODELVIEW);
}
int main(int argc,char ** argv)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(50,10);
glutInitWindowSize(400,400);
glutCreateWindow(«Hello»);
glutReshapeFunc(resize);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
4. Синтаксис команд OpenGl
Командами в OpenGl называются функции или процедуры. Для их описания используется следующий синтаксис:
type glCommand_name[1 2 3 4][b s i f d ub us ui][v](type1 arg1,-,typeN argN)
gl - это имя библиотеки, в которой описана эта функция: для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно.
Command_name имя команды [1 2 3 4]число аргументов команды [b s i f d ub us ui ]тип аргумента:
Доступны следующие типы:
b - GLbyte байт; s - GLshort короткое целое; i - GLint целое; f - GLfloat дробное; d - GLdouble дробное с двойной точностью; ub - GLubyte беззнаковый байт; us - GLushort беззнаковое короткое целое; ui - GLuint беззнаковое целое; v - массив из n параметров указанного типа;
[v] - наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений.
Символы в квадратных скобках в некоторых названиях не используются. Например, команда glVertex2i() описана как базовая в библиотеке OpenGL, и использует в качестве параметров два целых числа, а команда glColor3fv() использует в качестве параметра указатель на массив из трех вещественных чисел.
Ниже приведены примеры использования команд OpenGL с различными типами аргументов.
double array[] = {0.5, 0.75, 0.3, 0.7};
...
glColor3dv(array);
glColor3ub(200,100,0); // приводится к 200/256, 100/256, 0/256
glColor3d(0.25,0.25,0); // темно-желтый
glColot3ub(0,100,0); // темно-зеленый
glColor3ub(0,0,255); // синий
Задание на лабораторную работу
1. Ввести и отладить программу, приведенную в п.3.
2.Заменить функцию glutSolidSphere на функцию, из указанных ниже с соответсвующими параметрами. Значения параметров устанавливайте порядка единицы - 0,5…1,7. Если Вы укажете слишком маленький размер, фигуру будет плохо видно; если слишком большой, то она получится урезанной. Это связано с тем, что ее край как бы вылезет из монитора.
glutSolidCube(width) // куб
glutSolidTorus(r,R) // тор
glutSolidCylinder(r,height) // цилиндр
glutSolidCone(r,height) // конус
glutSolidIcosahedron(width) // многогранники
glutSolidOctahedron(width)
glutSolidTetrahedron(width)
glutSolidDodecahedron(width)
glutSolidTeapot(width) // рисует чайник
3. С помощью вышеуказанных функций нарисовать проволочные фигуры, заменив и имена функций Solid на Wire.
Размещено на Allbest.ru
...Подобные документы
Программный код OpenGL. Синтаксис команд OpenGL. OpenGL как конечный автомат. Конвейер визуализации OpenGL. Библиотеки, относящиеся к OpenGL. Библиотека OpenGL. Подключаемые файлы. GLUT, инструментарий утилит библиотеки OpenGL.
курсовая работа [304,9 K], добавлен 01.06.2004Ознакомление с интерфейсом, основными возможностями и преимуществами использования программы OpenGL - популярной библиотекой для работы с 2D и 3D графикой. Рассмотрение назначения, базовых компонент и правил инициализации программного движка DirectX.
презентация [19,4 K], добавлен 14.08.2013Общие понятия о гироскопах, их классификация и применение. Механические гироскопы, свойства трехстепенного роторного гироскопа. Создание проекта "Гироскоп Фуко" средствами OpenGL и начальная настройка среды разработки. Инициализация объекта вывода и Glut.
курсовая работа [491,9 K], добавлен 18.11.2013Программирование приложения с использованием библиотеки OpenGL и функции для рисования геометрических объектов. Разработка процедуры визуализации трехмерной сцены и интерфейса пользователя. Логическая структура и функциональная декомпозиция проекта.
курсовая работа [1,1 M], добавлен 23.06.2011Назначение и стандарты реализации OpenGL для Windows, порядок подключения графической библиотеки. Основные функции и синтаксис команд. Рисование примитивов, видовые и аффинные преобразования. Моделирование двумерных графических объектов и анимации.
лабораторная работа [35,0 K], добавлен 04.07.2009Создание программы, с помощью библиотеки OpenGL рисующей проволочный чайник с поворотом рисунка вокруг осей X, Y, Z. Построение отрографической проекции. Установка области отображения. Функция обработки сообщений с клавиатуры. Главный цикл приложения.
контрольная работа [151,2 K], добавлен 21.01.2011Суть программирования с использованием библиотеки OpenGL, его назначение, архитектура, преимущества и базовые возможности. Разработка приложения для построения динамического изображения трехмерной модели объекта "Компьютер", руководство пользователя.
курсовая работа [866,8 K], добавлен 22.06.2011Пpoгpaммный кoд и синтaкcиc команд OpenGL. Coздaниe эффeктa тyмaнa. Paзpaбoткa пpoцeдypы визyaлизaции тpexмepнoй cцeны. Paзpaбoткa пoдcиcтeмы yпpaвлeния coбытиями и интepфeйca пoльзoвaтeля. Фyнкциoнaльнoe нaзнaчeниe, структура и листинг программы.
курсовая работа [1,3 M], добавлен 21.06.2011Разработка трехмерной модели приложения "Гоночный автомобиль" на языке С++ с использованием библиотеки OpenGL и MFC, создание программы в среде Visual Studio 6.0. Информационное обеспечение, логическая структура и функциональная декомпозиция проекта.
курсовая работа [3,9 M], добавлен 29.06.2011Определение области значений функции y=sin(x) и построение графика по точкам с помощью основных конструкций библиотеки OpenGL. Функции вырисовки на экране, обработки сообщений с клавиатуры. Установка размеров области отображения. Главный цикл приложения.
контрольная работа [87,2 K], добавлен 21.01.2011Основы работы с графиков средствами OpenGL в C#. Ее спецификации, принципы и возможности. Direct3D как самостоятельная часть библиотеки Microsoft DirectX, которая отвечает за графику и вывод графической информации. Независимость от языка программирования.
курсовая работа [2,1 M], добавлен 17.02.2013Описание используемых функций и директивы Invoke: get module handle, get command line, win main, exit process, load menu. Архитектура OpenGL, основные задачи. Текст программы: краткое описание, opengl.inc, opngl.asm. Результаты выполнения программы.
курсовая работа [215,6 K], добавлен 18.05.2014Работа с цветом с помощью графической библиотеки OpenGL. Программа, отображающая квадрат, с меняющимся цветом, в зависимости от изменения градиентов (R,G,B), треугольник, вершины которого имеют различные цвета, прямоугольную полосу в виде спектра.
контрольная работа [228,6 K], добавлен 21.01.2011Общие сведения о OpenGL и его использование для разработки логотипа. Разработка программы: функции, их использование в программе. Построение модели и возможность перемещения объектов. Задание освещения объектов моделирования и проработка элементов фона.
курсовая работа [447,7 K], добавлен 14.07.2012Поняття та сфери використання тривимірної графіки. Описання та характеристика можливостей бібліотеки OpenGL. Загальний опис інтерфейсу мови програмування Borland C++, лістинг програми, що демонструє її можливості. Розрахунок витрат на виконання проекту.
дипломная работа [1,6 M], добавлен 24.06.2015Основы программирования с использованием библиотеки OpenGL. Приложение для построения динамического изображения модели объекта "Батискаф": разработка процедуры визуализации трехмерной схемы, интерфейса пользователя и подсистемы управления событиями.
курсовая работа [1,4 M], добавлен 26.06.2011Програма створення графіки OpenGl. Алгоритми зафарбовування від внутрішньої точки до границь довільного контуру. Алгоритм обчислення координати точки кривої Без'є за заданними параметрами. Створення програм OpenGL мовою С, C++ у середовищі Windows.
контрольная работа [285,3 K], добавлен 19.09.2009Создание программы на языке C++ с использованием графических библиотек OpenGL в среде Microsoft Visual Studio. Построение динамического изображения трехмерной модели объекта "Нефтяная платформа". Логическая структура и функциональная декомпозиция проекта.
курсовая работа [1,8 M], добавлен 23.06.2011Створення зображення (візуалізація) як завдання комп'ютерної графіки. Методи та алгоритми візуалізації. Трансформація об’єктів в бібліотеці OpengL. Побудова довільної кількості довільного розміру точок на поверхні форми засобами бібліотеки OpengL.
контрольная работа [2,3 M], добавлен 10.09.2009Об'єктно-орієнтоване програмування за допомогою Delphi. Основні види проекцій. Поняття контексту відображення та пристрою в бібліотеці OpenGL. Побудова сфери засобами OpenGL: лістинг програми. Алгоритм операції збільшення та зменшення зображення.
контрольная работа [268,6 K], добавлен 20.09.2009