OpenGL model oświetlenia



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

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

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

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

6 Przygotował: mgr inż. Maciej Lasota

Materiały. Dorota Smorawa

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

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

Gry komputerowe, Informatyka N1, III Rok

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

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

OpenGL Światło (cieniowanie)

OpenGL Światło (cieniowanie)

Oświetlenie obiektów 3D

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

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

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

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

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

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

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

OpenGL przezroczystość

Grafika 3D OpenGL część II

OpenGL teksturowanie

Mieszanie kolorów. Dorota Smorawa

OpenGL - charakterystyka

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

GRK 4. dr Wojciech Palubicki

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

Temat: Transformacje 3D

Grafika komputerowa. Potok graficzny 3D. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Laboratorium 4 OpenGl (4) Oświetlenie sceny

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

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


3 Przygotował: mgr inż. Maciej Lasota

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

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

Grafika komputerowa. OpenGL. Podstawy

Tektura obiektów. Ogólnie sekcja opisująca teksturę wygląda następująco:

1. Oświetlenie Materiały i powierzchnie

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

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

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

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

Delphi 7 + OpenGL 1.1 Część I

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

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

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

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie III. Biblioteka OpenGL - wprowadzenie, obiekty trójwymiarowe: punkty, linie, wielokąty

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

Plan wykładu. Akcelerator 3D Potok graficzny

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

OpenGL Zaawansowana grafika komputerowa

Ćwiczenie nr 1 Szkielet aplikacji wykorzystującej bibliotekę OpenGL dla środowiska Windows z wykorzystaniem Visual C++

PODSTAWY BARWY, PIGMENTY CERAMICZNE

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

Teksturowanie (ang. texture mapping)

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Laboratorium grafiki komputerowej i animacji. Ćwiczenie III - Biblioteka OpenGL - wprowadzenie, obiekty trójwymiarowe: punkty, linie, wielokąty

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

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

Janusz Ganczarski. OpenGL Pierwszy program

Przekształcenia geometryczne. Dorota Smorawa

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

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

Przenośne urządzenia pomiarowe Nowy spectro-guide...59 Color-guide do małych detali...64 Color-guide do proszków... 64

Rozdział 5 Oświetlenie: cienie własne

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

8 Przygotował: mgr inż. Maciej Lasota

Przykład implementacji przeciażeń operatorów problem kolizji

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

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

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

Biblioteka OpenGL: Wprowadzenie

Zjawisko widzenia obrazów

Grafika 3D program POV-Ray

Interakcja Człowiek-Komputer Modelowanie postaci i otoczenia. Dr inż. Sławomir Samolej

1 Temat: Vertex Shader

Materiały dydaktyczne. Zaawansowane systemy informatyczne. Semestr VI. Laboratoria

WSTĘP DO GRAFIKI KOMPUTEROWEJ

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa


Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Interakcja Człowiek-Komputer Modelowanie postaci i otoczenia. Dr inż. Sławomir Samolej

Model oświetlenia WYKŁAD 4. Adam Wojciechowski

Zadania z podstaw programowania obiektowego

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

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

Elementy okna MatLab-a

Temat: Wprowadzenie do OpenGL i GLUT

Wyznaczanie zależności współczynnika załamania światła od długości fali światła

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Julia 4D - raytracing

DEFINICJA ERGONOMII. ERGONOMIA - nauka zajmująca się projektowaniem systemów pracy, produktów i środowiska zgodnie z fizycznymi.

Dzień dobry. Miejsce: IFE - Centrum Kształcenia Międzynarodowego PŁ, ul. Żwirki 36, sala nr 7

Bartłomiej Filipek

rgbf<składowa_r,składowa_g,składowa_b,filter>. Dla parametru filter przyjmij kolejno wartości: 0.60, 0.70, 0.80, 0.90, 1.00, np.:

Transkrypt:

Składowe światła OpenGL Światło otaczające (ambient) OpenGL model oświetlenia Nie pochodzi z żadnego określonego kierunku. Powoduje równomierne oświetlenie obiektów na wszystkich powierzchniach i wszystkich kierunkach. Światło rozproszone (diffuse) Pochodzi z określonego kierunku, odbijane jest od powierzchni równomiernie. Powierzchnie intensywniej oświetlone są jaśniejsze od mniej oświetlonych. Światło odbłysków (kierunkowe) (specular) Biegnie z określonego kierunku, odbijane jest w ściśle określonym kierunku. Przykład definiowanie źródła światła laserowego: Czerwony (R) Zielony (G) Niebieski (B) Alpha Św. kierunkowe 0,99 0,0 0,0 1,0 Św. rozproszone 0,10 0,0 0,0 1,0 Św. otaczające 0,05 0,0 0,0 1,0 1

OpenGL model materiału W rzeczywistym świecie materiały posiadają swój własny kolor zdolność odbijania większości fotonów o określonej długości fali i pochłaniania większości fotonów o innych długościach fali. Kolor obiektu na scenie jest wynikiem złożenia koloru oświetlenia i koloru materiału powiązanego z danym obiektem. Ilustracja problemu - program matlight: 2

OpenGL kreowanie oświetlenia sceny Sytuacja wyjściowa scena bez włączonego oświetlenia: // Włączenie oświetlenia {... glenable(gl_lighting);...} 3

OpenGL scena oparta na świetle otaczającym {GLfloat ambientlight[] = { 0.90f, 0.90f, 0.90f, 1.0f }; glenable(gl_lighting); gllightmodelfv( GL_LIGHT_MODEL_AMBIENT, ambientlight ); glenable(gl_color_material); glcolormaterial( GL_FRONT, GL_AMBIENT_AND_DIFFUSE );...} {GLfloat ambientlight[] = { 0.4f, 0.4f, 0.4f, 1.0f };... } 4

OpenGL scena oparta na świetle rozproszonym {GLfloat ambientlight[] = { 0.5f, 0.5f, 0.5f, 1.0f }; GLfloat diffuselight[] = { 0.7f, 0.7f, 0.7f, 1.0f }; GLfloat lightpos[] = { -50.f, 50.0f, 100.0f, 1.0f }; glenable(gl_lighting); gllightfv( GL_LIGHT0, GL_AMBIENT, ambientlight); gllightfv( GL_LIGHT0, GL_DIFFUSE, diffuselight); gllightfv( GL_LIGHT0, GL_POSITION, lightpos); glenable(gl_light0); glenable(gl_color_material); glcolormaterial(gl_front, GL_AMBIENT_AND_DIFFUSE);... } 5

OpenGL podstawowe definiowanie normalnych glbegin(gl_triangles); glnormal3d(0,0,-1); glvertex3d(10,0,-10); glvertex3d(-10,0,-10); glvertex3d(0,10,-10); glnormal3d(0,0,1); glvertex3d(10,0,10); glvertex3d(0,10,10); glvertex3d(-10,0,10); glend(); glbegin(gl_quads); glnormal3d(sqrt(2)/2,sqrt(2)/2,0); glvertex3d(10,0,10); glvertex3d(10,0,-10); glvertex3d(0,10,-10); glvertex3d(0,10,10); glnormal3d(-sqrt(2)/2,sqrt(2)/2,0); glvertex3d(-10,0,10); glvertex3d(0,10,10); glvertex3d(0,10,-10); glvertex3d(-10,0,-10); glnormal3d(0,-1,0); glvertex3d(10,0,10); glvertex3d(-10,0,10); glvertex3d(-10,0,-10);glvertex3d(10,0,-10); glend(); 6

OpenGL zaawansowane definiowanie normalnych // Normalizacja wektora: void ReduceToUnit(float vector[3]) { float length; length = (float)sqrt((vector[0]*vector[0]) + (vector[1]*vector[1]) + (vector[2]*vector[2])); if(length == 0.0f) length = 1.0f; vector[0] /= length; vector[1] /= length; vector[2] /= length; } 7

OpenGL zaawansowane definiowanie normalnych // Obliczanie normalnych i normalizacja void calcnormal(float v[3][3], float out[3]) { float v1[3],v2[3]; static const int x = 0; static const int y = 1; static const int z = 2; v1[x] = v[0][x] - v[1][x]; v1[y] = v[0][y] - v[1][y]; v1[z] = v[0][z] - v[1][z]; v2[x] = v[1][x] - v[2][x]; v2[y] = v[1][y] - v[2][y]; v2[z] = v[1][z] - v[2][z]; out[x] = v1[y]*v2[z] - v1[z]*v2[y]; out[y] = v1[z]*v2[x] - v1[x]*v2[z]; out[z] = v1[x]*v2[y] - v1[y]*v2[x]; ReduceToUnit(out); } 8

OpenGL zaawansowane definiowanie normalnych // Zastosowanie funkcji calcnormal { float normal[3]; float v[3][3] = { { 10.0f,0.0f,10.0f }, { 0.0f,10.0f,0.0f }, { -10.0f,0.0f,10.0f }, }; } calcnormal(v,normal); glbegin(gl_triangles); glnormal3fv(normal); glvertex3fv(v[0]); glvertex3fv(v[1]); glvertex3fv(v[2]); glend(); 9

OpenGL światło odbłysków { GLfloat ambientlight[] = { 0.3f, 0.3f, 0.3f, 1.0f }; GLfloat diffuselight[] = { 0.7f, 0.7f, 0.7f, 1.0f }; GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f}; Glfloat lightpos[] = { 0.0f, 150.0f, 150.0f, 1.0f }; GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glenable(gl_lighting); gllightfv(gl_light0,gl_ambient,ambientlight); gllightfv(gl_light0,gl_diffuse,diffuselight); gllightfv(gl_light0,gl_specular,specular); gllightfv(gl_light0,gl_position,lightpos); glenable(gl_light0); glenable(gl_color_material); glcolormaterial(gl_front, GL_AMBIENT_AND_DIFFUSE); glmaterialfv(gl_front, GL_SPECULAR,specref); glmateriali(gl_front,gl_shininess,128); } 10

OpenGL reflektor ustawienie parametrów źródła światła {GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f}; GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; GLfloat ambientlight[] = { 0.5f, 0.5f, 0.5f, 1.0f}; glenable(gl_lighting); gllightmodelfv(gl_light_model_ambient, ambientlight); gllightfv(gl_light0,gl_diffuse,ambientlight); gllightfv(gl_light0,gl_specular,specular); gllightfv(gl_light0,gl_position,lightpos); gllightf(gl_light0,gl_spot_cutoff,60.0f); gllightf(gl_light0,gl_spot_exponent,10.0f); glenable(gl_light0); glenable(gl_color_material); glcolormaterial(gl_front, GL_AMBIENT_AND_DIFFUSE); glmaterialfv(gl_front, GL_SPECULAR,specref); glmateriali(gl_front, GL_SHININESS,50);} 11

OpenGL reflektor symulacja źródła światła glrgb(0, 0, 255); auxsolidsphere(30.0f); glpushmatrix(); glrotatef(yrot, 0.0f, 1.0f, 0.0f); glrotatef(xrot, 1.0f, 0.0f, 0.0f); gllightfv(gl_light0,gl_position,lightpos); gllightfv(gl_light0,gl_spot_direction,spotdir); glrgb(255,0,0); gltranslatef(lightpos[0],lightpos[1],lightpos[2]); auxsolidcone(4.0f,6.0f); glpushattrib(gl_lighting_bit); gldisable(gl_lighting); glrgb(255,255,0); auxsolidsphere(3.0f); glpopattrib(); glpopmatrix(); 12

OpenGL- cieniowanie płaskie kolor wielokąta, to kolor ostatniego wierzchołka: { } glshademodel(gl_flat); glbegin(gl_triangles); glcolor3d(1,0,0); glcolor3d(0,1,0); glcolor3d(0,0,1); glend(); glvertex3d(0,20,0); glvertex3d(-30,-20,0); glvertex3d(30,-20,0); gładkie kolor każdego wierzchołka może być dobierany indywidualnie: { } glshademodel(gl_smooth); glbegin(gl_triangles); glcolor3d(1,0,0); glvertex3d(0,20,0); glcolor3d(0,1,0); glvertex3d(-30,-20,0); glcolor3d(0,0,1); glvertex3d(30,-20,0); glend(); 13

