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



Podobne dokumenty
Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Janusz Ganczarski. OpenGL Pierwszy program

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

3 Przygotował: mgr inż. Maciej Lasota

Temat: Wprowadzenie do OpenGL i GLUT

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Temat: Transformacje 3D

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

2 Przygotował: mgr inż. Maciej Lasota

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

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

OpenGL i Qt. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Wizualizacja 3D. dr inż. Marcin Gabryel

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

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

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Programowanie Procesorów Graficznych

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

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

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

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

dr inż. Jacek Dąbrowski, KSG

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

OpenGL - maszyna stanu. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 7. Grupy atrybutów. Zmienne stanu.

Plan wykładu. Akcelerator 3D Potok graficzny

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.

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

Rzutowanie DOROTA SMORAWA

Grafika trójwymiarowa

8 Przygotował: mgr inż. Maciej Lasota

Przekształcenia geometryczne. Dorota Smorawa

OpenGL Zaawansowana grafika komputerowa

Teksturowanie. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 10. Tekstury. Proces nakładania tekstury.

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

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

Materiały. Dorota Smorawa

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

Wprowadzenie do QT OpenGL

Prosty program- cpp. #include <GL/glut.h>

Mechanizm sygnałów i slotów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4. Sygnały i sloty - definicja klasy

Teksturowanie (ang. texture mapping)

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Jak wybrać akcelerator 3D dedykowany aplikacjom typu MCAD?

Programowanie, część III

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

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

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

KARTA KURSU. Grafika komputerowa

Zaawansowany kurs języka Python

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

1. Prymitywy graficzne

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

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

Grafika komputerowa i wizualizacja

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

Efekt lustra 3D w OpenGL z wykorzystaniem bufora szablonowego (stencil buffer)

Zaawansowane systemy programowania grafiki. Wprowadzenie. Podstawy OpenGL

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

Tekstury. Dorota Smorawa

PRZEWODNIK PO PRZEDMIOCIE

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

Wizualizacja danych sensorycznych Projekt Tworzenie grafiki stereoskopowej. Marek Gulanowski

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

OpenGL - tekstury Mapowanie tekstur

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

Animowana grafika 3D. Opracowanie: J. Kęsik.

Rysowanie punktów na powierzchni graficznej

Grafika Komputerowa, Informatyka, I Rok

Grafika 3D OpenGL część II

Przyspieszanie sprzętowe

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

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

OpenGL - charakterystyka

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

1 Temat: Vertex Shader

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Qt sygnały i designer

Mieszanie kolorów. Dorota Smorawa

Mobilne aplikacje multimedialne. OpenGL

Wprowadzenie do klas w C++ oraz biblioteki opengl

WIZUALIZACJA INFORMACJI TEKSTOWEJ WSTĘP DO HTML 5 CANVAS

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

OpenGL przezroczystość

Bartłomiej Filipek

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

C Biblioteka G2. C.1 Koncepcja biblioteki G2.

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

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Biblioteka OpenGL: Wprowadzenie

Tworzenie aplikacji w języku Java

Transkrypt:

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych Wykład 5 Dr inż. Tomasz Olas olas@icis.pcz.pl OpenGL (Open Graphics Library) jest niskopoziomowa biblioteka graficzna (API - programowy interfes sprzętu graficzengo) służac a do tworzenia grafiki 2D i 3D. Obsługiwana jest przez wszystkie liczace się systemy operacyjne oraz większość procesorów graficznych (kart graficznych). Pierwsza wersja biblioteki OpenGL powstała w 1992 roku na bazie języka Iris GL opracowanego przez firmę Silicon Graphics Inc. (SGI). Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska OpenGL - Achitektura 1/?? OpenGL - zalety Wykład 5 p Aplikacja odwołuje się przez funkcje API OpenGL bezpośrednio do karty graficznej (z pominięciem systemu operacyjnego). Implementacja software owa - poszczególne funkcje moga być wykonywane przez CPU w przypadku, gdy procesor graficzny ich nie wspiera. możliwość zastosowania w aplikacjach 2D i 3D, szybkość działania - wykorzystanie akceleracji sprzętowej, wysoka jakość wizualna utworzonych aplikacji, standard przemysłowy - OpenGL Architecture Review Board (ATI, NVIDIA, SGI, 3Dlabs, Apple, Intel, IBM, Sun), Khronos Group, wiarygodność i przenośność (OpenGL jest niezależna od systemu operacyjnego), ciagły rozwój - aktuala wersja jest 3.0, łatwość użycia, rozszerzalność (OpenGL extensions). 3/?? Wykład 5 p

OpenGL - Zastosowanie OpenGL - Literatura telewizja, kino, przemysł CAD/CAM/CAE, rozrywka (gry i programy multimedialne), medycyna pokazowa (trójwymiarowe modele), wirtualna rzeczywistość, urzadzenia mobilne (OpenGL ES),... www.opengl.org R. Wright, M. Sweet. OpenGL - księga eksperta, Wydawnictwo Helion, Warszawa 1999. A. Orłowski. OpenGL. Leksykon kieszonkowy, Wydawnictwo Helion, 2005. OpenGL Reference Manual - http://ask.ii.uib.no/ebt-bin/nphdweb/dynaweb/sgi_developer/opengl_rm OpenGL Programming Guide - http://ask.ii.uib.no/ebt-bin/nphdweb/dynaweb/sgi_developer/opengl_pg http://nehe.gamedev.net man pages. Przykładowe możliwości OpenGL (I) 5/?? Przykładowe możliwości OpenGL (II) Wykład 5 p Rysowanie prymitywów - punkt, linia, trójkat, wielokat. Transformacje obiektów - możliwość obrotu, zmiany rozmiaru, przesunięcia obiektów. Gouraud shading (cieniowanie Gouraud a) - cieniowanie na podstawie interpolacji kolorów ze wszystkich wierzchołków wielokata. Texture mapping - Proces dodawania obrazu do prymitywnych elementów. Technika ta ma na celu podwyższenie realizmu obrazu. 7/?? Wykład 5 p

Przykładowe możliwości OpenGL (III) Przykładowe możliwości OpenGL (IV) Z-buffering - Z-bufor jest struktura, w której przechowywane sa współrzędne z każdego piksela. pozwala na ułożenie obiektów w kolejności od najdalszych do tych najbliższych położeniu obserwatora. Alpha blending (efekt przeźroczystości pikseli) - Służy do uzyskania przeźroczystości. Można uzyskać obiekt od całkowicie przeźroczystego (poprzez różne jej stopnie) do całkowicie nieprzeźroczystego. Double buffering (podwójne buforowanie) - używany do uzyskania płynnej animacji. Każda kolejna klatka animacji obiektu w ruchu konstruowana jest w ukrytym buforze i następnie wyświetlana. Pozwala to na wyświetlenie kompletnych już obrazów. Czcionki 2D i 3D Przykładowe możliwości OpenGL (V) 9/?? Przykładowe możliwości OpenGL (VI) Accumulation buffer Bufor, w którym wiele zrenderowanych ramek może zostać złożonych w celu otrzymania jednego połaczonego obrazu. Używany też do efektów takich jak motion blur (rozmycie) i anti-aliasing (uśrednianie kolorów krawędzi obiektu z tłem). Anti-aliasing Metoda renderowania używana do wygładzania linii i krzywych. Technika polega na uśrednianiu koloru przylegajacego do linii. W efekcie uzyskuje się wrażenie miękkości (krawędzie nie sa postrzępione). Powierzchnie Beziera 11/??

OpenGL - warstwy API Struktura aplikacji Od modelu do widoku 13/?? Prymitywy 15/??

Transformacje obiektów Obcinanie Rzutowanie 17/?? Rasteryzacja 19/??

Konwencje nazw funkcji Konwencje nazw - typy w OpenGL Wszystkie funkcje OpenGL maja następujacy format: <Przedrostek biblioteki><rdzeń polecenia> <Opcjonalnie liczba argumentów><opcjonalnie typ argumentów> Table 1-1 : Command Suffixes and Argument Data Types Suffix Data Type Typical Corresponding C-Language Type OpenGL Type Definition b 8-bit integer signed char GLbyte s 16-bit integer short GLshort i 32-bit integer int or long GLint, GLsizei f 32-bit floating-point float GLfloat, GLclampf d 64-bit floating-point double GLdouble, GLclampd ub 8-bit unsigned integer unsigned char GLubyte, GLboolean us 16-bit unsigned integer unsigned short GLushort ui 32-bit unsigned integer unsigned int or unsigned long GLuint, GLenum, GLbitfield 21/?? Konwencje nazw - przykłady Układ współrzędnych Wszystkie poniższe wywołania funkcji określaja punkt o współrzędnych (1,3): W OpenGL oś z jest zwrócona w kierunku obserwatora. glvertex2i(1, 3); glvertex2f(1.0, 3.0); GLfloat coords[] = 1.0, 3.0}; glvertex2fv(coords); 23/??

OpenGL i Qt Rzutowanie Biblioteka Qt może być wykorzystana do wyświetlania grafiki w OpenGL przy wykorzystaniu modułu QGL. Do wyświetlenia sceny w OpenGL w oknie Qt służy klasa QGLWidget. Tworzenie grafiki w takim oknie odbywa się poprzez wywołania funkcji z OpenGL, a nie wykorzystaniu klasy QPainter. Aby renderować scenę OpenGL należy utworzyć klasę dziedziczac a po klasie QGLWidget i zaimplementować metody: paintgl() resizegl() initializegl() W OpenGL do określenia rzutu równoległego służy funkcja glortho. glortho(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); Definiowanie widoku 25/?? Kolory w OpenGL Do ustalenia obszaru okna (widok), przeznaczonego do wykorzystania przez OpenGL służy funkcja glviewport glviewport(glint x, GLint y, GLsizei width, GLsizei height); Kolory w OpenGL sa zadawane w trybie RGB lub RGBA (red, green, blue, alpha) 27/??

Kolor tła paintgl - bufory Kolor tła może być ustawiony na dwa sposoby: poprzez funkcję z biblioteki OpenGL: void glclearcolor(glclampf red, GLclampf green, GLclampf blue, GLclampf alpha); lub przy wykorzystaniu metody qglcolor z klasy QGLWidget: void QGLWidget::qglColor (const QColor &c) const; W OpenGL w skład bufora ramki (pamięci obrazu) wchodza następujace bufory: bufor koloru (color buffer), bufor głębokości (depth buffer), bufor szblonowy (stencil buffer), bufor akumulacyjny (accumulation buffer). Przed przystapieniem do tworzenia sceny wykorzystywane bufory musza zostać wyczyszczone. Do tego celu służy funkcja glclear. Wyczyszczenie bufora kolorów (GL_COLOR_BUFFER_BIT): glclear(gl_color_buffer_bit); Macierze w OpenGL 29/?? Dodawanie obiektów do sceny Biblioteka OpenGL do wykonywania operacji na punktach wykorzystuje macierze. Macierze przechowywane sa w stosach macierzy. Podstawowymi stosami macierzy w OpenGL sa: GL_MODELVIEW - stos macierzy widoku, GL_PROJECTION - stos macierzy rzutowania. Zmiana aktualnego stosu macierzy: glmatrixmode(glenum mode); Do zresetowania aktualnej macierzy służy funkcja: glloadidentity(); Najpierw ustawia się jakiego typu prymitywy będa wykorzystywane do tworzenia bardziej złożonych obiektów, a następnie zadaje się ich poszczególne wierzchołki glbegin(gl_lines); glvertex3f(-1.0f, 0.0f, 0.0f); glvertex3f(1.0f, 0.0f, 0.0f); glvertex3f(-1.0f, 1.0f, 0.0f); glvertex3f(1.0f, 1.0f, 0.0f); glend() glbegin(gl_triangles); glcolor3f(1.0f, 0.0f, 0.0f); glvertex3f(-0.5f, 0.0f, 0.0f); glcolor3f(0.0f, 1.0f, 0.0f); glvertex3f(0.0f, 0.0f, 0.0f); glcolor3f(0.0f, 0.0f, 1.0f); glvertex3f(0.0f, 0.5f, 0.0f); glend() 31/??

Prymitywy OpenGL i Qt - Przykład I #include <QGLWidget> class MyGLWidget : public QGLWidget public: MyGLWidget(QWidget* parent = NULL); protected: void initializegl(); void paintgl(); void resizegl(int w, int h); }; OpenGL i Qt - Przykład II 33/?? OpenGL i Qt - Przykład III void MyGLWidget::initializeGL() qglclearcolor(qt::black); } void MyGLWidget::paintGL() glclear(gl_color_buffer_bit); glloadidentity(); void MyGLWidget::resizeGL(int w, int h) glviewport(0, 0, w, h); glmatrixmode(gl_projection); glloadidentity(); glortho(-3.0f, 3.0f, -3.0f, 3.0f, 1.0, -1.0); glmatrixmode(gl_modelview); } } glbegin(gl_lines); glvertex3f(-2.0, -2.0, 0.0); glvertex3f(2.0, 2.0, 0.0); glend(); 35/??

OpenGL i Qt - Przykład IV Ustawienie koloru obiektów int main(int argc, char **argv) QApplication a(argc, argv); } if (!QGLFormat::hasOpenGL()) qwarning("this system has no OpenGL support. Exiting."); return -1; } MyGLWidget widget; widget.resize(150, 150); widget.show(); return a.exec(); Do ustawiania aktualnego koloru służy funkcja glcolor* void glcolor3b s i f d ub us ui} (TYPE r, TYPE g, TYPE b); void glcolor4b s i f d ub us ui} (TYPE r, TYPE g, TYPE b, TYPE a); void glcolor3b s i f d ub us ui}v (const TYPE *v); void glcolor4b s i f d ub us ui}v (const TYPE *v); Do rysowania elementu wykorzystywany jest aktualnie ustawiony kolor: ustaw_kolor(red); rysuj_obiekt(a); rysuj_obiekt(b); ustaw_kolor(green); ustaw_kolor(blue); rysuj_obiekt(c); 37/?? Kolory wielokatów Wypełnianie wielokata jednolitym kolorem, zgodnym z kolorem aktualnym w momencie podawania ostatniego wierzchołka: glshademodel(gl_flat); Płynne przejście pomiędzy kolorami wierzchołków poprzez interpolację kolorów pośrednich: glshademodel(gl_smooth); 39/??