OpenGL и аппаратные ускорители графики Астана 2004 Лекция 8.

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



Advertisements
Похожие презентации
OpenGL. Графический конвейер. Геометрические преобразования.
Advertisements

GPU vs. CPU 302 млн. транзисторов Тактовая частота 550Mhz 1GB 850x2 MHz памяти 380 млн. транзисторов Тактовая частота 650Mhz 1GB 775x2 MHz памяти Тактовая.
Современные графические технологии ИЛИ OpenGL и графические процессоры 2010.
Лекция 1 ( ). Основные возможности OpenGL Набор базовых примитивов: точки, линии, многоугольники и т.п. Видовые и координатные преобразования.
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
Астана ( )Компьютерная графика (лекция 6) ВВЕДЕНИЕ В OPENGL Лекция 6.
GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти.
OpenGL Лекция 4 ( ). void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr ) size определяет число координат вершины (2, 3,
Лекция 1 OpenGL («Open Graphics Library») - программный интерфейс (API) к графической плате. Утвержден в 1992 году Основой стандарта стала библиотека IRIS.
Компьютерная графика. Лекция 4 Алгоритмы формирования изображений. Основы OpenGL.
Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11.
Компьютерная визуализация Лекция 3 СПбГУ ИТМО 2004.
OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
Машинная графика. Введение. Что такое машинная графика? Планы на семестр и проставление баллов Виды машинной графики Основные компоненты сцены Инструкция.
OpenGL Графические библиотеки 2D –GAPI –GDI –XWindow –GTK –QT 3D –DirectX –OpenGL.
Intro Галинский В.А. Физико-математический лицей 30 Computer Graphics Support Group 1 Введение в компьютерную графику URL:
Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
Лекция 8 25февраля 2003 г. (Астана) Видовые преобразования Закраска Гуро и Фонга Удаление невидимых линий и поверхностей.
Аффинные преобразования Графический конвейер Астана. Лекция 7.
{ OpenGL Лекция 3 ( ). float ambient[4] = {0.0, 0.0, 0.0, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); // RGBA интенсивность всей сцены.
Транксрипт:

OpenGL и аппаратные ускорители графики Астана 2004 Лекция 8

Методы создания изображений Точность и реалистичность: Трассировка лучей Излучательность Скорость: Полигональная графика

GPU vs. CPU 135 млн. транзисторов Тактовая частота 450Mhz 256MB 425MHz памяти 115 млн. транзисторов Тактовая частота 412Mhz 256MB 365MHz памяти Тактовая частота 1.8Ghz – 3.2Ghz 55 млн. Транзисторов (core) NV35 R350

2D-ускорители Копирование и перемещение прямоугольных блоков Отрисовка курсора мыши Отрисовка прямых линий и других примитивов Масштабирование прямоугольных блоков Прикладная программа Win32 APIДрайверВидеокарта

Графический конвейер T&L: Преобразование и освещение Rasterization: Разбиение примитивов на пиксели Pixel Ops: Запись пиксела в буфер кадра V i ={P,n,…} F j ={V 1,V 2,V 3 } V i={P,RGBA,…} { x i,y i,z i,RGBA i } F j={V 1,V 2,V 3 }

3D-ускорители T&L Rasterization Pixel Ops Прикладная программа OpenGL Direct3D ДрайверВидеокарта Ускоряются этапы T&L и растеризации Взаимодействие с программой при помощи специальных API

Современные ускорители: шейдеры R250 – R350 T&L Rasterization Pixel Ops NV25 – NV30 dp4 r0.x, v0, c[0] dp4 r0.y, v0, c[1] dp4 r0.z, v0, c[2] dp4 r0.w, v0, c[3] mov oD0, c[4] ; Output color mov oPos, r0 ; Output vertex ps.1.0 // DX8 Version. tex t0 // n-map. texm3x3pad t1, t0_bx2 texm3x3pad t2, t0_bx2 v0_bx2 texm3x3tex t3, t0_bx2 dp3_sat r0, t3_bx2,

OpenGL – многоплатформенная библиотека функций для создания интерактивных 2D и 3D приложений. GLut – многоплатформенная библиотека вспомогательных функций для создания оконных приложений, использующих OpenGL Позволяет скрыть особенности программирования под данную оконную систему. Отраслевой стандарт с 1992 года

OpenGL: клиент-сервер /* прикладная программа */ #include … glEnable(GL_TEXTURE_2D); glBegin(GL_TRIANGLES); … glTexCoord2d(0.5,0.5); glVertex3f(1.0,0.5,-0.2); … glEnd(); … Сервер OpenGL Буфер кадра, Буфер глубины, Буфер трафарета, Буфер аккумулятора.

Что нужно для работы с OpenGL.cpp opengl32.lib gl.h glu32.lib glu.h glut32.lib glut.h opengl32.dll glu32.dll glut32.dll.exe C++

Литература Ю. Тихомиров. OpenGL. Программирование трехмерной графики, БХВ – Петербург, 2002 Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL, 2-е изд., Вильямс, 2001

Литература. Продолжение. Ву Мейсон, Нейдер Джеки, Девис Том, Шрайнер Дейв. OpenGL. Руководство по программиста. Диа-Софт, Френсис Хилл. OpenGL. Программирование компьютерной графики. Для профессионалов. Питер. 2002

Где взять GLut? documentation/glut/index.html Где прочитать про GLut? - работа с GLut

Самая простая программа #include void reshape(int w, int h) { /* Здесь обрабатываем изменение размеров окна */ } void display(void) { /* Здесь помещаются команды рисования */ } void idle(void) { /* Здесь происходит анимация */ } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB); // GLUT_DOUBLE|GLUT_DEPTH|GLUT_STENCIL|GLUT_ACCUM glutCreateWindow(Самая простая программа); glutDisplayFunc(display); glutReshapeFunc(reshape); glutIdleFunc(idle); glutMainLoop(); return 0; }

Работа с буфером кадра void glClear(GLenum buffers); buffers = GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT| GL_ACCUM_BUFFER_BIT| GL_STENCIL_BUFFER_BIT void glClearColor(GLclampf red,GLclampf green, GLclampf blue,GLclampf alpha); Задание цвета для заполнения буфера кадра Заполнение экранных буферов

Преобразование координат: viewport void glViewport(GLint x,GLint y, GLsizei w,GLsizei h); w h void glDepthRange(GLclampd n,GLclampd f);

Рисуем куб x y z Видимые грани: Невидимые грани:

Команды OpenGL glVertex3fv ( v ) 2 – (x, y) 3 – (x, y, z) 4 – (x, y, z, w) Число компонент B – byte ub – unsigned byte s – short us – unsigned short I – int ui – unsigned int f – float d – double Тип данных «v» отсутствует для скалярных форм glVertex2f(x,y) Вектор

Модель begin/end void glMatrixMode(…); void glLoadIdentity(); void glMultMatrixd(…); void glBegin(GLenum type); void glVertex(…); void glNormal(…); void glColor(…); void glEnd(); T&L Rasterization Pixel Ops void glTexture2d(…); void glTexEnv(…); void glPolygonMode(…); void glDepthFunc(…); void glBlendFunc(…); void glStencilOp(…);

Формирование граней из вершин GL_TRIANGLES: GL_QUADS: GL_POLYGON:

Однородные координаты Общее аффинное преобразование сводится к умножению на матрицу Проецирование также сводится к умножению на матрицу

Преобразование координат Отсечение: Viewport V i ={P s,RGBA,…}

Матрицы преобразований void glMatrixMode(Glenum mode); mode={GL_MODELVIEW|GL_PROJECTION} void glLoadIdentity(); void glMultMatrixd(GLdouble c[16]); Выбираем матрицу преобразований для изменения: Две основные операции над матрицами:

Матрицы преобразований. Продолжение void glTranslated(GLdouble x, GLdouble y, GLdouble z); void glScaled(GLdouble x, GLdouble y, GLdouble z); void glRotated(GLdouble angle, GLdouble ax, GLdouble ay, GLdouble az); void gluPerspective(GLdouble fov, GLdouble aspect, GLdouble znear, GLdouble zfar);

Как работает gluPerspective? X Y Z 0 O1O1 O2O2 A1A1 B1B1 C1C1 D1D1 A2A2 B2B2 C2C2 D2D2 void gluPerspective(GLdouble fov, GLdouble aspect, GLdouble znear, GLdouble zfar); fov = D 1 OA 1 (в градусах) aspect = C 1 D 1 /D 1 A 1 znear = |OO 1 | zfar = |OO 2 |

gluPerspective: продолжение

Стек матриц glLoadIdentity(); glTranslated(…); glPushMatrix(); glRotated(…); glPopMatrix(); glPushMatrix(); glRotataed(…); glPopMatrix(); E T T T*R1 T T*R2 T

Виртуальная камера gluLookAt( eye x, eye y, eye z, aim x, aim y, aim z, up x, up y, up z ) Настройка виртуальной камеры eye – координаты наблюдателя aim – координаты цели up – направление вверх