OpenGL

Подобни документи
OpenGL

OpenGL

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Black and White

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Компютърна Графика и Презентации - Алгоритми за Визуализация

Lush Green

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Lush Green

Анализ и оптимизация на софтуерни приложения

Компютърна Графика и Презентации - Графично моделиране

Структура на програма в C - Част 9 - низове от символи, C-string

Термограф Cargo Log Master Ръководство за работа и настройки през WiFi, V1.0 Включете захранването със задържане на бутон Power. Следва начална анимац

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

!"#$%&'%()*)+ ', MS OFFICE )+%.+)*/'% %01('+'* *.+2+'* #,3,/* ( 4.*5%&+'*,3,4),6** 7"$ MS OFFICE 2003!"#$%&' (&)$*+*!"!"#$%&'()$* "+$*,*-)%,*./

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Виртуални функции

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Microsoft PowerPoint - Windows2003 Intro.ppt

Анализ и оптимизация на софтуерни приложения

Машинно обучение - въведение

Microsoft Word - IN 5061 Krokoměr PR039

СЪДЪРЖАНИЕ

CSRF on JSON data

Microsoft Word - Lection06.doc

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Micro C 01 КРАТКА ИНСТРУКЦИЯ ЗА МОНТАЖ И ЕКСПЛОАТАЦИЯ Пълната инструкция за експлоатация можете да намерите на сайта ни

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

Маисви

SoftwareDoc.docx

4

IATI Day 1/Junior Task 1. Trap (Bulgaria) X INTERNATIONAL AUTUMN TOURNAMENT IN INFORMATICS SHUMEN 2018 Задача 1. Капан Образуваме редица от точки, кои

Slide 1

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Формуляри

Fuvas Administrator / ФУВАС Администратор РЪКОВОДСТВО ЗА РАБОТА с потребителски софтуер за анализиране данни от ФУВАС произведени от фирма TREMOL Fuva

Препис:

OpenGL Изграждане на Геометрични обекти 2 гл. ас. А. Пенев

Анимация (1/3) gluttimerfunc glutidlefunc glutpostredisplay glutpostwindowsredisplay + Промяна на визуализацията в display 2/32

Анимация (2/3 /3) int angle = 0; void display(void) { glclearcolor(0,0,0,1); glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glloadidentity(); glrotated(angle, 0,1,0);,0); glcolor3d(1,1,1); glutsolidteapot(1); } glutswapbuffers(); void timer(int value) { angle++; glutpostredisplay(); gluttimerfunc(50, timer, 1); } // В main gluttimerfunc(50, timer, 1); 3/32

Анимация (3/2 /2) 4/32

Масиви и буфери с данни 1. Команди Клиент Сървър 2. Масиви в клиента Клиент Array Сървър 3. Буфери/обекти в сървъра Клиент Сървър VBO 5/32

Задаване на масиви с данни void glenableclientstate(glenum caps) void gldisableclientstate(glenum caps) caps: GL_VERTEX_ARRAY GL_COLOR_ARRAY GL_NORMAL_ARRAY GL_TEXTURE_COORD_ARRAY GL_EDGE_FLAG_ARRAY GL_INDEX_ARRAY GL_FOG_COORD_ARRAY GL_SECONDARY_COLOR_ARRAY 6/32

Клиентско състояние (1/3) void glvertexpointer( GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) void glgetpointerv(glenum pname, GLvoid* *params) 7/32

Клиентско състояние (2/3) glcolorpointer glindexpointer glnormalpointer gltexcoordpointer gledgeflagpointer без размер и тип void glgetpointerv(glenum pname, GLvoid* *params) 8/32

Клиентско състояние (3/3 /3) size: 1,2,3,4 брой координати type: GL_SHORT, GL_INT, GL_DOUBLE,, stride: 0 или повече отместване между два ел. vertex 0 color 0 normal 0 vertex 1 color 1 normal 1 vertex 2 9/32

Позоваване на елемент void glarrayelement(glint i) 10/32

