Bartosz Bazyluk DEFINIOWANIE GEOMETRII Sposoby opisu geometrii brył w OpenGL. Grafika Komputerowa, Informatyka, I Rok

Podobne dokumenty
Bartosz Bazyluk Oświetlenie Zaawansowane techniki oświetlenia, c.d.

Bartosz Bazyluk Oświetlenie Zaawansowane techniki oświetlenia, c.d. Gry komputerowe, Informatyka N1, III Rok

Bartosz Bazyluk OpenGL Programowalny potok renderowania, buforowanie geometrii (VBO, IBO, VAO).

Geometria analityczna w przestrzeni. Kierunek. Długość. Zwrot

Przestrzeń liniowa R n.

Postać Jordana macierzy

Laboratorium grafiki komputerowej i animacji. Ćwiczenie III - Biblioteka OpenGL - wprowadzenie, obiekty trójwymiarowe: punkty, linie, wielokąty

Laboratorium grafiki komputerowej i animacji. Ćwiczenie IV - Biblioteka OpenGL - transformacje przestrzenne obiektów

Ruch kulisty bryły. Kąty Eulera. Precesja regularna

I. Rachunek wektorowy i jego zastosowanie w fizyce.

8 Przygotował: mgr inż. Maciej Lasota

POTENCJALNE POLE SIŁ. ,F z 2 V. x = x y, F y. , F x z F z. y F y

GRUPY SYMETRII Symetria kryształu

Rozdział 9. Baza Jordana

Strukturalne elementy symetrii. Krystalograficzne grupy przestrzenne.

1. REDUKCJA DOWOLNYCH UKŁADÓW SIŁ. Redukcja płaskiego układu sił

DryLin T System prowadnic liniowych

PRAWIDŁOWE ODPOWIEDZI I PUNKTACJA

Pochodna kierunkowa i gradient Równania parametryczne prostej przechodzącej przez punkt i skierowanej wzdłuż jednostkowego wektora mają postać:

ZŁOŻONE RUCHY OSI OBROTOWYCH STEROWANYCH NUMERYCZNIE

GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i transformacji geometrycznych

Strukturalne elementy symetrii. Krystalograficzne grupy przestrzenne.

,..., u x n. , 2 u x 2 1

Algebra z geometrią 2012/2013

Rozwiazania zadań. Zadanie 1A. Zadanie 1B. Zadanie 2A

Global Positioning System (GPS) zasada działania

1. Podstawy matematyczne programowania grafiki 3D

LABORATORIUM MECHANIKI EKSPERYMENTALNEJ. Instrukcja do ćwiczenia

P K. Położenie punktu na powierzchni kuli określamy w tym układzie poprzez podanie dwóch kątów (, ).

Funkcje wielu zmiennych

Przykład 6.3. Uogólnione prawo Hooke a

Mechanika Robotów. Wojciech Lisowski. 2 Opis położenia i orientacji efektora Model geometryczny zadanie proste

BADANIE CYFROWYCH UKŁADÓW ELEKTRONICZNYCH TTL strona 1/7

J. Szantyr - Wykład 4 Napór hydrostatyczny Napór hydrostatyczny na ściany płaskie

Nowoczesna OpenGL - rendering wielokątów Rendering wielokątów w kontekście biblioteki SFML

Plan wykładu. Akcelerator 3D Potok graficzny

OpenGL. Biblioteka procedur graficznych. GLU = OpenGL Utility Library. GLX = OpenGL Extension to the X Window System [tm]

Wykład 1 Podstawy projektowania układów logicznych i komputerów Synteza i optymalizacja układów cyfrowych Układy logiczne

J. Szantyr - Wykład 7 Ruch ogólny elementu płynu

Graficzne modelowanie scen 3D. Wykład 4

2.1. ZGINANIE POPRZECZNE

EPR. W -1/2 =-1/2 gµ B B

napór cieczy - wypadkowy ( hydrostatyczny )

Równoważne układy sił

KONWENCJA ZNAKOWANIA MOMENTÓW I WZÓR NA NAPRĘŻENIA

3. Metody rozwiązywania zagadnień polowych

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Zatem standardowe rysowanie prymitywów wygląda następująco:

σ x σ y σ z σ z, Adam Bodnar: Wytrzymałość Materiałów. Równania fizyczne.

cz.2 Dr inż. Zbigniew Szklarski Katedra Elektroniki, paw. C-1, pok.321

ANALIZA KONSTRUKCJI POWŁOKOWEJ. CIENKOŚCIENNY ZBIORNIK CIŚNIENIOWY

3 Przygotował: mgr inż. Maciej Lasota

WYKRYWANIE BLOKAD W SYSTEMACH PRIORYTETOWYCH

Wykład 5. Rendering (2) Geometria

Wyznaczanie ruchliwości i koncentracji nośników prądu w półprzewodnikach metodą efektu Halla

Podstawy wytrzymałości materiałów

SYNTHESIS OF MOTION FOR A FOUR-LEGGED ROBOT

Teoria względności. Wykład 5: Szczególna teoria względności Katarzyna Weron. Jak zmierzyć odległość? Jak zmierzyć odległość?

Środek ciężkości bryły jednorodnej

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

1. Prymitywy graficzne

Wyświetlanie terenu. Clipmapy geometrii

A = {dostęp do konta} = {{właściwe hasło,h 2, h 3 }} = 0, (10 4 )! 2!(10 4 3)! 3!(104 3)!

Temat: Transformacje 3D

Podstawy Processingu. Diana Domańska. Uniwersytet Śląski

Rozważa się dwa typy odwzorowań: 1. Parametryzacja prosta

Bartosz Bazyluk OpenGL Współczesne podejście do programowania grafiki Część II: Programy cieniujące (shadery)

Przegląd architektury PlayStation 3

URZĄD MIEJSKI W SŁUPSKU Wydział Zdrowia i Spraw Społecznych. SPRAWOZDANIE (CZĘŚCIOWE*/KOŃCOWE*)1) z wykonania zadania publicznego...

Przykład 6.1. Przestrzenny stan naprężenia i odkształcenia

MECHANIKA OGÓLNA. Semestr: II (Mechanika I), III (Mechanika II), rok akad. 2013/2014

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

1. Podstawy rachunku wektorowego

INSTYTUT FIZYKI WYDZIAŁ INŻYNIERII PROCESOWEJ, MATERIAŁOWEJ I FIZYKI STOSOWANEJ POLITECHNIKA CZĘSTOCHOWSKA ĆWICZENIE NR MR-2

Matematyka 2. Elementy analizy wektorowej cz I Pole wektorowe

ORGANIZACJA I ZARZĄDZANIE

Adam Bodnar: Wytrzymałość Materiałów. Proste zginanie

Wielowymiarowe bazy danych

Adam Bodnar: Wytrzymałość Materiałów. Hipotezy wytężeniowe.

z wykonania zadania publicznego... (tytuł zadania publicznego) w okresie od... do... zawartej w dniu... pomiędzy... (nazwa Zleceniodawcy)

Podstawy wytrzymałości materiałów

Podstawy wytrzymałości materiałów

Wydawnictwo Wyższej Szkoły Komunikacji i Zarządzania w Poznaniu

Powierzchnie stopnia drugiego

Elementy symetrii makroskopowej w ujęciu macierzowym.

Materiały. Dorota Smorawa

Ruch kulisty bryły. Kinematyka

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

Wymagania edukacyjne z matematyki w klasie V Matematyka z plusem

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Część 1 2. PRACA SIŁ WEWNĘTRZNYCH 1 2. PRACA SIŁ WEWNĘTRZNYCH Wstęp

W takim modelu prawdopodobieństwo konfiguracji OR wynosi. 0, 21 lub , 79. 6

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Narzędzia kontroli wersji Subversion

ALGEBRA rok akademicki

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

Ćwiczenie 361 Badanie układu dwóch soczewek

Transkrypt:

Bartos Baluk DEFINIOWANIE GEOMETRII Sposob opisu geometrii brł w OpenGL. http://baluk.net/psb Grafika Komputerowa, Informatka, I Rok

Renderowanie geometrii Wierchołki Pretwaranie wierchołków Łącenie w prmitw Geometria jest opisana prede wsstkim pocjami wierchołków Podcas procesu renderowania powierchnie obiektów rsowane są a pomocą tw. prmitwów Prmitw to figur geometrcne odpowiadające a to, jak informacja o kolejnch pocjach ostanie wkorstana podcas rsowania Mogą to bć np. punkt, linie, łamane, trójkąt, pas trójkątów, cworokąt, wielokąt, itp. Rasteracja prmitwów Operacje na fragmentach Operacje na pikselach Bufor klatki Źródło obrau: GPU Design 11 maja 2018 r. Bartos Baluk 2

Renderowanie geometrii Prmitw obsługiwane pre OpenGL: Źródło obrau: http://www.opengl.org 11 maja 2018 r. Bartos Baluk 3

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Mślim o punktach w prestreni 3D, nie na płascźnie 11 maja 2018 r. Bartos Baluk 4

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu punkt (ang. points) 11 maja 2018 r. Bartos Baluk 5

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu linie (ang. lines) 11 maja 2018 r. Bartos Baluk 6

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu łamana (ang. line strip) 11 maja 2018 r. Bartos Baluk 7

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu łamana amknięta (ang. line loop) 11 maja 2018 r. Bartos Baluk 8

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu trójkąt (ang. triangles) 11 maja 2018 r. Bartos Baluk 9

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu wachlar (ang. triangle fan) 11 maja 2018 r. Bartos Baluk 10

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Użcie prmitwu pas trójkątów (ang. triangle strip) 11 maja 2018 r. Bartos Baluk 11

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Dwa ostatnie wierchołki nie są wkorstane - ab powstał kolejn quad, potrebne błb dwa następne! Użcie prmitwu cworokąt (ang. quads) 11 maja 2018 r. Bartos Baluk 12

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Ten cworokąt jest niepoprawn ( degenerowan ) nie jest wpukł! Użcie prmitwu pas cworokątów (ang. quad strip) 11 maja 2018 r. Bartos Baluk 13

Renderowanie geometrii Prkład: Mam dane 6 wierchołków o następującch położeniach: v 5 Ten wielokąt jest niepoprawn ( degenerowan ) nie jest wpukł! Użcie prmitwu wielokąt (ang. polgon) 11 maja 2018 r. Bartos Baluk 14

Face culling Ropatrm prpadek: scena awiera seścian Wierchołki Pretwaranie wierchołków Łącenie w prmitw Rasteracja prmitwów Operacje na fragmentach Operacje na pikselach Bufor klatki Ile jego ścian jest widocnch na danej klatce animacji? Ile ścian jest renderowanch podcas rsowania klatki? W którm momencie potoku pomijane są tlne ścian? 11 maja 2018 r. Bartos Baluk 15

Face culling Technika face culling powala na pominięcie ścian widocnch określonej stron jesce pred ropocęciem ich rasteracji O odruceniu decduje kolejność wierchołków po ich projekcji (ang. winding order) Zgodnie ruchem wskaówek egara (ang. clockwise) Preciwnie do wskaówek egara (ang. counter-clockwise) Koniecne jest więc ustalenie w jakiej kolejności definiowane są wierchołki ścian gd patrm na ich prednią stronę, a potem konsekwentne trmanie się ustalonej kolejności podcas opiswania geometrii obiektów. CCW 11 maja 2018 r. Bartos Baluk 16

Face culling Jeśli po prejściu do współrędnch kamer kolejność wierchołków gada się tą unaną a prednią, to nac że widim prednią stronę ścian i należ ją poddać rasteracji Jeśli kolejność jest odwrotna, to widim tlną stronę ścian i możem ją pominąć (jeśli użwam techniki back face culling) Źródło obrau: http://www.learningopengl.com 11 maja 2018 r. Bartos Baluk 17

Face culling Jak karta graficna porównuje kolejność wierchołków? C kąt pomęd wektorem normalnm ścian, a wektorem obserwacji jest mniejs lub równ 90 stopni? Wektor normaln oblicam a pomocą ilocnu wektorowego trech kolejnch wierchołków w kolejności ich definiowania Równoważne ptanie: C ilocn skalarn międ tmi wektorami jest więks lub równ ero? Jeśli tak, to kolejność jest różna od pocątkowej ścianę należ pominąć! N N=( ) ( ) V 0 N 0 V 0 - - 11 maja 2018 r. Bartos Baluk 18

