Biblioteka OpenGL: Wprowadzenie

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

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

Shadery. Artur Staszczyk Bartłomiej Filipek

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Bartłomiej Filipek

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

Grafika komputerowa i wizualizacja

Potok graficzny i shadery. Hubert Rutkowski

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

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

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Janusz Ganczarski. OpenGL Pierwszy program

Wprowadzenie do QT OpenGL

Plan wykładu. Akcelerator 3D Potok graficzny

Programowanie procesorów graficznych GPGPU

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Karty graficzne możemy podzielić na:

Programowanie Procesorów Graficznych

Temat: Wprowadzenie do OpenGL i GLUT

Grafika Komputerowa, Informatyka, I Rok

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Przyspieszanie sprzętowe

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

Systemy graficzne. dr inż. Mariusz Szwoch

Gry Komputerowe - laboratorium 0

Julia 4D - raytracing

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

Temat: Transformacje 3D

Moc płynąca z kart graficznych

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Wprowadzenie do grafiki maszynowej. Wprowadzenie do historii OpenGL

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

Mobilne aplikacje multimedialne. OpenGL

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

Analiza moż liwości i porównanie nowych ję zyków do programowania grafiki

Bartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.

PORÓWNANIE WYDAJNOŚCI JĘZYKÓW CIENIOWANIA CG I HLSL

Gry Komputerowe Laboratorium 1. Zajęcia organizacyjne Animacja z uwzględnieniem czasu. mgr inż. Michał Chwesiuk 1/22. Szczecin,

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

1 Temat: Vertex Shader

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

Opis efektów kształcenia dla modułu zajęć

Architektura Procesorów Graficznych

Grafika 3D OpenGL część II

Materiały. Dorota Smorawa

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

OpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.

Bartosz Bazyluk GAME LOOP Podstawowy element silnika gry komputerowej. Programowanie Gier Komputerowych, Informatyka S1, III Rok

Scena 3D. Cieniowanie (ang. Shading) Scena 3D - Materia" Obliczenie koloru powierzchni (ang. Lighting)

Architektura Komputerów

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Programowanie, część III

GPGPU General-Purpose computing on the GPU. Piotr Stańczyk

Algorytmy renderingu dla programowalnych jednostek graficznych. prof. dr hab. inż. Maria Pietruszka mgr inż. Dominik Szajerman

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Wykład 5. Rendering (2) Geometria

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

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

6 Przygotował: mgr inż. Maciej Lasota

i3: internet - infrastruktury - innowacje

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Programowanie warstwy wizualnej gry

Grafika trójwymiarowa

dr inż. Jacek Dąbrowski, KSG

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Światło. W OpenGL można rozróżnić 3 rodzaje światła

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Przegląd architektury PlayStation 3

Teksturowanie (ang. texture mapping)

Grafika komputerowa Wstęp do OpenGL

INŻYNIERIA OPROGRAMOWANIA

Wykład 4. Rendering (1) Informacje podstawowe

INŻYNIERIA OPROGRAMOWANIA

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

Wprowadzenie do WebGL

Larrabee GPGPU. Zastosowanie, wydajność i porównanie z innymi układami

Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)

I - Microsoft Visual Studio C++

Programowanie Współbieżne

Obraz realistyczny. Realizm w grafice komputerowej. Realizm modelu: z!o#one siatki wielok$tów. Realizm modelu geometrycznego. Realizm modelu: spline'y

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Przekształcenia geometryczne. Dorota Smorawa

Wprowadzenie do grafiki komputerowej. W. Alda

Zaawansowany kurs języka Python

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Przegląd architektur kart. Sławomir Król

Różne rodzaje efektów

PRZEWODNIK PO PRZEDMIOCIE

Transkrypt:

Biblioteka OpenGL: Wprowadzenie Radosław Mantiuk Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

OpenGL - Koncepcja i architektura Aplikacja odwołuje się poprzez funkcje API OpenGL bezpośrednio do karty graficznej (z pominięciem systemu operacyjnego). Aplikacja np. gra komputerowa OpenGL biblioteka Sterownik karty graficznej driver Karta graficzna - GPU Implementacja software'owa - wszystkie funkcje mogą być wykonywane przez CPU, jednak producenci kart mogą zastępować część funkcji OpenGL swoimi rozwiązaniami sprzętowymi. Dla programisty ta zamiana jest niewidoczna.

Procesory GPU (Graphics Processor Unit) Programowalny procesor pracujący niezależnie od CPU. szybkie operacje macierzowe - architektura SIMD (w ograniczonym zakresie MIMD), zrównoleglenie obliczeń (wiele potoków renderujących, stream programming), mogą być wykorzystane do innych obliczeń GPGPU (General Purpose GPU), szybszy rozwój niż CPU (brak rozbudowanej logiki).

Architektura GPU Programowalny procesor pracujący niezależnie od CPU.

