OpenGL Intro.ppt
- Количество слайдов: 23
Современные графические технологии ИЛИ Open. GL и графические процессоры 2009
Полигональное представление объектов Объект задан набором вершин, которые объединены в плоские грани, чаще всего – треугольные. Для каждой вершины заданы: q Координаты вершины q Нормаль q Координаты текстуры
GPU vs. CPU G 92 q 681 млн. транзисторов q Тактовая частота 600 Mhz R 70 0 q 956 млн. транзисторов q Тактовая частота 750 Mhz q 1 GB 900 x 4 MHz q 1 GB 1 x 2 GHz памяти q Тактовая частота 3. 2 Ghz Intel QX 9770 q 820 млн. транзисторов (dual core)
GPU vs. CPU (4 года назад) NV 3 0 q 120 млн. транзисторов q Тактовая частота 500 Mhz R 30 0 q 107 млн. транзисторов q Тактовая частота 325 Mhz q 128 MB 310 MHz q 128 MB 500 MHz памяти q Тактовая частота 1. 6 Ghz – 3. 06 Ghz q 42 млн. Транзисторов (core)
Буфер кадра – прямоугольный массив структур
2 D-ускорители q Копирование и перемещение прямоугольных блоков q Масштабирование прямоугольных блоков q Отрисовка курсора мыши q Отрисовка прямых линий и других примитивов Прикладная Win 32 API программа Драйвер Видеокарта
Графический конвейер Vi={P, n, …} T&L: Fj={V 1, V 2, V 3} Преобразование. Vi’={P’, RGBA, …} Fj’={V 1, V 2, V 3} и освещение Rasterization: Разбиение примитивов на пиксели { Pixel Ops: xi, yi, zi, RGBAi. Запись пиксела } в буфер кадра { xi, yi, zi, RGBAi }
3 D-ускорители q “Ускоряются” этапы T&L и растеризации T&L Rasterization Pixel Ops q Взаимодействие с программой при помощи специальных API Прикладная Open. GL программа Direct 3 D Драйвер Видеокарта
Поколение 4: Шейдеры R 250 -R 580 NV 25 NV 47 T&L dp 4 mov r 0. x, v 0, r 0. y, v 0, r 0. z, v 0, r 0. w, v 0, o. D 0, c[4] o. Pos, r 0 Rasterization Pixel Ops c[0] c[1] c[2] c[3] ; Output color ; Output vertex ps. 1. 0 // DX 8 Version. tex t 0 // n-map. texm 3 x 3 pad t 1, t 0_bx 2 texm 3 x 3 pad t 2, t 0_bx 2 v 0_bx 2 texm 3 x 3 tex t 3, t 0_bx 2 dp 3_sat r 0, t 3_bx 2,
Open. GL – многоплатформенная библиотека функций для создания интерактивных 2 D и 3 D приложений. Отраслевой стандарт с 1992 года • http: //www. opengl. org. ru GLut – многоплатформенная библиотека вспомогательных функций для создания оконных приложений, использующих Open. GL Позволяет скрыть особенности программирования под данную оконную систему.
Open. GL: клиент-сервер /* прикладная программа */ #include
Что нужно для работы с Open. GL opengl 32. lib glu 32. lib . cpp gl. h glu. h opengl 32. dll glu 32. dll . exe C++ glut. h glut 32. lib glut 32. dll
Литература (1/5) Ю. Тихомиров. Open. GL. Программирование трехмерной графики, БХВ – Петербург, 2002 Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе Open. GL, 2 -е изд. , Вильямс, 2001
Литература (2/5) Ву Мейсон, Нейдер Джеки, Девис Том, Шрайнер Дейв. Open. GL. Руководство по программиста. Диа-Софт, 2002. Френсис Хилл. Open. GL. Программирование компьютерной графики. Для профессионалов.
Литература (3/5) Гайдуков С. Open. GL. Профессиональное программирование трехмерной графики на C++. - БХВ-Петербург, 2004
Литература (4/5) Боресков А. В. Расширения Open. GL. - СПб. : БХВ-Петербург, 2005 Дж. Рост Open. GL. Трехмерная графика и язык программирования шейдеров - СПб. : Питер, 2005
Литература (5/5) Миллер Т. Direct. X 9 с управляемым кодом. Программирование игр и графика. – Ком. Бук, 2005. Горнаков С. Direct. X 9. Уроки программирования на C++. – БХВ, 2004.
Где взять GLut? • http: //www. opengl. org/developers/ documentation/glut/index. html • http: //www. xmission. com/~nate/glut/glut-3. 7. 6 -bin. zip • http: //www. xmission. com/~nate/glut-3. 7. 6 -src. zip Где прочитать про GLut? • http: //www. opengl. org. ru/coding/glut/ - работа с GLut
Самая простая программа #include
Работа с буфером кадра q Задание цвета для заполнения буфера кадра void gl. Clear. Color(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); Представление цвета в Open. GL q Заполнение экранных буферов void gl. Clear(GLenum buffers); buffers = GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT| GL_ACCUM_BUFFER_BIT| GL_STENCIL_BUFFER_BIT
Преобразование координат: viewport void gl. Viewport(GLint x, GLint y, GLsizei w, GLsizei h); h w void gl. Depth. Range(GLclampd n, GLclampd f);


