Лекция 1 (19.09.2013). Основные возможности OpenGL Набор базовых примитивов: точки, линии, многоугольники и т.п. Видовые и координатные преобразования.

Презентация:



Advertisements
Похожие презентации
Лекция 1 OpenGL («Open Graphics Library») - программный интерфейс (API) к графической плате. Утвержден в 1992 году Основой стандарта стала библиотека IRIS.
Advertisements

Мультилиния. Построение мультилинии. Создание стилей мультилиний.Редактирование мультилинии.
OpenGL и аппаратные ускорители графики Астана 2004 Лекция 8.
Компьютерная геометрия и графика. Лекция 7. План занятия: Задача удаления невидимых линий. Алгоритм плавающего горизонта.
Тема 3D моделирование в САПР AutoCAD Построение, редактирование и представление трёхмерных объектов на плоскости и в пространстве Изометрическое черчение.
OpenGL Лекция 4 ( ). void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr ) size определяет число координат вершины (2, 3,
OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
Компьютерная визуализация Лекция 3 СПбГУ ИТМО 2004.
Познакомиться с созданием рисунков в QBasic, изучить графические примитивы, научиться их применять на практике.
Applets Inna Issajeva. Апплеты это маленькие приложения, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются.
Графика в QBasic Qbasic является векторным графическим редактором, т.е. графические элементы строятся (вычисляются) по формулам. Для этого достаточно задать.
МАССИВЫ 4 Определение 4 Описание 4 Обращение к элементам массива 4 Связь массивов с указателями 4 Примеры программ.
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
Машинная графика. Введение. Что такое машинная графика? Планы на семестр и проставление баллов Виды машинной графики Основные компоненты сцены Инструкция.
Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
Графические возможности языка Visual Basic. Рисование графических примитивов. На объектах «форма» Form и «графическое окно» PictureBox можно рисовать.
Вывод текста [графический режим]. Текстовое сообщение OutText('текст'), где переменная 'текст' типа String - выводит текстовую строку, начиная с текущего.
Машинная графика Операторы построения точки, отрезка, прямоугольника, закрашенного прямоугольника.
Астана ( )Компьютерная графика (лекция 6) ВВЕДЕНИЕ В OPENGL Лекция 6.
Программа Графика в циклах Оказывается для получения всех этих картинок нужно знать всего три вещи 1.Графические операторы – рисование линии, окружности,
Транксрипт:

Лекция 1 ( )

Основные возможности OpenGL Набор базовых примитивов: точки, линии, многоугольники и т.п. Видовые и координатные преобразования Удаление невидимых линий и поверхностей (z-буфер) Использование сплайнов для построения линий и поверхностей Наложение текстуры и применение освещения Добавление специальных эффектов: тумана, изменение прозрачности,сопряжение цветов (blending), устранение ступенчатости (anti-aliasing).

Библиотеки OpenGL На данный момент реализация OpenGL включает в себя несколько библиотек (описание базовых функций OpenGL, GLU,GLUT,GLAUX и другие). Библиотека GLAUX уступает по популярности написанной несколько позже библиотеке GLUT, хотя они предоставляют примерно одинаковые возможности. В состав библиотеки GLU вошла реализация более сложных функций, таких как набор популярных геометрических примитивов (куб, шар, цилиндр, диск), функции построения сплайнов, реализация дополнительных операций над матрицами и т.п. Все они реализованы через базовые функции OpenGL.

Структура программы на OpenGL Инициализация OpenGL Расстановка объектов Главный цикл: обработка нажатий клавиш, перерисовка карты при движении, … Завершить работу? Освобождение памяти Да Нет

Названия команд type glCommand_name[ ][b s i f d ub us ui][v](type1 arg1,…,typeN argN) gl это имя библиотеки, в которой описана эта функция: для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно. Command_name имя команды [ ]число аргументов команды [b s i f d ub us ui ]тип аргумента: символ b означает тип GLbyte (аналог char в С\С++), символ f тип GLfloat (аналог float), символ i– тип GLint(аналог int) и так далее. Полный список типов и их описание можно посмотреть в файле gl.h [v] наличие этого символа показывает, что в качестве параметров функции используется указатель на массив значений

Инициализация OpenGL Инициализация проводится с помощью функции glutInit(int *argc, char **argv) Эта функция проводит необходимые начальные действия для построения окна приложения, и только несколько функций GLUT могут быть вызваны до нее. К ним относятся: glutInitWindowPosition (int x, int y) glutInitWindowSize (int width, int height) glutInitDisplayMode (unsigned int mode) Первые две функции задают соответственно положение и размер окна, а последняя функция определяет различные режимы отображения информации, которые могут совместно задаваться с использованием операции побитового или(|):

Режимы отображения GLUT_RGBA Режим RGBA. Используется по умолчанию, если не указаны явно режимы GLUT_RGBA или GLUT_INDEX. GLUT_RGB То же, что и GLUT_RGBA. GLUT_INDEX Режим индексированных цветов (использование палитры). Отменяет GLUT_RGBA. GLUT_SINGLE Окно с одиночным буфером. Используется по умолчанию. GLUT_DOUBLE Окно с двойным буфером. Отменяет GLUT_SINGLE. GLUT_DEPTH Окно с буфером глубины.

Виды буферов Двойной буфер обычно используют для анимации, сначала рисуя что-нибудь в одном буфере, а затем меняя их местами, что позволяет избежать мерцания. Буфер глубины или z-буфер используется для удаления невидимых линий и поверхностей.

Листинг инициализации glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB); int cx = GetSystemMetrics(SM_CXFULLSCREEN); int cy = GetSystemMetrics(SM_CYFULLSCREEN); glutInitWindowSize(cx, cy); glutCreateWindow(Lecture 1");

Обработка событий void glutDisplayFunc (void (*func) (void)) void glutReshapeFunc (void (*func) (int width, int height)) void glutMouseFunc (void (*func) (int button, int state, int x, int y)) void glutIdleFunc (void (*func) (void)) Параметром для них является имя соответствующей функции заданного типа. С помощью glutDisplayFunc() задается функция рисования для окна приложения, которая вызывается при необходимости создания или восстановления изображения. Для явного указания, что окно надо обновить, иногда удобно использовать функцию void glutPostRedisplay(void) Через glutReshapeFunc() устанавливается функция обработки изменения размеров окна пользователем, которой передаются новые размеры. glutMouseFunc() определяет обработчика команд от мыши, а glutIdleFunc() задает функцию, которая будет вызываться каждый раз, когда нет событий от пользователя. Контроль всех событий происходит внутри бесконечного цикла в функции void glutMainLoop(void) которая обычно вызывается в конце любой программы, использующей GLUT.

Структура приложения, использующего анимацию #include void MyIdle(void){ … }; void MyDisplay(void){... glutSwapBuffers(); }; void main(int argc, char **argv){ glutInit(&argc, argv); glutInitWindowSize(640, 480); glutInitWindowPosition(0, 0); glutCreateWindow("My OpenGL Application"); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutDisplayFunc(MyDisplay); glutIdleFunc(MyIdle); glutMainLoop(); };

Очистка экрана Для задания цвета фона используется команда void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha). Значения должны находиться в отрезке [0,1] и по умолчанию равны нулю. После этого вызов команды void glClear(GLbitfield mask) с параметром GL_COLOR_BUFFER_BIT устанавливает цвет фона во все буфера, доступные для записи цвета (иногда удобно использовать несколько буферов цвета). glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); Вызов функции gLoadIdentity() устанавливает начало системы координат в центр экрана, причем ось X идет слева направо, ось Y вверх и вниз, а ось Z к и от наблюдателя. Центр OpenGL экрана находится в точке 0, 0, 0. Координаты, расположенные слева, снизу и вглубь от него, имеют отрицательное значение, расположенные справа, сверху и по направлению к наблюдателю – положительное.