Face culling Kied back face culling jest problematcn? Gd na scenie są prerocste obiekt Wówcas pomijanie tlnch ścian może bć widocne Gd wstępują obiekt o erowej grubości, w którch obie stron ścian są widocne Do cego dodatkowo może służć back face culling? Usuwanie "niewidocnch" linii w renderowaniu wireframe, pod warunkiem że geometria jest wpukła Do cego mógłb służć front face culling? Ukrwanie prednich ścian może bć prdatne podcas renderowania map cieni, b uniknąć efektu self-shadowing gd sprawdane jest prsłonięcie scen punktu widenia źródła światła 11 maja 2018 r. Bartos Baluk 19

Face culling Jak korstać face cullingu w OpenGL? Włącanie: glenable(gl_cull_face); Wbór kolejności definicji prednich ścian: glfrontface(gl_ccw); // preciwnie do ruchu wskaówek egara glfrontface(gl_cw); // godnie ruchem wskaówek egara dotc wierchołków definiowanch po wwołaniu tej funkcji Wbór ścian, które mają bć pomijane: glcullface(gl_back); glcullface(gl_front); glcullface(gl_front_and_back); 11 maja 2018 r. Bartos Baluk 20

Definicja geometrii w OpenGL Najprostsą metodą definicji i renderowania geometrii jest tw. immediate mode Definicja własności wsstkich wierchołków w każdej klatce Podejście którego współceśnie się już nie stosuje Jest nieefektwne W każdej klatce duża ilość danch prekawana do kart graficnej Współceśnie użwa się buforów w pamięci kart graficnej Jest najłatwiejse w roumieniu Prmitw glbegin(gl_quads); glverte3f(-1.0f, -1.0f, 0.0f); glverte3f(1.0f, -1.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(-1.0f, 1.0f, 0.0f); glend(); 11 maja 2018 r. Bartos Baluk 21

Atrbut wierchołków Prkładowm atrbutem wierchołka jest jego kolor Kolor określa się a pomocą komponentów RGB(A) Wartości są normaliowane (0.0-1.0) Cwart kanał A może określać prerocstość Prkład: (1.0, 0.0, 0.0) (0.0, 1.0, 0.0) (0.0, 0.0, 1.0) (0.0, 0.0, 0.0) (1.0, 1.0, 1.0) (0.5, 0.5, 0.5) (1.0, 0.5, 0.5) (0.0, 0.6, 1.0) Użwa się do tego celu funkcji: glcolor3f(float r, float g, float b) lub analogicnch (4f, 3fv, 4fv,...) 11 maja 2018 r. Bartos Baluk 22

Atrbut wierchołków Atrbut wierchołków ustawiam pred utworeniem danego wierchołka. Na prkład ustawienie koloru tc się wsstkich wierchołków, które będą definiowane po określeniu tego koloru, dopóki kolor nie ostanie mienion na inn. Innm prkładem atrbutów wierchołków mogą bć wektor normalne i współrędne tekstur. Prkład: glcolor3f(1.0f, 0.0f, 0.0f); glbegin(gl_quads); glverte3f(-1.0f, -1.0f, 0.0f); glverte3f(1.0f, -1.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(-1.0f, 1.0f, 0.0f); glend(); glbegin(gl_quads); glcolor3f(0.0f, 0.0f, 0.0f); glverte3f(-1.0f, -1.0f, 0.0f); glcolor3f(1.0f, 0.0f, 0.0f); glverte3f(1.0f, -1.0f, 0.0f); glcolor3f(0.0f, 1.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glcolor3f(0.0f, 0.0f, 1.0f); glverte3f(-1.0f, 1.0f, 0.0f); glend(); 11 maja 2018 r. Bartos Baluk 23

DEFINICJA GEOMETRII Prkładowe dane Prkład będą dotcł prostego seścianu: v 5 v 6 Dla uproscenia na raie pomijam wsstko poa pocjami wierchołków 11 maja 2018 r. Bartos Baluk 24

DEFINICJA GEOMETRII Prkładowe dane Pocje wierchołków: = (0,1,0) = (1,1,0) = (0,1,1) = (1,1,1) v 5 = (0,0,0) v 6 = (1,0,0) = (0,0,1) = (1,0,1) 11 maja 2018 r. Bartos Baluk 25

DEFINICJA GEOMETRII Prkładowe dane Kolejność definicji ścian nasego seścianu: Zakładam użcie prmitwu GL_QUADS v 5 v 6 Ocwiście możliwe będie skanie na wdajności np. użwając GL_QUAD_STRIP, ale chcem prost prpadek GL_QUADS nie jest dostępn we współcesnch wersjach OpenGL, ale powala łatwiej obraować agadnienie 11 maja 2018 r. Bartos Baluk 26

DEFINICJA GEOMETRII Prkładowe dane Kolejność definicji wierchołków: v0 -> v1 -> v2 -> v3 v3 -> v2 -> v6 -> v7 v7 -> v6 -> v5 -> v4 v4 -> v5 -> v1 -> v0 v0 -> v3 -> v7 -> v4 v1 -> v5 -> v6 -> v2 Cli: 24 estaw po 3 współrędne po 4 bajt 24 3 4 = 288 bajtów Pamiętam o backface cullingu akładam że front-face' definiowane są preciwnie do ruchu wskaówek egara (CCW) v 5 v 6 11 maja 2018 r. Bartos Baluk 27

IMMEDIATE MODE Najprostse podejście polegające na bepośredniej Ogólna charakterstka definicji geometrii Wartości (np. współrędne wierchołków) dla każdoraowego żądania renderowania, prekawane są do serwera od nowa Onaca to ogromną ilość danch presłaną co klatkę od klienta do serwera Onaca to ogromną licbę wwołań funkcji OpenGL v 5 v 6 11 maja 2018 r. Bartos Baluk 28

IMMEDIATE MODE Otwarcie bloku definicji geometrii Sposób użcia Wskaanie pożądanego prmitwu Definicja geometrii Wierchołki, wektor normalne, współrędne tekstur... Zamknięcie bloku Zlecenie renderowania, ewentualne buforowanie Prkład dla pierwsego quada: v v 5 v 6 1 v 2 glbegin(gl_quads); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glend(); 11 maja 2018 r. Bartos Baluk 29

IMMEDIATE MODE Dla całego seścianu: Prkład użcia glbegin(gl_quads); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(0.0f, 1.0f, 0.0f); W każdej klatce wsłam do serwera pocje wsstkich wierchołków Nie mieniają się po co? Powtarające się wierchołki wsłane są kilkukrotnie Już ostał presłane po co? glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 0.0f); v 5 v 6 glend(); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(1.0f, 0.0f, 1.0f); 11 maja 2018 r. Bartos Baluk 30

DISPLAY LIST Skompilowana sekwencja instrukcji mieniającch Ogólna charakterstka stan serwera Prechowwana w pamięci kart graficnej Ra utworona nie może bć modfikowana Nie nadaje się do animacji brł Sterownik odpowiada a to, b lista ostała wkonana efektwnie Każda lista ma prpisan identfikator, któr służ jej późniejsemu wwołaniu (żądaniu renderowania) v 5 v 6 11 maja 2018 r. Bartos Baluk 31

DISPLAY LIST Utworenie displa list Sposób użcia Żądanie identfikatora Kompilacja displa list Wierchołki, wektor normalne, współrędne tekstur... Można dołącć inne mian stanu serwera Wwołanie displa list Żądanie renderowania użciem identfikatora v v 5 v 6 1 v 2 Prkład dla pierwsego quada: GLuint id = glgenlists(1); glnewlist(id, GL_COMPILE); glbegin(gl_quads); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glend(); glendlist(); // Renderowanie: glcalllist(id); 11 maja 2018 r. Bartos Baluk 32

DISPLAY LIST Dla całego seścianu: Prkład użcia v 5 v 6 GLuint id = glgenlists(1); glnewlist(id, GL_COMPILE); glbegin(gl_quads); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 0.0f, 1.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 1.0f); glverte3f(1.0f, 1.0f, 0.0f); glverte3f(0.0f, 1.0f, 0.0f); glverte3f(0.0f, 0.0f, 1.0f); glverte3f(0.0f, 0.0f, 0.0f); glverte3f(1.0f, 0.0f, 0.0f); glverte3f(1.0f, 0.0f, 1.0f); glend(); glendlist(); // // Dla każdej klatki: Pocje wsstkich wierchołków wsłam tlko ra Podcas renderowania kolejnch klatek korstam danch najdującch się w pamięci graficnej Znacąco skuje na tm wdajność Możliwości list wkracają poa wkłą definicję geometrii Możliwość użcia innch instrukcji mieniającch stan Nie ma możliwości modfikacji list po jej skompilowaniu glcalllist(id); 11 maja 2018 r. Bartos Baluk 33

VERTEX ARRAY Ciągła tablica po stronie klienta (w pamięci głównej) Ogólna charakterstka awierająca dane wierchołków Możliwość dowolnej manipulacji awartości Możliwość wbiórcego renderowania Rowiąuje problem redefinicji powtarającch się wierchołków, co daje oscędność pamięci Interleaved arras, cli łącone tablice dla różnch danch per-verte Np. pocja, wektor normaln, kolor, współrędne tekstur... Wsstko w jednej tablic (co ma i alet, i wad) v 5 v 6 11 maja 2018 r. Bartos Baluk 34

VERTEX ARRAY Utworenie tablic wartościami Sposób użcia Zwcajna tablica po stronie klienta Wskaanie serwerowi miejsca w pamięci, gdie najdują się dane Prekaanie adresu tablic Żądanie renderowania Można określić, które danch i w jakiej kolejności nas interesują v 5 v 6 11 maja 2018 r. Bartos Baluk 35

VERTEX ARRAY Prkład dla pierwsego quada: Sposób użcia (c.d.) GLfloat buffer[] = { 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f }; // Renderowanie: glenableclientstate(gl_vertex_array); glvertepointer(3, GL_FLOAT, 0, buffer); gldrawarras(gl_quads, 0, 4); gldisableclientstate(gl_vertex_array); v 5 v 6 Ab wskaać gdie prechowwane są wartości innch atrbutów, można posłużć się funkcjami: glnormalpointer(), gltecoordpointer(), glverteattribpointer(),... 11 maja 2018 r. Bartos Baluk 36

VERTEX ARRAY Wbiórce renderowanie można realiować Wbiórce renderowanie na kilka różnch sposobów: Podakres tablic od-do: gldrawarras(primitive, from, to) Wskaanie indeksów wierchołków: gldrawelements(primitive, num_indices, inde_tpe, indices) Dięki temu nie musim redefiniować wierchołków! Prkład cał seścian: v v 5 v 6 1 v 2 GLfloat buffer[] = { 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f }; GLubte indices[] = { 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 0, 3, 7, 4, 1, 5, 6, 2 }; // Renderowanie: glenableclientstate(gl_vertex_array); glvertepointer(3, GL_FLOAT, 0, buffer); gldrawelements(gl_quads, 24, GL_UNSIGNED_BYTE, indices); gldisableclientstate(gl_vertex_array); 11 maja 2018 r. Bartos Baluk 37

VERTEX ARRAY Wbiórce renderowanie można realiować Wbiórce renderowanie na kilka różnch sposobów (c.d.): Wskaanie indeksów wierchołków ora ich akresu: gldrawrangeelements(primitive, start, end, num_indices, inde_tpe, indices) start i end określają akres wartości elementów tablic indeksów (nie akres tablic, któr ostanie użt!) Służ to do małej optmaliacji OpenGL będie wiediał, jakiego akresu indeksów się spodiewać be koniecności iterowania po tablic indeksów. W ten sposób może lepiej aplanować odct VA. Co cechuje Verte Arras? Możliwość dowolnej kontroli wartości w trakcie renderowania Prdatne pr animacji brł v 5 v 6 Koniecność presłania tablic do pamięci kart graficnej Dużo mniej odwołań do funkcji OpenGL 11 maja 2018 r. Bartos Baluk 38

WYBIÓRCZE RENDEROWANIE Prkład astosowania Inn prkład praktcnego wkorstania selektwnego renderowania geometrii użciem indeksów wierchołków: Level of detail (LOD) dla map wsokości v 5 v 6 Źródło obrau: http://windows-tech.info 11 maja 2018 r. Bartos Baluk 39

VERTEX ARRAY Prekawanie wartości dodatkowch atrbutów Dodatkowe atrbut wierchołków Nie tlko pocja (współrędne) jest wartością per-verte Wektor normalne, współrędne tekstur, wektor stcne, kolor, stopień niscenia, wiek, stopień deformacji, abrudenie, następna pocja,... Możem definiować własne atrbut, które wkorstam w nasch shaderach Są dwa podejścia rowiąania tej kwestii: Oddielne tablice dla każdego atrbutów Jedna tablica awierająca preplatające się wartości atrbutów (tw. interleaved arras) v 5 v 6 11 maja 2018 r. Bartos Baluk 40

INTERLEAVED ARRAYS Sposób diałania Interleaved arras prkład: Współrędne pocji (p) Wektor normaln (n) Współrędne 2D tekstur (t)... Parametr każdego atrbutu: offset odległość w bajtach od pocątku wierchołka v 5 v 6 stride odległość w bajtach pomięd wierchołkami Zakładając, że serokość każdej wartości to 4B, mam: offset(p) = 0, stride(p) = 32 offset(n) = 12, stride(n) = 32 offset(t) = 24, stride(t) = 32 11 maja 2018 r. Bartos Baluk 41

INTERLEAVED ARRAYS Sposób użcia Repreentacja interleaved arra w pamięci głównej punktu widenia programu Wgodnm podejściem jest użcie struktur C++ gwarantuje, że struktura ajmuje ciągł obsar pamięci, a składowe mają achowaną kolejność tpedef struct { GLfloat pos[3]; GLfloat normal[3]; GLfloat te[2]; } SVerte; SVerte buffer[]; v 5 v 6 glvertepointer(3, GL_FLOAT, sieof(sverte), buffer); glnormalpointer(gl_float, sieof(sverte), buffer + 3 * sieof(glfloat)); gltecoordpointer(2, GL_FLOAT, sieof(sverte), buffer + 6 * sieof(glfloat)); Zamiast artmetki wskaźników (mogącej doprowadić do problemów), warto wkorstać po prostu: &buffer[0].pos, &buffer[0].normal, &buffer[0].te 11 maja 2018 r. Bartos Baluk 42

INTERLEAVED ARRAYS Dodatkowe informacje Interleaved arras dodatkowe informacje: Jeśli np. planujem cęsto mieniać pocję wierchołków, poostawiając poostałe atrbut be mian, warto użć oddielnch tablic Warto dążć do tego, b stride bł równ wielokrotności 32. Wiele kart graficnch potrafi wted lepiej organiować odct pamięci Nawet kostem więksonego użcia pamięci, wprowadając padding! Możem określić stride jako 0, jeśli nase dane są ciasno upakowane (żadnego paddingu) i tablice awierają wartości tlko pojedncch atrbutów Jeśli nas układ danch jest standardow, można użć funkcji glinterleavedarras() w celu wboru tego układu (oscęda licbę wwołań funkcji OpenGL) v 5 v 6 11 maja 2018 r. Bartos Baluk 43

VBO Verte Buffer Object (VBO) technika powalająca Ogólna charakterstka na łatwe manipulowanie awartością pamięci kart graficnej Siostrana technika do Frame Buffer Object (FBO) i Piel Buffer Object (PBO) Powala areerwować, wpełnić, odctać, modfikować awartość bufora Po stronie klienta prechowwan jest jednie identfikator bufora Klient Serwer v 5 v 6 id (dane) VBO 11 maja 2018 r. Bartos Baluk 44

Sposób użcia VBO Wgenerowanie nowego bufora Otrmujem id bufora Bindowanie bufora Wbór bufora, któr ma stać się aktwn Określenie rodaju bufora (GL_ARRAY_BUFFER) Alokacja bufora Prekaanie danch do pamięci kart graficnej Określenie charakteru danch: c będą cęsto modfikowane, c też nie... Wpłwa na optmaln prdiał pamięci Wskaanie miejsc w pamięci v 5 v 6 Nie prekaujem wskaźników (bo ich nie mam), tlko określam licbowo offset i stride dla VBO Żądanie renderowania Można określić, które danch i w jakiej kolejności nas interesują 11 maja 2018 r. Bartos Baluk 45

Prkład użcia VBO Prkład dla pierwsego quada: GLfloat buffer[] = {0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f}; GLuint vbo; glgenbuffers(1, &vbo); glbindbuffer(gl_array_buffer, vbo); glbufferdata(gl_array_buffer, sieof(buffer), buffer, GL_STATIC_DRAW); delete[] buffer; // Ocwiście jest to błędne użcie (alokacja podcas kompilacji) glbindbuffer(gl_array_buffer, 0); // Renderowanie: glbindbuffer(gl_array_buffer, vbo); glenableclientstate(gl_vertex_array); glvertepointer(3, GL_FLOAT, 0, 0); v 5 v 6 gldrawarras(gl_quads, 0, 4); gldisableclientstate(gl_vertex_array); glbindbuffer(gl_array_buffer, 0); // Sprątanie: gldeletebuffers(1, &vbo); 11 maja 2018 r. Bartos Baluk 46

Modfikacja awartości VBO Istnieje możliwość modfikacji awartości VBO: Ponowna alokacja pamięci i wsłanie danch glbufferdata(target, sie, data, usage) Popre astąpienie cęści danch glbuffersubdata(target, offset, sie, data) Pamięć nie jest realokowana! Warto użć nawet, jeśli amieniam całą awartość bufora. Popre mapowanie pamięci glmapbuffer(target, access) glunmapbuffer(target) Otrmujem wskaźnik do pamięci, możem dowolnie ją ctać i mieniać Kostowna snchroniacja GPU Warto astanowić się nad wdajnością i snchroniacją v 5 v 6 Wkorstanie techniki podwójnego buforowania (dwa VBO, które amieniam miejscami rsujem jednego, drugi uaktualniam) może rowiąać problem snchroniacji 11 maja 2018 r. Bartos Baluk 47

Indeksowanie VBO IBO Wbiórce renderowanie VBO jest jesce lepse Mam możliwość stworenia bufora indeksów: Inde Buffer Object (IBO) IBO diała analogicnie do VBO: Musim go stworć, wbrać, aalokować, wpełnić, wolnić GL_ELEMENT_ARRAY_BUFFER IBO jest prechowwan w pamięci kart graficnej odct podcas renderowania nie wmaga presłania danch pamięci głównej! v 5 v 6 11 maja 2018 r. Bartos Baluk 48

Prkład użcia IBO Prkład cał seścian: GLfloat buffer[] = { 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f }; GLubte indices[] = { 0, 1, 2, 3, 3, 2, 6, 7, 7, 6, 5, 4, 4, 5, 1, 0, 0, 3, 7, 4, 1, 5, 6, 2 }; GLuint vbo, ibo; glgenbuffers(1, &vbo); glbindbuffer(gl_array_buffer, vbo); glbufferdata(gl_array_buffer, sieof(buffer), buffer, GL_STATIC_DRAW); delete[] buffer; glgenbuffers(1, &ibo); glbindbuffer(gl_element_array_buffer, ibo); glbufferdata(gl_element_array_buffer, sieof(indices), indices, GL_STATIC_DRAW); delete[] indices; v 5 v 6 // Renderowanie: glenableclientstate(gl_vertex_array); glvertepointer(3, GL_FLOAT, 0, buffer); gldrawelements(gl_quads, 24, GL_UNSIGNED_BYTE, 0); gldisableclientstate(gl_vertex_array); // Sprątanie: glbindbuffer(gl_array_buffer, 0); glbindbuffer(gl_element_array_buffer, 0); gldeletebuffers(1, &vbo); gldeletebuffers(1, &ibo); 11 maja 2018 r. Bartos Baluk 49

Bartos Baluk DEFINIOWANIE GEOMETRII Sposob opisu geometrii brł w OpenGL. http://baluk.net/psb Grafika Komputerowa, Informatka, I Rok