Пример (1/2) static GLdouble vertices[] = { // XYZH -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 0.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0 }; static GLfloat colors[] = { // RGB 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0 }; 11/32

Пример (2/2) glenableclientstate(gl_vertex_array); glenableclientstate(gl_color_array); glvertexpointer(4, GL_DOUBLE, 0, vertices); glcolorpointer(3, GL_FLOAT, 0, colors); glbegin(gl_triangles); glarrayelement(0); glarrayelement(1); glarrayelement(2); glarrayelement(0); glarrayelement(1); glarrayelement(3); glarrayelement(1); glarrayelement(2); glarrayelement(3); glarrayelement(2); glarrayelement(0); glarrayelement(3); glend(); 12/32

Пример (1/2) struct { GLdouble vertex[4]; GLfloat color[3]; } points[] = { // XYZH, RGB {{-1.0, -1.0, -1.0, 1.0}, {1.0, 0.0, 0.0}}, {{1.0, -1.0, -1.0, 1.0}, {0.0, 1.0, 0.0}}, {{0.0, 1.0, -1.0, 1.0}, {0.0, 0.0, 1.0}}, {{0.0, 0.0, 1.0, 1.0}, {1.0, 1.0, 1.0}} }; 13/32

Пример (2/2) glenableclientstate(gl_vertex_array); glenableclientstate(gl_color_array); glvertexpointer(4, GL_DOUBLE, sizeof(points[0]), points[0].vertex); glcolorpointer(3, GL_FLOAT, sizeof(points[0]), points[0].color); glbegin(gl_triangles); glarrayelement(0); glarrayelement(1); glarrayelement(2); glarrayelement(0); glarrayelement(1); glarrayelement(3); glarrayelement(1); glarrayelement(2); glarrayelement(3); glarrayelement(2); glarrayelement(0); glarrayelement(3); glend(); 14/32

Много елементи (1/3) void gldrawelements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) 15/32

Много елементи (2/3 /3) mode: GL_TRIANGLES, GL_LINES, GL_POINTS, count: Брой елементи за визуализация. type: GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT indices: Масив от индексите на елементите. 16/32

Много елементи (3/3( 3/3) glbegin(mode); for (int i = 0; i < count; i++) glarrayelement(indices[i]); glend(); 17/32

Много елементи в диапазон (1/1) void gldrawrange RangeElements( GLenum mode, GLsizei start, GLsizei end, GLsizei count, GLenum type, const GLvoid *indices) 18/32

Много елементи в диапазон (2/2) 2) mode: GL_TRIANGLES, GL_LINES, GL_POINTS, start, end: Минимален и максимален индекс в масива с индексите за визуализация. count: Брой елементи за визуализация. type: GL_UNSIGNED_BYTE GL_UNSIGNED_SHORT GL_UNSIGNED_INT indices: Масив от индексите на елементите. 19/32

Много последователни елементи (1/2) void gldrawarrays(glenum mode, GLint first, GLsizei count) 20/32

Много последователни елементи (2/2 /2) glbegin(mode); for (int i = 0; i < count; i++) glarrayelement(first + i); glend(); 21/32

Повече последователни елементи void glmultidrawarrays( GLenum mode, GLint *first, GLsizei *count Glsizei primcount) 22/32

Едновременна настройка void glinterleavedarrays( GLenum format, GLsizei stride, const GLvoid *pointer) 23/32

Видове масиви GL_V2F GL_V3F GL_C4UB_V2F GL_C4UB_V3F GL_C3F_V3F GL_N3F_V3F GL_C4F_N3F_V3F GL_T2F_V3F GL_T4F_V4F GL_T2F_C4UB_V3F GL_T2F_C3F_V3F GL_T2F_N3F_V3F GL_T2F_C4F_N3F_V3F GL_T4F_C4F_N3F_V4F 24/32

Пример 1 Например GL_C3F_V3F означава: Color с 3 GLfloat елемента; Vertex с 3 GLfloat елемента. 25/32

Vertex Buffer Object (VBO) void glgenbuffers(glsizei n, GLuint* buffers) void gldeletebuffers(glsizei n, const GLuint* buffers) GLboolean glisbuffer(gluint buffer) 26/32

Използване на VBO void glbindbuffer( GLenum target, GLuint buffer) target: GL_ARRAY ARRAY_BUFFER Vertex атрибути; GL_ELEMENT ELEMENT_ARRAY_BUFFER индекси; buffer: Име(номер) на буфера с данни. 27/32

Зареждане на данни във VBO void glbufferdata( GLenum target, GLsizei size, const void* data, GLenum usage) void glbuffersubdata( ) target: GL_ARRAY ARRAY_BUFFER Vertex атрибути; GL_ELEMENT ELEMENT_ARRAY_BUFFER индекси; usage: GL_STATIC_DRAW, GL_STATIC_READ, GL_STATIC_COPY GL_DYNAMIC_DRAW, GL_DYNAMIC_READ, GL_DYNAMIC_COPY GL_STREAM_DRAW, GL_STREAM_READ, GL_STREAM_COPY 28/32

Промяна на данни във VBO void* glmapbuffer( GLenum target, GLenum access) GLboolean glunmapbuffer(glenum target) target: GL_ARRAY ARRAY_BUFFER Vertex атрибути; GL_ELEMENT ELEMENT_ARRAY_BUFFER индекси; access: GL_READ_ONLY само за четене; GL_WRITE_ONLY само за запис; GL_READ_WRITE за четене и запис. 29/32

Пример 2 (1/2) GLuint vboidvertex = 0; // Създаваме VBO glgenbuffers(1, &vboid& vboidvertex); // Активиране на VBO за използване glbindbuffer(gl_array_buffer GL_ARRAY_BUFFER, vboidvertex); // Зареждаме данните във VBO glbufferdata(gl_array_buffer GL_ARRAY_BUFFER, datasize, data, usage ); 30/32

Пример (2/2) // Преминаваме в режим на работа с VBO glbindbuffer(gl_array_buffer, vboidvertex Vertex); glenableclientstate(gl_vertex_array); // Последния П параметър е отместване, а на указател! glvertexpointer(3, GL_FLOAT, 0, 0); gldrawarrays(gl_quads, 10, 5); // Ако имаме свързан и GL_ELEMENT_ARRAY_BUFFER, то // последният параметър на следващата ф-я е отместване! // gldrawelements(gl_quads, 24, GL_UNSIGNED_BYTE, 0); gldisableclientstate(gl_vertex_array); // Връщане в нормалния режим на работа с масиви glbindbuffer(gl_array_buffer, 0); 31/32

OpenGL Изграждане на Геометрични обекти 2 Въпроси? 32/32