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

Podobne dokumenty
GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Grafika Komputerowa, Informatyka, I Rok

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

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

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

Gry Komputerowe - laboratorium 0

Temat: Wprowadzenie do OpenGL i GLUT

Wprowadzenie do QT OpenGL

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

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

Wprowadzenie do grafiki maszynowej. Wprowadzenie do historii OpenGL

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

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

Temat: Transformacje 3D

Biblioteka OpenGL: Wprowadzenie

Elementy do grafiki komputerowej. Wprowadzenie

Wprowadzenie do grafiki maszynowej. Wprowadzenie do wprowadzenia

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

Grafika Komputerowa. Wprowadzenie

Grafika 3D OpenGL część II

Wykład 4. Rendering (1) Informacje podstawowe

Systemy graficzne. dr inż. Mariusz Szwoch

Grafika komputerowa i wizualizacja

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

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

Janusz Ganczarski. OpenGL Pierwszy program

Projektowanie gier komputerowych. dr inż. Mariusz Szwoch

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

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

1 Temat: Vertex Shader

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Przyspieszanie sprzętowe

Programowanie, część III

INŻYNIERIA OPROGRAMOWANIA

Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki

Moc płynąca z kart graficznych

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

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

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Grafika komputerowa. Grafika komputerowa. Grafika komputerowa

PROGRAMOWANIE GRAFIKI 2D W ŚRODOWISKU EMBARCADERO RAD STUDIO XE4 Z WYKORZYSTANIEM BIBLIOTEKI DirectX

2 Przygotował: mgr inż. Maciej Lasota

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

Grafika trójwymiarowa

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

Google Android. Opracował Maciej Ciurlik

Modelowanie komputerowe dynamiki płynów Maciej Matyka Instytut Fizyki Teoretycznej

Wykład I. Wprowadzenie do baz danych

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Zakres egzaminu dyplomowego (magisterskiego) na kierunku INFORMATYKA

Julia 4D - raytracing

Konspekt pracy inżynierskiej

Programowanie procesorów graficznych GPGPU

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Karty graficzne możemy podzielić na:

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

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

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Bartosz Bazyluk SYNTEZA GRAFIKI 3D Grafika realistyczna i czasu rzeczywistego. Pojęcie sceny i kamery. Grafika Komputerowa, Informatyka, I Rok

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Projektowanie aplikacji graficznych. dr inż. Jarosław Zubrzycki

Wykład 5. Rendering (2) Geometria

Mobilne aplikacje multimedialne. OpenGL

Plan wykładu. Akcelerator 3D Potok graficzny

Dokumentacja aplikacji Szachy online

The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

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

Systemy Rozproszone Technologia ICE

Język ludzki kod maszynowy

Specjalność Systemy Aplikacyjne Grafiki i Multimediów. Wydział Informatyki, Politechnika Białostocka

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

INŻYNIERIA OPROGRAMOWANIA

Podstawy Programowania Obiektowego

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

Systemy operacyjne. Informatyka Stosowana, I rok. Krzysztof Wilk. Katedra Informatyki Stosowanej i Modelowania

UNREAL ENGINE 4 JAKO NARZĘDZIE DO TWORZENIA GIER

I - Microsoft Visual Studio C++

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

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

System zarządzający grami programistycznymi Meridius

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Podstawy programowania. Wprowadzenie

SYMULACJA OPADÓW ATMOSFERYCZNYCH I POKRYWY ŚNIEŻNEJ W GENERATORZE OBRAZU JASKIER IG

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

WYKORZYSTANIE PLATFORMY FireMonkey DO AUTOMATYZACJI ZADAŃ GRAFIKI W PROGRAMIE AutoCAD

Zalety programowania prostych gier komputerowych w Javie

Koło zainteresowań Teleinformatyk XXI wieku

Qt - podstawowe cechy

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

>>> Techniki rozbudowy systemów wbudowanych >>> Biblioteki wspomagające rozbudowę systemów wbudowanych. Name: Mariusz Naumowicz Date: 29 maja 2019

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Opracował: Jan Front

Transkrypt:

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok

PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Grafika czasu rzeczywistego opiera się na licznych uproszczeniach, by możliwe było spełnienie kryterium czasowego podczas dostarczania kolejnych klatek animacji. Źródło obrazu: Future Network USA 2

PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Jak to się dzieje, że wynikiem działania programu jest ciągła, interaktywna wizualizacja świata gry? Jak działa taki program, jak komunikuje się z kartą graficzną? Źródło obrazu: Warld of Tanks / Wargaming 3

PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Uproszczony schemat działania aplikacji grafiki czasu rzeczywistego Problem: zróżnicowanie platform sprzętowo-programowych Program Sterownik, OS Sprzęt Nasz program System operacyjny Karta graficzna 4

PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Uproszczony schemat działania aplikacji grafiki czasu rzeczywistego Ułatwienie: ujednolicone API graficzne Program Nasz program API Ujednolicone API do programowania grafiki czasu rzeczywistego Sterownik, OS Sprzęt System operacyjny Karta graficzna 5

PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Popularne API przeznaczone do programowania grafiki czasu rzeczywistego: Dicrect3D Vulkan (dawniej: 3dfx Glide) 6

Za rozwój odpowiada obecnie Khronos Group. Open Graphics Library Jest to API pozwalające na renderowanie grafiki w czasie rzeczywistym, zorientowane na wykorzystanie akceleracji sprzętowej nie jest biblioteką Strona www: http://opengl.org Jest to specyfikacja interfejsu programowania (API) Bibliotekami są implementacje na konkretne platformy, dostarczane przez producentów sprzętu, systemów operacyjnych itp. Jednym z głównych celów jest wieloplatformowość Konkurencją jest Microsoft Direct3D z DirectX 7

Kontekst renderowania (ang. rendering context) jest to swoisty kontener reprezentujący stan danej instancji. W jednej chwili na danej platformie może być powołanych do życia wiele niezależnych kontekstów, także występujących w obrębie jednego procesu. Najczęściej jedno okno wyświetlające wynik działania to jeden kontekst. opisuje zbiór funkcji i numerycznych stałych, pozwalających na renderowanie grafiki Nie obejmuje procedur obsługi wejścia, czy integracji z systemem operacyjnym w celu utworzenia kontekstu Istnieją multiplatformowe biblioteki dedykowane dla, które rozwiązują te problemy: np. GLUT (freeglut), GLFW Założeniem jest, że implementacja opiera się głównie na procedurach sprzętowych Operacje wykonywane bezpośrednio przez kartę graficzną, a nie software'owe rozwiązania oparte o CPU Wiele z oferowanych możliwości, jeśli nie są zaimplementowane w procedurach sprzętowych, może być emulowanych na CPU Konteksty mogą też dzielić między sobą niektóre informacje gdy jest to pożądane przez programistę. 8

Historia 1992 1.0 wydany przez Sillicon Graphics (SGI) 1997-2003 rozszerzenia 1.x 2004 2.0, zorientowany na programowalny potok renderowania (shadery, GLSL) 2006 rozwijany jest przez non-profitową organizację Khronos Group 2008 3.0, znaczne ograniczenie API, usunięcie archaicznych podejść 2010 4.0, odpowiednik DirectX 11 (np. teselacja) 2014 4.5, aktualna wersja ES Podzbiór standardu, przeznaczony do implementacji na urządzeniach mobilnych ES 3.1 wersja najbardziej aktualna (2014), kopmpatybilna z 4.5 9

dostarcza procedur, za pomocą których możemy w ujednolicony sposób programować grafikę: na różnych kartach graficznych na różnych systemach operacyjnych Program Nasz program Implementacja dla danej platformy Sterownik, OS Sprzęt System operacyjny Karta graficzna 10

Architektura wykorzystania jako warstwy pośredniej pomiędzy aplikacją, a kartą graficzną opiera się o model klient-serwer Specyfikacja wcale nie wymaga, aby obie strony znajdowały się w jednej, fizycznej maszynie! Serwer Klient (implementacja ) (program) Zlecenia renderowania Opis sceny Używa pamięci głównej Logika programu Użycie wynikowego obrazu Konteksty Renderowanie Komunikacja ze sterownikiem Dostęp do GPU i pamięci graficznej 11