OpenGL- cieniowanie zastosowanie w oświetleniu Symulowanie oświetlenia: { } glshademodel(gl_flat); glcolor3d(1,0,0); glvertex3d(0,20,0); glcolor3d(1,0,0); glvertex3d(-30,-20,0); glcolor3d(0.3,0,0); glvertex3d(30,-20,0); 14

Typowe definiowanie normalnych: Uśrednianie normalnych Efekt wygładzenia krawędzi przez uśrednienie normalnych: 15

Przykład oświetlony walec void SetupRC(){ //definicja źródła światła GLfloat ambientlight[] = { 0.3f, 0.3f, 0.3f, 1.0f }; GLfloat diffuselight[] = { 0.7f, 0.7f, 0.7f, 1.0f }; GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f}; Glfloat lightpos[] = { 0.0f, 150.0f, 150.0f, 1.0f }; GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glenable(gl_depth_test); FrontFace(GL_CCW); glenable(gl_cull_face); glenable(gl_lighting); gllightfv(gl_light0,gl_ambient,ambientlight); gllightfv(gl_light0,gl_diffuse,diffuselight); gllightfv(gl_light0,gl_specular,specular); gllightfv(gl_light0,gl_position,lightpos); glenable(gl_light0); glenable(gl_color_material); glcolormaterial(gl_front, GL_AMBIENT_AND_DIFFUSE); glmaterialfv(gl_front, GL_SPECULAR,specref); glmateriali(gl_front,gl_shininess,128); glshademodel(gl_smooth); glclearcolor(1.0f, 1.0f, 1.0f, 1.0f ); glcolor3f(0.0,0.0,0.0);} 16

Przykład oświetlony walec void walec(double h, double r){ double angle,x,y, GL_PI = 3.1415; glbegin(gl_triangle_fan); glnormal3d(0.0,0.0,-1.0); glvertex3d(0.0f, 0.0f, 0.0f); for(angle = 0.0f; angle <= (2.0f*GL_PI); angle += (GL_PI/8.0f)) { x = r*sin(angle); y = r*cos(angle); glvertex2d(x, y); } glend(); glbegin(gl_triangle_fan); glnormal3d(0.0,0.0,1.0); glvertex3d(0.0, 0.0, h); for(angle = 0.0f; angle >= -(2.0f*GL_PI); angle -=(GL_PI/8.0f)) { x = r*sin(angle); y = r*cos(angle); glvertex3d(x, y, h);} glend(); glbegin(gl_quad_strip); for(angle = 0.0f; angle >= -(2.0f*GL_PI); angle-= (GL_PI/8.0f)) {x = r*sin(angle); y = r*cos(angle); glnormal3d(sin(angle),cos(angle),0.0); glvertex3d(x, y, h);glvertex3d(x, y, 0); }glend();} 17

OpenGL zestawienie funkcji związanych z generacją oświetlenia glenable(gl_lighting); // gldisable(gl_lighting); glenable(gl_color_material); // gldisable(gl_color_material); glenable(gl_light0); // gldisable(gl_light0); glcolormaterial(gl_front, GL_AMBIENT, ); // GL_BACK, GL_DIFFUSE, // GL_FRONT_AND_BACK,GL_SPECULAR, // GL_AMBIENT_AND_DIFFUSE, gllightf[v](gl_light0, GL_AMBIENT, parametry); // GL_DIFFUSE, // GL_SPECULAR, // GL_POSITION, // GL_SPOT_DIRECTION, // GL_SPOT_EXPONENT, // GL_SPOT_CUTOFF, // GL_CONSTANT_ATTENUATION, // GL_LINEAR_ATTENUATION, // GL_QUADRATIC_ATTENUATION, glmaterialf[v]( GL_FRONT, GL_AMBIENT,parametry); // GL_BACK, GL_DIFFUSE, // GL_FRONT_AND_BACK, GL_SPECULAR, // GL_AMBIENT_AND_DIFFUSE, gllightmodel(gl_light_model_ambient,parametry); 18