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

Podobne dokumenty
6 Przygotował: mgr inż. Maciej Lasota

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

Materiały. Dorota Smorawa

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

OpenGL model oświetlenia

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

OPEN_GL LABORATORIUM 6. tekst na podstawie: Edwarda Angela oraz Łukasza Grabca

OpenGL Światło (cieniowanie)

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie V. Biblioteka OpenGL - oświetlenie sceny

OpenGL Światło (cieniowanie)

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

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

Oświetlenie obiektów 3D

Gry komputerowe, Informatyka N1, III Rok

Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok

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

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

Mieszanie kolorów. Dorota Smorawa

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

3 Przygotował: mgr inż. Maciej Lasota

Temat: Transformacje 3D

GRAFIKA CZASU RZECZYWISTEGO Interakcja, ruch kamery, oświetlenie.

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

GRK 4. dr Wojciech Palubicki

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

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

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

Grafika komputerowa. Model oświetlenia. emisja światła przez źródła światła. interakcja światła z powierzchnią. absorbcja światła przez sensor

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

1. Oświetlenie Materiały i powierzchnie

Grafika 3D program POV-Ray - 1 -

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

Ustawienia materiałów i tekstur w programie KD Max. MTPARTNER S.C.

Rendering sceny z modelem węzła

Janusz Ganczarski. OpenGL Pierwszy program

8 Przygotował: mgr inż. Maciej Lasota

W naukach technicznych większość rozpatrywanych wielkości możemy zapisać w jednej z trzech postaci: skalara, wektora oraz tensora.

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

Polecenie ŚWIATPUNKT - ŚWIATŁO PUNKTOWE

Wykład 4. Rendering (1) Informacje podstawowe

Laboratorium 4 OpenGl (4) Oświetlenie sceny

Zjawisko widzenia obrazów

GRAKO: ŚWIATŁO I CIENIE. Modele barw. Trochę fizyki percepcji światła. OŚWIETLENIE: elementy istotne w projektowaniu

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

1. Prymitywy graficzne

Grafika 3D OpenGL część II

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

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

PODSTAWY BARWY, PIGMENTY CERAMICZNE

OpenGL przezroczystość

WYMAGANIA Z WIEDZY I UMIEJĘTNOŚCI NA POSZCZEGÓLNE STOPNIE SZKOLNE DLA KLASY CZWARTEJ H. zakres rozszerzony. Wiadomości i umiejętności

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Klasa 1 technikum. Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

Dział I FUNKCJE I ICH WŁASNOŚCI

Plan wykładu. Akcelerator 3D Potok graficzny

Grupa: Elektrotechnika, Studia stacjonarne, II stopień, sem. 1. wersja z dn Laboratorium Techniki Świetlnej

Laboratorium 2. Część I. Perspektywa. Obsługa poleceń myszy. 2. W sekcji przeznaczonej na definicję zmiennych globalnych dodaj następujące definicje:

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

Przekształcenia geometryczne. Dorota Smorawa

Trójwymiarowa grafika komputerowa rzutowanie

2 Przygotował: mgr inż. Maciej Lasota

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

Zadanie. Oczywiście masa sklejonych ciał jest sumą poszczególnych mas. Zasada zachowania pędu: pozwala obliczyć prędkość po zderzeniu

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

LUBELSKA PRÓBA PRZED MATURĄ 09 MARCA Kartoteka testu. Maksymalna liczba punktów. Nr zad. Matematyka dla klasy 3 poziom podstawowy

Julia 4D - raytracing

Grafika 3D program POV-Ray

Technikum Nr 2 im. gen. Mieczysława Smorawińskiego w Zespole Szkół Ekonomicznych w Kaliszu

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

Przygotowanie grafiki 3D do gier komputerowych

Programowanie Procesorów Graficznych

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

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

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

Elementy okna MatLab-a

GRAFIKA KOMPUTEROWA 10: Antyaliasing

ROZKŁAD MATERIAŁU NAUCZANIA KLASA 1, ZAKRES PODSTAWOWY

LUBELSKA PRÓBA PRZED MATURĄ 2017 poziom podstawowy

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Ćwiczenie 363. Polaryzacja światła sprawdzanie prawa Malusa. Początkowa wartość kąta 0..

Materiały dydaktyczne. Zaawansowane systemy informatyczne. Semestr VI. Wykłady

OpenGL teksturowanie

Przetwarzanie obrazów rastrowych macierzą konwolucji

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą

SPIS TREŚCI WSTĘP LICZBY RZECZYWISTE 2. WYRAŻENIA ALGEBRAICZNE 3. RÓWNANIA I NIERÓWNOŚCI

Tekstury. Dorota Smorawa

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

Podstawy POV-Ray a. Diana Domańska. Uniwersytet Śląski

Praktyczne przykłady wykorzystania GeoGebry podczas lekcji na II etapie edukacyjnym.

MINIMUM PROGRAMOWE DLA SŁUCHACZY CKU NR 1

OpenGL wprowadzenie. O.1 Informacje ogólne 286 O OPENGL WPROWADZENIE

str 1 WYMAGANIA EDUKACYJNE ( ) - matematyka - poziom podstawowy Dariusz Drabczyk

Transformacje. dr Radosław Matusik. radmat

Teksturowanie (ang. texture mapping)

EGZAMIN W KLASIE TRZECIEJ GIMNAZJUM W ROKU SZKOLNYM 2017/2018 CZĘŚĆ 2. ZASADY OCENIANIA ROZWIĄZAŃ ZADAŃ

Śledzenie promieni w grafice komputerowej

4/4/2012. CATT-Acoustic v8.0

Transkrypt:

Wizualizacja 3D

Światło W OpenGL można rozróżnić 3 rodzaje światła Światło otaczające (ambient light) równomiernie oświetla wszystkie elementy sceny, nie pochodzi z żadnego konkretnego kierunku Światło rozproszone (diffuse light) pada na obiekt z określonego kierunku, ale jest na nim rozpraszane we wszystkich kierunkach Światło odbite (specular light) światło kierunkowe. Pada na obiekt z określonego kierunku i odbijane jest w konkretnym kierunku

Włączenie oświetlenia Oświetlenie w OpenGL włącza się poleceniem glenable(gl_lighting) Dodatkowo zalecane jest stosowanie bufora głębokości. Wyłączenie: gldisable(gl_lighting) OpenGL posiada min. 8 źródeł światła, oznaczonych GL_LIGHT0, GL_LIGHT1, GL_LIGHT7. Pozostałe (w zależności od implementacji) można uzyskać poprzez zapis GL_LIGHT0+i, gdzie i to numer światła. Można sprawdzić ile dana implementacja posiada źródeł światła poprzez funkcję glgetintegerv z parametrem GL_MAX_LIGHTS. Poszczególne źródła światła włącza się poleceniem: glenable(gl_light0) Wyłącza poprzez polecenie gldisable(..)

Przykład

Parametry źródeł światła Każde źródło światła może być modyfikowane niezależnie od innych poleceniem gllight. Są dwie wersje funkcji gllight. Pierwsza umożliwia zmianę tylko jednego parametru, druga wielu naraz poprzez przekazanie tablicy. Zmianę jednego parametru umożliwia jedna z funkcji void gllightf (GLenum light, GLenum pname, GLfloat param) void gllighti (GLenum light, GLenum pname, GLint param) Zmianę wielu parametrów naraz umożliwiają funkcje void gllightfv (GLenum light, GLenum pname, const GLfloat *params) void gllightiv (GLenum light, GLenum pname, const GLint *params) gdzie params jest wskaźnikiem na tablicy (w praktyce pisze się tutaj nazwę tablicy), param jest wartością pojedynczego parametru, light jest numerem światła, np. GL_LIGHT1, pname to parametr, który jest modyfikowany (następny slajd)

Parametry źródeł światła cd. GL_AMBIENT - wartości składowych RGBA światła otaczającego, GL_DIFFUSE - wartości składowych RGBA światła rozproszonego, GL_SPECULAR - wartości składowych RGBA światła odbitego, GL_POSITION - czteroelementowy wektor (x, y, z, w), którego interpretacja zależy od wartości w; wartość 1, oznacza, że trzy pierwsze współrzędne wektora określają położenie źródła światła; wartość 0, oznacza, że źródło światła jest światłem kierunkowym, a jego promienie padają w kierunku zdefiniowanym przez trzy pierwsze współrzędne wektora, GL_SPOT_DIRECTION - znormalizowany (długości 1) trójwspółrzedny wektor określający kierunek reflektora, GL_SPOT_EXPONENT - wykładnik tłumienia kątowego reflektora; dopuszczalne są wartości z przedziału [0, 128]. Opisuje ściemnianie światła od centrum na zewnątrz reflektora (funkcja cosinus).

Parametry światła GL_SPOT_CUTOFF - kat odcięcia reflektora; dopuszczalne są wartości z przedziału [0, 90] oraz 180. Dla wartości 180 światło rozchodzi się równomiernie w całej przestrzeni. GL_CONSTANT_ATTENUATION - stały współczynnik tłumienia światła, GL_LINEAR_ATTENUATION - liniowy współczynnik tłumienia światła, GL_QUADRATIC_ATTENUATION - kwadratowy współczynnik tłumienia światła.

Parametry domyślne dla GL_LIGHT0 GL_AMBIENT (0,0,0,1) GL_DIFFUSE (1,1,1,1) GL_SPECULAR (1,1,1,1) GL_POSITION (0,0,1,0) GL_SPOT_DIRECTION (0,0,-1) GL_SPOT_EXPONENT 0 GL_SPOT_CUTOFF 180 GL_CONSTANT_ATTENUATION 1 GL_LINEAR_ATTENUATION 0 GL_QUADRATIC_ATTENUATION 0 Światło GL LIGHT0 jest światłem białym kierunkowym położonym w punkcie o współrzędnych (0, 0, 1). Światło skierowane jest zgodnie z kierunkiem wyznaczonym przez wektor o współrzędnych [0, 0, 1]. Pomimo kierunkowego charakteru stożek światła GL_LIGHT0 nie jest w żaden sposób ograniczony (parametr GL_SPOT_CUTOFF ma wartość 180) i światło rozchodzi się każdym kierunku. Przy domyślnych początkowych ustawieniach układu współrzędnych oraz bryły odcinania źródło światła GL_LIGHT0 znajduje się na środku płaszczyzny monitora (okna) i jest skierowane prostopadle w głąb monitora.

Parametry domyślne dla GL_LIGHT1-GL_LIGHT7 GL_AMBIENT (0,0,0,1) GL_DIFFUSE (0,0,0,1) GL_SPECULAR (0,0,0,1) GL_POSITION (0,0,1,0) GL_SPOT_DIRECTION (0,0,-1) GL_SPOT_EXPONENT 0 GL_SPOT_CUTOFF 180 GL_CONSTANT_ATTENUATION 1 GL_LINEAR_ATTENUATION 0 GL_QUADRATIC_ATTENUATION 0 Źródła światła GL_LIGHT1 GL_LIGHT7 różnią się do światła GL_LIGHT0 tylko barwą światła rozproszonego i odbitego.

Przykład

Oświetlenie Uwaga! Wartość oświetlenia powierzchni wyliczana jest na podstawie wierzchołków

Parametry modelu oświetlenia Do definiowania modelu oświetlenia stosuje się funkcje grupy gllightmodel void gllightmodelf (GLenum pname, GLfloat param) void gllightmodeli (GLenum pname, GLint param) void gllightmodelfv (GLenum pname, const GLfloat *params) void gllightmodeliv (GLenum pname, const GLint *params) Funkcje te podobnie jak gllight występują w dwóch wersjach różniących się przekazywaniem parametrów Parametr pname określa właściwość modelu oświetlenia, Param wartość nadawana danej właściwości

Właściwości modelu oświetlenia GL_LIGHT_MODEL_LOCAL_VIEWER - określa sposób liczenia kąta przy odbiciu. Dokładnie w kierunku kamery (1) lub w sposób uproszczony, ale szybszy, w kierunku osi z (0). GL_LIGHT_MODEL_TWO_SIDE - określa strony wielokątów, które będą brane pod uwagę przy wyliczaniu oświetlenia: przednia i tylna (1) lub tylko przednia (0). GL_LIGHT_MODEL_AMBIENT - ustala parametry światła otoczenia, które jest obecne nawet pod nieobecność innych źródeł światła. Początkowo ustawione jest dość ciemne światło: (2/10, 2/10, 2/10, 1) GL_LIGHT_MODEL_COLOR_CONTROL - parametr istotny dopiero przy nakładaniu tekstur. Kontroluje sposób mieszania oświetlenia z teksturą (czy najpierw tekstura później oświetlenie, czy oba na raz).

Właściwości modelu oświetlenia GL_LIGHT_MODEL_LOCAL_VIEWER - 0 GL_LIGHT_MODEL_TWO_SIDE - 0 GL_LIGHT_MODEL_AMBIENT - (2/10, 2/10, 2/10, 1) GL_LIGHT_MODEL_COLOR_CONTROL - GL_SINGLE_COLOR

Materiały Modyfikowanie właściwości materiałów umożliwiają funkcje z grupy glmaterial. Funkcje występują w dwóch wersjach różniących się sposobem przekazywania parametrów. void glmaterialf (GLenum face, GLenum pname, GLfloat para) void glmateriali (GLenum face, GLenum pname, GLint para) void glmaterialfv (GLenum face, GLenum pname, const GLfloat *params) void glmaterialiv (GLenum face, GLenum pname, const GLint *params) face ustala, która stronę wielokąta dotyczy modyfikowany parametr. GL_FRONT przednia strona wielokąta, GL_BACK - tylna strona wielokąta GL_FRONT_AND_BACK - obie strony wielokąta. pname określa zmieniana wartość parametru materiału.

Parametry materiału GL_AMBIENT - składowe RGBA określające stopień odbicia światła otaczającego, GL_DIFFUSE - składowe RGBA określające stopień rozproszenia światła rozproszonego, GL_AMBIENT_AND_DIFFUSE - składowe RGBA określające jednocześnie stopień odbicia światła otaczającego i stopień rozproszenia światła rozproszonego GL_SPECULAR - składowe RGBA określające stopień odbicia światła odbitego, GL_SHININESS - stała z przedziału [0, 128] określająca wykładnik odbłysku światła (ang. specular exponent) czyli regulacje stopnia występowania efektu rozbłysku obiektu; im większa wartość parametru, tym większe skupienie rozbłysku światła na obiekcie, GL_EMISSION - składowe RGBA światła emitowanego przez obiekt; taki obiekt nie staje się źródłem światła i nie oświetla innych obiektów sceny, wymaga to także utworzenia źródła światła, GL_COLOR_INDEXES - w indeksowym trybie kolorów trzy indeksy do tablicy kolorów określające kolejno składowe RGBA określające reakcje na światło otaczające, rozproszone i odbite.

Parametry materiału Parametry domyślne GL_AMBIENT (2/10, 2/10, 2/10, 1), GL_DIFFUSE (8/10, 8/10, 8/10, 1), GL_AMBIENT_AND_DIFFUSE - GL_SPECULAR (0,0,0,1), GL_SHININESS - 0 GL_EMISSION (0,0,0,1), GL_COLOR_INDEXES (0,1,1)

Materiały Przykładowe parametry Chrom Złoto Czarny plastik GL_AMBIENT 0.25, 0.25, 0.25 0.25, 0.2, 0.07 0.0, 0.0, 0.0 GL_DIFFUSE 0.4, 0.4, 0.4 0.75, 0.61, 0.23 0.01, 0.01, 0.01 GL_SPECULAR 0.77, 0.77, 0.77 0.63, 0.56, 0.37 0.5, 0.5, 0.5 GL_SHININESS 76.8 52.2 32.0

Śledzenie kolorów Możliwe jest definiowanie parametrów materiałów na podstawie kolorów wierzchołków określanych przy pomocy funkcji z grupy glcolor. Wybór parametrów materiału, które będą określane poprzez kolory wierzchołków, określa funkcja: void glcolormaterial (GLenum face, GLenum mode) Parametr face ustala, która stronę wielokąta dotyczy modyfikowany parametr. Dopuszczalne są GL_FRONT, GL_BACK, GL_FRONT_AND_BACK. Wartością domyślną jest GL_FRONT_AND_BACK. Parametr mode wskazuje, która z właściwości materiału ma być definiowana zgodnie z bieżącym kolorem wierzchołka. Dopuszczalne są niemal wszystkie opisane wcześniej własności materiałów: GL_EMISSION, GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR i GL_AMBIENT_AND_DIFFUSE. Wartością domyślną jest GL_AMBIENT_AND_DIFFUSE. Przed użyciem funkcji glcolormaterial trzeba wywołać funkcje glenable z parametrem GL_COLOR_MATERIAL

Wektory normalne Wektor normalny do danej powierzchni jest do niej prostopadły w określonym punkcie. Wykorzystywaliśmy pojęcie wektora normalnego w modelu obliczania natężenia światła odbitego. W OpenGL, gdzie powierzchnie reprezentowane są przez siatki wielokątów wektor normalny może być stowarzyszony z wielokątem (jest to wtedy rzeczywista normalna w sensie matematycznym)

glnormal3f( nx, ny, nz); glbegin( GL_TRIANGLES); glvertex3fv( v1); glvetrex3fv( v2); glvertex3fv( v3); glend();

Załóżmy, że trójkąt opisany jest wierzchołkami A, B i C. Wtedy określamy wektory v i w: v = [ Bx-Ax, By-Ay, Bz-Az ] w = [ Cx-Ax, Cy-Ay, Cz-Az ] Wektor normalny n obliczamy jako v*w, czyli: n = [ vy*wz-vz*wy, vz*wx-vx*wz, vx*wy-vy*wx ] OpenGL korzysta z wektorów normalnych jednostkowych, czyli o długości równej 1. Obliczony wyżej wektor n należy jeszcze znormalizować, to znaczy każdą jego współrzędną podzielić przez długość wektora (oznaczmy ją jako d): d = sqrt(nx 2 +ny 2 +nz 2 ) n = [ nx/d, ny/d, nz/d ]

Obliczanie oświetlenia w OpenGL 1. Wyznaczamy wektory normalne w każdym wierzchołku każdego obiektu. 2. Definiujemy źródła światła 3. Definiujemy model oświetlenia 4. Definiujemy własności materiałowe obiektów na scenie

Przykłady