Działanie należy rozumieć jako maszynę stanu Stanem nazywamy aktualne, chwilowe wartości wszystkich parametrów systemu Jeśli zmienimy wartość jakiegoś parametru, pozostaje ona zmieniona do czasu kolejnej zmiany Przykład: Jeśli zaczniemy w jednej klatce rysować czerwony prostokąt, wszystkie następne obiekty będą czerwone jeśli nie dokonamy zmiany koloru. Nawet w następnej klatce! 12

Współrzędne Układ współrzędnych w przestrzeni trójwymiarowej prawoskrętny Direct3D lewoskrętny +y +z +y +x +x +z Jednostki są zupełnie arbitralne, można przyjąć np. że jedna jednostka to 1 metr (albo 13 cm, albo 2 ft, albo...) 13

Układ współrzędnych w Trzeba zapamiętać albo mieć pod ręką! +y +x +z Jednostki są zupełnie arbitralne, można przyjąć np. że jedna jednostka to 1 metr (albo 13 cm, albo 2 ft, albo...) 14

GLUT GL Utility Toolkit Freeglut jest open-source'owym klonem, z którego będziemy korzystać (w pełni kompatybilny z GLUT) Dostarcza m.in.: Biblioteka narzędziowa do Międzyplatformową obsługę urządzeń wejścia (mysz, klawiatura) Łatwe tworzenie okien z kontekstem Procedury rysowania prostych brył (sześcian, kula itd.) Implementację pętli głównej (mainloop/gameloop) Wykorzystuje ideę callbacków, czyli funkcji obsługujących zdarzenia W ten sposób programista ma możliwość reakcji na zdarzenia Przypisanie callbacka odbywa się poprzez wywołanie specjalnej funkcji ustawiającej, z wskaźnikiem do funkcji obsługującej zdarzenie jako parametr 15

Przykładowy program int main(int argc, char * argv[]) { glutinit(&argc, argv); glutinitwindowsize(640, 360); glutinitdisplaymode(glut_rgba GLUT_DOUBLE GLUT_DEPTH); glutcreatewindow("/glut Example"); glutdisplayfunc(onrender); glutmainloop(); } return 0; void OnRender() { glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glmatrixmode(gl_modelview); glloadidentity(); glulookat(0.0f, 0.0f, -6.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); glcolor3f(1.0f, 0.0f, 0.0f); glutsolidcube(1.0f); glutswapbuffers(); glflush(); glutpostredisplay(); } 16

Programowanie z użyciem Nazwy funkcji : glnazwafunkcjiparam(...) param jeśli dana funkcja może przyjmować różne rodzaje parametrów, w ten sposób określany jest rodzaj tych parametrów oraz ich liczba, np.: f float, d double, i int, b bool itd. v vector (tablica) glnazwafunkcjiext(...), glnazwafunkcjiarb(...) Funkcjonalności pochodzące z rozszerzeń niebędących częścią standardu. Niektóre z nich w późniejszych wersjach przestają posiadać sufiksy EXT i ARB. glvertex3f(float x, float y, float z) glvertex3fv(float *xyz) glvertex2f(float x, float y) glvertex3d(double x, double y, double z) glvertex2i(int x, int y)... Do obsługi rozszerzeń warto użyć biblioteki GLEW Nazwy funkcji GLU oraz GLUT: glunazwafunkcji(...), glutnazwafunkcji(...) 17

VULKAN Nowe API będące spadkobiercą Vulkan na dzień dzisiejszy jest już stabilnym API. Pierwsza oficjalna wersja została wydana 16 lutego 2016 r. Aktualna wersja: 1.0.48 (15 kwietnia 2017) Vulkan powstał na bazie API Mantle opracowanego przez AMD. Karty graficzne wspierające Vulkan to m.in.: NVIDIA GEFORCE serii 600+ AMD Radeon 77xx+ Pierwszy raz zaprezentowane podczas Game Developer's Conference (GDC) 2015 Rozwijane przez Khronos Group Wsparcie: m.in. Source 2 (DOTA2), Unreal Engine 4, Unity 5.6, Android Nougat Karty graficzne obsługujące min. 4.x, ES 3.1 Współczesne, obciążone małym narzutem (ang. lightweight), wykorzystujące nowoczesne techniki, m.in.: Binarna postać pośrednia programów cieniujących Lepsze wsparcie dla sytuacji gdy CPU jest wąskim gardłem Nastawione na przetwarzanie wielowątkowe 18

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok