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

Podobne dokumenty
GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

GRAFIKA KOMPUTEROWA 10: Antyaliasing

Mieszanie kolorów. Dorota Smorawa

Janusz Ganczarski. OpenGL Pierwszy program

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Temat: Transformacje 3D

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

OpenGL Światło (cieniowanie)

dr inż. Jacek Dąbrowski, KSG

6 Przygotował: mgr inż. Maciej Lasota

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

OpenGL Światło (cieniowanie)

Światła i rodzaje świateł. Dorota Smorawa

Plan wykładu. Akcelerator 3D Potok graficzny

Temat: Wprowadzenie do OpenGL i GLUT

Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

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

Rysowanie punktów na powierzchni graficznej

OpenGL przezroczystość

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

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

Materiały. Dorota Smorawa

3 Przygotował: mgr inż. Maciej Lasota

Tekstury. Dorota Smorawa

Studium podyplomowe. Programowanie w OpenGL. Michał Turek, AGH Kraków

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

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

OpenGL Zaawansowana grafika komputerowa

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

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

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

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

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

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

Rzutowanie DOROTA SMORAWA

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

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

Wizualizacja 3D. dr inż. Marcin Gabryel

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

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

Filtrowanie tekstur. Kinga Laurowska

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

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

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

8 Przygotował: mgr inż. Maciej Lasota

Julia 4D - raytracing

Szybkie tworzenie grafiki w GcIde

1 Temat: Wprowadzenie do biblioteki OpenCV

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

OpenGL teksturowanie

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

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

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

Pierwsze kroki z easy Soft CoDeSys Eaton Corporation. All rights reserved.

Efekty dodatkowe w rasteryzacji

Architektura systemów komputerowych Ćwiczenie 3

Zaawansowany kurs języka Python

Bartłomiej Filipek

Teksturowanie (ang. texture mapping)

Zmiana rozdzielczości ekranu

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

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

OpenGL - tekstury Mapowanie tekstur

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Podstawy grafiki komputerowej

Programowanie układów graficznych

Zmiana rozdzielczości ekranu

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Grafika komputerowa Wstęp do OpenGL

Plan wykładu. Wprowadzenie Program graficzny GIMP Edycja i retusz zdjęć Podsumowanie. informatyka +

Architektura Komputerów

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

2 Przygotował: mgr inż. Maciej Lasota

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

Rendering sceny z modelem węzła

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Poniżej pokazane są poszczególne etapy, w nawiasach kwadratowych znajdują się nazwy tekstur, które utworzymy w projekcie, a przy strzałkach nazwy

Grafika komputerowa. Oko posiada pręciki (100 mln) dla detekcji składowych luminancji i 3 rodzaje czopków (9 mln) do detekcji koloru Żółty

Obcinanie grafiki do prostokąta

Karty graficzne możemy podzielić na:

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

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

Zaawansowane programowanie w C++

Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje!

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

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

Programowanie, część III

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

PRZEWODNIK PO PRZEDMIOCIE

Plan wykładu. Wprowadzenie Program graficzny GIMP Edycja i retusz zdjęć Podsumowanie. informatyka +

Grafika Komputerowa 3D Etap drugi

Grafika komputerowa Wstęp do OpenGL

Podstawy programowania w języku C++

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Transkrypt:

Wizualizacja 3D

glwindowpos2d Funkcja wprowadzona w wersji 1.4 biblioteki OpenGL Funkcja pozwala na ustawienie rastra względem okna, a nie względem macierzy modelu Stosowana podczas pisania tekstów, np.: void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++) glutbitmapcharacter (GLUT_BITMAP_9_BY_15,string [i]); }

Mgła Obok oświetlenia i teksturowania wpływa na realność sceny Włączenie mgły: glenable(gl_fog);

Parametry mgły Funkcje do zmiany parametrów mgły void glfogf (GLenum pname, GLfloat param) void glfogi (GLenum pname, GLint param) void glfogfv (GLenum pname, const GLfloat *params) void glfogiv (GLenum pname, const GLint *params) Gdzie: param rodzaj parmetru mgły pname nazwa parametru Parametry: GL_FOG_MODE (GL_LINEAR, GL_EXP, GL_EXP2) domyślanie GL_EXP GL_FOG_DENSITY (dowolna wartość) domyślnie 1 gęstość mgły GL_FOG_START (dowolna wartość) domyślnie 0 minimalna odległość oddziaływania mgły GL_FOG_END (dowolna wartość) domyślnie 1 maksymalna odległość oddziaływania mgły GL_FOG_INDEX (numer koloru) GL_FOG_COLOR (RGBA) domyślnie (0,0,0,0) GL_FOG_COORD_SRC (GL_FOG_COORD, GL_FRAGMENT_DEPTH) domyślnie GL_FRAGMENT_DEPTH

Mgła (cd) Obliczenia mgły związane są z wyliczeniem współczynnika f, zgodnie z GL_FOG_MODE: GL_LINEAR GL_EXP GL_EXP2

Rodzaje mgły Mgła odległościowa - GL_FOG_COORD_SRC parametr c obliczany jest na podstawie odległości od obserwatora. Intensywność mgły zależy od odległości od obserwatora Mgła objętościowa - GL FOG COORD Dla każdego z wierzchołków określany jest parametr c. Intensywność mgły można kształtować w dowolny sposób przy pomocy funkcji: void glfogcoordf (GLfloat coord); void glfogcoordd (GLdouble coord)

Dodatkowe opcje mgły Funkcja glhint umożliwia sterowanie renderingiem mgły glhint(gl_fog_hint, hintval) hintval może przyjąć następujące wartości: GL_DONT_CARE OpenGL decyduje o renderingu GL_NICEST dobrze wyglądająca mgła. Generowana jest dla każdego piksela GL_FASTEST mgła liczona jest dla każdego wierzchołka

Mieszanie barw Blending to mieszanie barw. Polega na ustaleniu wynikowego koloru piksela jako kombinacji koloru źródłowego i przeznaczenia. Włączenie mieszania barw: glenable (GL_BLEND) Wyłączenie funkcją gldisable(..)

Mieszanie barw (cd) Domyślnie kolor wyliczany jest na podstawie koloru źródła (R s, G s, B s, A s ) oraz koloru docelowego (R d, G d, B d, A d ) Współczynniki S r, S g, S b, S a i D r, D g, D b, D a są współczynnikami mieszania kolorów

Mieszanie barw (cd) Współczynniki S r, S g, S b, S a i D r, D g, D b, D a są obliczane przy pomocy funkcji void glblendfunc (GLenum src, GLenum dst) parametry src i dst określają sposób obliczenia współczynników GL_ZERO - (0, 0, 0, 0) GL_ONE - (1, 1, 1, 1) GL_SRC_COLOR - (Rs, Gs, Bs, As) GL_ONE_MINUS_SRC_COLOR - (1, 1, 1, 1) (Rs,Gs,Bs,As) GL_DST_COLOR - (Rd,Gd,Bd,Ad) GL_ONE_MINUS_DST_COLOR - (1, 1, 1, 1) (Rd,Gd,Bd,Ad) GL_SRC_ALPHA - (As,As,As,As) GL_ONE_MINUS_SRC_ALPHA - (1, 1, 1, 1) (As,As,As,As) GL_DST_ALPHA - (Ad,Ad,Ad,Ad) GL_ONE_MINUS_DST_ALPHA - (1, 1, 1, 1) (Ad,Ad,Ad,Ad) GL_CONSTANT_COLOR - (Rc,Gc,Bc,Ac) GL_ONE_MINUS_CONSTANT_COLOR - (1, 1, 1, 1) (Rc,Gc,Bc,Ac) GL_CONSTANT_ALPHA - (Ac,Ac,Ac,Ac) GL_ONE_MINUS_CONSTANT_ALPHA - (1, 1, 1, 1) (Ac,Ac,Ac,Ac) GL_SRC_ALPHA_SATURATE - (f, f, f, 1), f = min (As, 1 Ad) Domyślne wartości to void glblendfunc (GL_ONE, GL_ZERO )

Bufor akumulacyjny Bufor akumulacyjny pozwala na łączenie kilku obrazów równocześnie. Jest podobny do bufora kolorów. Efekty uzyskiwane dzięki buforowi akumulacyjnemu: rozmycie w ruchu (motion blur) głębia ostrości (depth of field) antyaliasing pełnoekranowy (Full Scene Anti Aliasing) Miękkie cienie (soft shadows) Bufor akumulacyjny nie jest wspierany przez stare karty graficzne Jego użycie związane jest z dużą ilością obliczeń

Bufor akumulacyjny (cd) Sterowanie buforem akumulacyjnym odbywa się przy pomocy funkcji void glaccum(glenum op, GLfloat value) Gdzie Parametry op decyduje o operacji wykonywanej na buforze Value wartość jaka wykorzystywana jest podczas wykonywania tej operacji

Operacje na buforze akumulacyjnym GL_ACCUM dodawanie do wartości bufora GL_LOAD zapisanie nowej wartości GL_RETURN kopiowanie z bufora akumulacyjnego do bufora kolorów

Operacje na buforze akumulacyjnym GL_MULT mnożenie wartości zawartych w buforze przez wartość value GL_ADD dodawanie wartości value do wartości w buforze akumulacyjnym

Bufor akumulacyjny (cd) Czyszczenie bufora akumulacyjnego void glclear(gl_accum_buffer_bit) Kolor czyszczenia bufora akumulacyjnego void glclearaccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) Inicjalizacja bufora w przypadku GLUT polega na dodaniu GLUT_ACCUM po wywołaniu glutinitdisplaymode

Antyaliasing Antyaliasing (patrz wykład 1) wygładzanie krawędzi Techniki: Uzupełnienie o dodatkowe piksele brzegów figury Rysowanie obiektów w rozdzielczości większej niż docelowa i przeskalowanie

Jakość renderingu Funkcja zmieniająca jakości reneringu: void glhint(glenum target, GLenum mode) Gdzie target element renderingu GL_FOG_HINT - jakość mgły; GL_FASTES lub GL_NICEST, GL_LINE_SMOOTH_HINT - antyaliasing linii, GL_PERSPECTIVE_CORRECTION_HINT - korekcja perspektywy przy renderingu tekstur, GL_POINT_SMOOTH_HINT - antyaliasing punktów, GL_POLYGON_SMOOTH_HINT - antyaliasing wielokątów, GL_GENERATE_MIPMAP_HINT - generowanie mipmap, GL_TEXTURE_COMPRESSION_HINT - kompresja tekstur, mode jakość GL_FASTEST szybkość GL_NICEST jakość GL_DONT_CARE domyślne ustawienia

Antyaliasing punktów Włączenie antyaliasingu punktów: glenable(gl_point_smooth) Dodatkowo należy włączyć mieszanie kolorów glblendfunc(gl_src_alpha,gl_one_minus_s RC_ALPHA)

Antyaliasing linii Włączenie antyaliasingu glenable(gl_line_smooth) Dodatkowo należy włączyć mieszanie kolorów glblendfunc(gl_src_alpha,gl_one_minus_s RC_ALPHA)

Antyaliasing wielokątów Z użyciem bufora akumulacyjnego Scena jest rysowana wielokrotnie z niewielkim przesunięciem. Następnie składowe są skalowane i sumowane w buforze akumulacyjnym Wada: duża ilość obliczeń Wielopróbkowanie (multisampling) Polega na dodaniu dodatkowego bufora, niezależnego do bufora koloru w celu wyliczenia wartości pikseli na podstawie przyległych sąsiadów. Włączenie: glenable(gl_multisampling)

Pełny ekran Biblioteka GLUT umożliwia uruchomienie aplikacji w trybie pełnego ekranu Funkcja ustawiające rozdzielczość ekranu, liczbę bitów oraz częstotliwość odświeżania ekranu glutgamemodestring( "640x480:16@60" ); Włączenie trybu pełnego ekranu: glutentergamemode(); Wyłączenie trybu pełnego ekranu glutleavegamemode();

Pełny ekran - przykład int main(int argc, char * argv[]) { glutinit( &argc, argv ); glutinitdisplaymode( GLUT_RGBA GLUT_DOUBLE GLUT_DEPTH ); glutgamemodestring( "640x480:16@60" ); glutentergamemode(); glutdisplayfunc( display ); glutkeyboardfunc( keyboard ); glutmainloop(); } return 0;