OpenGL - Open Graphics Library OpenGL: architektura systemu do programowania grafiki komputerowej (programowanie grafiki -> synteza obrazów) Wspomaganie sprzętowe (system graficzny czasu rzeczywistego). Bazuje na specyfikacji (nie implementacji). Rozszerzalność. Wieloplatformowość (OpenGL ES, wiele typów danych). Możliwość połączenia z różnymi językami programowania. Maszyna stanu (ang. rendering state machine). 1993: pierwsza wersja OpenGL 1.0 (== IRIX GL 5.0) w 1993 roku (IRIX GL 1.0 1983). 2001: OpenGL 1.4, vertex shader (programowalość operacji na wierzchołkach). 2003: OpenGL 1.5, fragment shader (oprogramowalność operacji na fragmentach). Standard - OpenGL Khronos Group (ARB (Architecture Review Board), 3Dlabs, Apple, ATI, Dell Computer, IBM, Intel, NVIDIA, SGI, and Sun Microsystems). Implementowana przez producentów kart graficznych. Dostępna na większości platform sprzętowych i programowych (OpenGL ES). OpenGL 4.2 (sierpień 2011)

OpenGL: Wieloplatformowość Biblioteka OpenGL nie obsługuje operacji wejścia (np. myszy, klawiatury) i wyjścia (np. monitora). GLFW Przykład interfejsu pomiędzy OpenGLem i systemem operacyjnym. Funkcje: Wyświetlanie okien, w których może odbywać się renderowanie realizowane przez OpenGL (może być otwarte wiele takich okien), Obsługa zdarzeń wejścia/wyjścia za pomocą callback ów. Obsługa urządzeń wejściowych (klawiatura, mysz, joystick). Obsługa timer ów. Inne biblioteki: GLUT, FreeGLUT, SDL.

OpenGL: Maszyna stanu OpenGL to zestaw funkcji służących do renderowania obrazu do bufora ramki. Na wyniki renderingu można wpływać poprzez zmianę stanów. dane wejściowe (scena) tworzenie sceny rendering zmiana stanów callback funkcje wywoływane po zaistnieniu określowych zdarzeń bufor ramki wyświetlanie