Вершины Под вершиной понимается точка в трехмерном пространстве, координаты которой можно задавать следующим образом: void glVertex[2 3 4][s i f d](type coords) void glVertex[2 3 4][s i f d]v(type *coords) Координаты точки задаются максимум четырьмя значениями: x, y, z, w, при этом можно указывать два (x,y) или три (x,y,z) значения, а для остальных переменных в этих случаях используются значения по умолчанию: z=0, w=1. Как уже было сказано выше, число в названии команды соответствует числу явно задаваемых значений, а последующий символ – их типу. Координатные оси расположены так, что точка (0,0) находится в левом нижнем углу экрана, ось x направлена влево, ось y- вверх, а ось z- из экрана. Это расположение осей мировой системы координат, в которой задаются координаты вершин объекта, другие системы координат будут рассмотрены ниже.

Примитивы Задание примитива происходит внутри командных скобок: void glBegin(GLenum mode) void glEnd(void) Параметр mode определяет тип примитива, который задается внутри и может принимать следующие значения: GL_POINTS каждая вершина задает координаты некоторой точки. GL_LINES каждая отдельная пара вершин определяет отрезок; если задано нечетное число вершин, то последняя вершина игнорируется. GL_LINE_STRIP каждая следующая вершина задает отрезок вместе с предыдущей. GL_LINE_LOOP отличие от предыдущего примитива только в том, что последний отрезок определяется последней и первой вершиной, образуя замкнутую ломаную. GL_TRIANGLES каждая отдельная тройка вершин определяет треугольник; если задано не кратное трем число вершин, то последние вершины игнорируются. GL_TRIANGLE_STRIP каждая следующая вершина задает треугольник вместе с двумя предыдущими. GL_TRIANGLE_FAN треугольники задаются первой и каждой следующей парой вершин (пары не пересекаются). GL_QUADS каждая отдельная четверка вершин определяет четырехугольник; если задано не кратное четырем число вершин, то последние вершины игнорируются. GL_QUAD_STRIP четырехугольник с номером n определяется вершинами с номерами 2n-1, 2n, 2n+2, 2n+1. GL_POLYGON последовательно задаются вершины выпуклого многоугольника.

Примитивы

Цвет вершин Для задания текущего цвета вершины используются команды void glColor[3 4][b s i f](GLtype components) void glColor[3 4][b s i f]v(GLtype components) Первые три параметра задают R, G, B компоненты цвета, а последний параметр определяет alpha-компоненту, которая задает уровень прозрачности объекта. Если в названии команды указан тип f (float), то значения всех параметров должны принадлежать отрезку [0,1], при этом по умолчанию значение alpha-компоненты устанавливается равным 1.0, что соответствует полной непрозрачности. Если указан тип ub (unsigned byte), то значения должны лежать в отрезке [0,255]. Разным вершинам можно назначать различные цвета и тогда будет проводиться линейная интерполяция цветов по поверхности примитива. Для управления режимом интерполяции цветов используется команда void glShadeModel(GLenummode) вызов которой с параметром GL_SMOOTH включает интерполяцию (установка по умолчанию), а с GL_FLAT отключает.

Как нарисовать треугольник? GLfloat BlueCol[3]={0,0,1}; glBegin(GL_TRIANGLES); glColor3f(1.0, 0.0, 0.0); //красный glVertex3f(0.0, 0.0, 0.0); glColor3ub(0,255,0); //зеленый glVertex3f(1.0, 0.0, 0.0); glColor3fv(BlueCol); //синий glVertex3f(1.0, 1.0, 0.0); glEnd();