Przykład aplikacji: OpenGL + GLUT int main(int argc, char* argv[]) { glutinit(&argc, argv); glutinitwindowsize(1024,1024); glutinitdisplaymode(glut_double GLUT_DEPTH GLUT_RGBA); glutinitwindowposition(10,100); glutcreatewindow("gl Game"); } glutdisplayfunc(display); glutkeyboardfunc(keyboard_press); glutkeyboardupfunc(keyboard_up); gluttimerfunc( 1000, timer, 0 ); glutmainloop(); return 0; void display(void) { // wyczyszczenie bufora ramki (ang. frame buffer) glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); // kolor obiektu glmaterialfv( GL_FRONT, GL_DIFFUSE, colorgreen ); glmaterialfv( GL_FRONT, GL_AMBIENT, colordim ); glmaterialfv( GL_FRONT, GL_EMISSION, colordim ); glmaterialfv( GL_FRONT, GL_SPECULAR, colordim ); // polozenie i ksztalt obiektu glpushmatrix(); glrotatef( -30.0f, 0.0f, 1.0f, 0.0f ); glutsolidsphere( 1.5, 30, 30 ); glpopmatrix(); // wyswietlenie tylniego ekranu glutswapbuffers(); // wymyszenie przerysowania podczas nastepnej synchronizacji ekranu glutpostredisplay(); }

OpenGL: Potok przetwarzania (ang. pipeline) potok ciąg operacji wykonywanych przez silnik renderujący. Przetwarzanie trójkątów od reprezentacji 3D do pikseli w buforze ramki. Shader Model 4.0 fixed pipeline vs. programmable pipeline

Shaders shader program uruchamiany na karcie graficznej i wykonywany przez GPU kompilacja run-time składnia uwzględniająca przetwarzanie wektorowe pass-through lub zmiana potoku renderingu vertex shader, geometry shader, fragment shader wykonywane równolegle przez "rdzenie" GPU jeden kod programu wykonywany jest dla wielu danych (np. wszystkich wierzchołków modelu)

Vertex shader niejednorodna mgła, której występowanie uzależnione jest od współrzędnych wierzchołków kaustyki utworzone poprzez modyfikacje kształtu powierzchni wody

Vertex shader Program przetwarzający wierzchołki. zmiana mimiki twarzy, wspomaganie animacji postaci deformacje proceduralne

Vertex shader morphing rozmycie ruchu

Fragment shader Transformacje związane z fragmentami: obliczanie koloru fragmentu, teksturowanie, obliczanie oświetlenia (Phong shading), mgła. Zastosowania: proceduralne teksturowanie, obliczanie tekstury z wykorzystaniem danych ze standardowych tekstur, mapowanie tekstur.

Fragment shader - przykłady

Fragment shader - przykłady przezroczystość grafika nierealistyczna bump mapping

Programowanie shaderów /* Read shaders into the appropriate buffers */ vertexsource = CUTIL::filetobuf("phong.vert"); fragmentsource = CUTIL::filetobuf("phong.frag"); Języki programowania: GLSL - OpenGL Shading Language, CG (nvidia) HLSL (Microsoft) /* Create an empty vertex shader handle */ vertexshader = glcreateshader(gl_vertex_shader); /* Send the vertex shader source code to GL */ glshadersource(vertexshader, 1, (const GLchar**)&vertexsource, 0); /* Compile the vertex shader */ glcompileshader(vertexshader); /* Create an empty fragment shader handle */ fragmentshader = glcreateshader(gl_fragment_shader); /* Send the fragment shader source code to GL */ glshadersource(fragmentshader, 1, (const GLchar**)&fragmentsource, 0); /* Compile the fragment shader */ glcompileshader(fragmentshader); /* Linking */ shaderprogram = glcreateprogram(); /* Attach shaders to the program */ glattachshader(shaderprogram, vertexshader); glattachshader(shaderprogram, fragmentshader); gllinkprogram(shaderprogram); gluseprogram(shaderprogram);

Vertex shader - Phong shading varying vec3 N; varying vec3 v; void main(void) { } v = vec3(gl_modelviewmatrix * gl_vertex); N = normalize(gl_normalmatrix * gl_normal); gl_position = gl_modelviewprojectionmatrix * gl_vertex;

Fragment shader - Phong shading varying vec3 N; varying vec3 v; void main (void) { vec4 Iamb; vec4 Idiff; vec4 Ispec; for( int i = 0; i<3; i++ ) { vec3 L = normalize(gl_lightsource[i].position.xyz - v); vec3 E = normalize(-v); vec3 R = normalize(-reflect(l,n)); //calculate Ambient Term: Iamb = Iamb + gl_frontlightproduct[i].ambient; //calculate Diffuse Term: Idiff = Idiff + gl_frontlightproduct[i].diffuse * max(dot(n,l), 0.0); // calculate Specular Term: Ispec = Ispec + gl_frontlightproduct[i].specular * pow(max(dot(r,e),0.0), gl_frontmaterial.shininess); } // write Total Color: gl_fragcolor = gl_frontlightmodelproduct.scenecolor + Iamb + Idiff + Ispec ; }

Vertex Buffer Object (VBO) Zestaw funkcji umożliwiających wczytanie danych o geometrii do pamięci karty graficznej. Utworzenie bufora VBO: GenBuffers(sizei n, uint *buffers) Aktywacja VBO: BindBuffer(enum target, uint buffer) Wczytanie danych do VBO: BufferData(enum target, sizeiptrarb size, const void *data, enum usage) Skasowanie VBO: DeleteBuffers(sizei n, const uint *buffers)

Vertex Buffer Object (VBO) /*Initialise VBO - (Note: do only once, at start of program)*/ /* Create a new VBO and use the variable "trianglevbo" to store the VBO id */ GLuint trianglevbo; glgenbuffers(1, &trianglevbo); /* Make the new VBO active */ glbindbuffer(gl_array_buffer, trianglevbo); /* Upload vertex data to the video device */ glbufferdata(gl_array_buffer, NUM_OF_VERTICES_IN_DATA * 3 * sizeof(float), data, GL_STATIC_DRAW); /* Specify that our coordinate data is going into attribute index 0(shaderAttribute), and contains three floats per vertex */ glvertexattribpointer(shaderattribute, 3, GL_FLOAT, GL_FALSE, 0, 0); /* Enable attribute index 0(shaderAttribute) as being used */ glenablevertexattribarray(shaderattribute); /* Make the new VBO active. */ glbindbuffer(gl_array_buffer, trianglevbo);

OpenGL Mathematics (GLM Library) Biblioteka operacji matematycznych wykorzystywanych w języku GLSL. http://www.opengl.org/sdk/libs/glm/ http://glm.g-truc.net/0.9.5/index.html #include <glm/glm.hpp> int foo() { glm::vec4 Position = glm::vec4(glm::vec3(0.0), 1.0); glm::mat4 Model = glm::mat4(1.0); Model[3] = glm::vec4(1.0, 1.0, 0.0, 1.0); glm::vec4 Transformed = Model * Position; return 0; }

OpenCL: Open Computing Language środowisko wspierająca pisanie oprogramowania, które będzie uruchamiane na niejednorodnych platformach sprzętowych (CPU, GPU, FPGA, DSP): - interfejs kontrolujący platformy sprzętowe (w tym uruchamiający kernele na urządzeniach) - jednorodny język programowania różnych urządzeń, - interfejs do obliczeń równoległych, - zaawansowane zarządzanie pamięcią (4 poziomy dostępu) Cechy techniczne: - język podobny do C - wspomaganie obliczeń wektorowo-macierzowych Khronos standard (OpenCL 2.1) AMD od sierpnia 2015 pełna implementacja OpenCL 2.0

Literatura Dave Shreiner, The Khronos OpenGL ARB Working Group, Bill Licea-Kane, Graham Sellers, OpenGL Programming Guide: The Official Guide to Learning OpenGL, Addison-Wesley Professional, USA, 2012