Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. Funkcje OpenGL dostępne są z różnych języków na wielu platformach.
Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. WjęzykuC: Funkcje OpenGL dostępne są z różnych języków na wielu platformach. pliki nagłówkowe: #include <GL/glut.h>
Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. WjęzykuC: Funkcje OpenGL dostępne są z różnych języków na wielu platformach. pliki nagłówkowe: #include <GL/glut.h> #include <math.h> jeśli liczymy obroty, rzuty, itp.
Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. WjęzykuC: Funkcje OpenGL dostępne są z różnych języków na wielu platformach. pliki nagłówkowe: #include <GL/glut.h> #include <math.h> jeśli liczymy obroty, rzuty, itp. biblioteki do wspólnej kompilacji: gcc-lgl-lglu-lglut-lm...
Wykład 10. Wprowadzene do malarstwa, str. 2 OpenGL Open Graphics Library Typowy Makefile: # nazwa programu: PROG = wprawki # biblioteki: LIBS=-lGL-lGLU-lglut-lm $(PROG):$(PROG).c gcc-wall-std=c99 $(PROG).c-o $(PROG) $(LIBS) usun: rm-f$(prog)*
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry); tworzy okno: glutcreatewindow(nazwa na ramce);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry); tworzy okno: glutcreatewindow(nazwa na ramce); ustalakolortła:glclearcolor(r,g,b,α);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry); tworzy okno: glutcreatewindow(nazwa na ramce); ustalakolortła:glclearcolor(r,g,b,α); wywołuje funkcję użytkownika odwzorowującą scenę w okno i przekazuje jej rozmiary okna: glutreshapefunc(funkcja);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry); tworzy okno: glutcreatewindow(nazwa na ramce); ustalakolortła:glclearcolor(r,g,b,α); wywołuje funkcję użytkownika odwzorowującą scenę w okno i przekazuje jej rozmiary okna: glutreshapefunc(funkcja); wywołuje funkcję użytkownika rysującą scenę: glutdisplayfunc(funkcja);
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 3 Program główny ustala początkowy rozmiar okna: glutinitwindowsize(szerokość, wysokość); ustala początkową pozycję okna na ekranie: glutinitwindowposition(od lewej, od góry); tworzy okno: glutcreatewindow(nazwa na ramce); ustalakolortła:glclearcolor(r,g,b,α); wywołuje funkcję użytkownika odwzorowującą scenę w okno i przekazuje jej rozmiary okna: glutreshapefunc(funkcja); wywołuje funkcję użytkownika rysującą scenę: glutdisplayfunc(funkcja); uruchamia rysowanie: glutmainloop();
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4 glutinitwindowsize(400, 300); 300 400
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4 glutinitwindowsize(400, 300); glutinitwindowposition(200, 250); 200 250 300 400
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4 glutinitwindowsize(400, 300); glutinitwindowposition(200, 250); glutcreatewindow("wprawki"); 200 250 wprawki 300 400
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4 glutinitwindowsize(400, 300); glutinitwindowposition(200, 250); glutcreatewindow("wprawki"); glclearcolor(zolty, 0.0); 200 250 wprawki 300 400
Sztalugi i płótno Wykład 10. Wprowadzene do malarstwa, str. 4 glutinitwindowsize(400, 300); glutinitwindowposition(200, 250); glutcreatewindow("wprawki"); glclearcolor(zolty, 0.0); 200 250 wprawki Żeby okno się pojawiło, konieczna jest jeszcze komenda glutmainloop(); (por. program wprawki0.c). 300 400
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x z
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x [ 20..20] x z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x [ 20..20] y [ 15..15] x z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x [ 20..20] y [ 15..15] x z [ 5..5] z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 5 Funkcja wywołana w glutreshapefunc ustala geometrię. Patrzymy od strony dodatniej półosi z. Funkcja glortho(-20, 20,-15, 15,-5, 5); wyznacza prostopadłościan, którego zawartość zostanie przedstawiona: y x [ 20..20] y [ 15..15] x z [ 5..5] z...
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach HORYZONT rzut zbieżny perspektywiczny
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach HORYZONT rzut zbieżny perspektywiczny rzut równoległy
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach HORYZONT rzut zbieżny perspektywiczny rzut równoległy Funkcja glortho realizuje rzut równoległy
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach HORYZONT rzut zbieżny perspektywiczny rzut równoległy Funkcja glortho realizuje rzut równoległy; rzut zbieżny realizuje funkcja gluperspective (nie na tym wykładzie).
Kadrowanie i głębia ostrości Wykład 10. Wprowadzene do malarstwa, str. 6 O rzutowaniach HORYZONT rzut zbieżny perspektywiczny rzut równoległy Funkcja glortho realizuje rzut równoległy; rzut zbieżny realizuje funkcja gluperspective (nie na tym wykładzie). O zmienianiu punktu widzenia mowa będzie później.
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. Wykład 10. Wprowadzene do malarstwa, str. 7
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. W OpenGL rysunek powstaje z wierzchołków Wykład 10. Wprowadzene do malarstwa, str. 7
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. W OpenGL rysunek powstaje z wierzchołków: Wykład 10. Wprowadzene do malarstwa, str. 7 glbegin(gl LINE LOOP); glvertex3d(-5, 0, 0); glvertex3d( 0, 5, 0); glvertex3d( 5, 0, 0); glvertex3d( 0,-5, 0); glend();
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. W OpenGL rysunek powstaje z wierzchołków: Wykład 10. Wprowadzene do malarstwa, str. 7 glbegin(gl LINE LOOP); glvertex3d(-5, 0, 0); glvertex3d( 0, 5, 0); glvertex3d( 5, 0, 0); glvertex3d( 0,-5, 0); glend(); ( 5,0,0) (0,5,0) (0, 5,0) (5,0,0)
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. W OpenGL rysunek powstaje z wierzchołków: Wykład 10. Wprowadzene do malarstwa, str. 7 glbegin(gl LINE LOOP); glvertex3d(-5, 0, 0); glvertex3d( 0, 5, 0); glvertex3d( 5, 0, 0); glvertex3d( 0,-5, 0); glend(); ( 5,0,0) (0,5,0) (0, 5,0) (5,0,0) GL POINTS rysuje zbiór punktów. GL LINES rysuje pary odcinków. GL LINE STRIP rysuje łamaną otwartą. GL LINE LOOP rysuje łamaną zamkniętą. GL POLYGON rysuje wypełniony wielokąt.
Pierwsze szkice Funkcja wywołana w glutdisplayfunc tworzy rysunek. W OpenGL rysunek powstaje z wierzchołków: Wykład 10. Wprowadzene do malarstwa, str. 7 glbegin(gl LINE LOOP); glvertex3d(-5, 0, 0); glvertex3d( 0, 5, 0); glvertex3d( 5, 0, 0); glvertex3d( 0,-5, 0); glend(); ( 5,0,0) (0,5,0) (0, 5,0) (5,0,0) GL POINTS rysuje zbiór punktów. GL LINES rysuje pary odcinków. GL LINE STRIP rysuje łamaną otwartą. GL LINE LOOP rysuje łamaną zamkniętą. GL POLYGON rysuje wypełniony wielokąt. (por. program wprawki1.c).
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 8 Modyfikacje rysunku
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 8 Modyfikacje rysunku glcolor3d(kolor); ustalenie koloru(ważne aż do ustalenia nowego koloru); np. glcolor3d(1.0, 0.0, 0.0); oznaczaczerwony(r=1.0,g=0.0,b=0.0);
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 8 Modyfikacje rysunku glcolor3d(kolor); ustalenie koloru(ważne aż do ustalenia nowego koloru); np. glcolor3d(1.0, 0.0, 0.0); oznaczaczerwony(r=1.0,g=0.0,b=0.0); gllinewidth(liczba pikseli); ustalenie grubości linii(ważne aż do ustalenia nowej grubości); np. gllinewidth(5); oznacza linie szerokości 5 pikseli;
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 8 Modyfikacje rysunku glcolor3d(kolor); ustalenie koloru(ważne aż do ustalenia nowego koloru); np. glcolor3d(1.0, 0.0, 0.0); oznaczaczerwony(r=1.0,g=0.0,b=0.0); gllinewidth(liczba pikseli); ustalenie grubości linii(ważne aż do ustalenia nowej grubości); np. gllinewidth(5); oznacza linie szerokości 5 pikseli; glpushmatrix(); gltranslated(x, y, z); glpopmatrix(); przesunięcieobrazkaowektor(x,y,z).
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 9 Ciało funkcji rysującej musi
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 9 Ciało funkcji rysującej musi zaczynaćsięod glclear(gl COLOR BUFFER BIT); inaczej w rysunku mogą wystąpić śmieci
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 9 Ciało funkcji rysującej musi zaczynaćsięod glclear(gl COLOR BUFFER BIT); inaczej w rysunku mogą wystąpić śmieci
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 9 Ciało funkcji rysującej musi zaczynaćsięod glclear(gl COLOR BUFFER BIT); inaczej w rysunku mogą wystąpić śmieci; kończyćsięna glflush(); (ang. flush = spłukać) żeby przygotowany rysunek się pojawił.
Pierwsze szkice Wykład 10. Wprowadzene do malarstwa, str. 9 Ciało funkcji rysującej musi zaczynaćsięod glclear(gl COLOR BUFFER BIT); inaczej w rysunku mogą wystąpić śmieci; kończyćsięna glflush(); (ang. flush = spłukać) żeby przygotowany rysunek się pojawił.
Linie inne niż łamane Wykład 10. Wprowadzene do malarstwa, str. 10 Linie inne niż łamane są rysowane jako łamane z bardzo krótkich odcinków.
Linie inne niż łamane Wykład 10. Wprowadzene do malarstwa, str. 10 Linie inne niż łamane są rysowane jako łamane z bardzo krótkich odcinków. glbegin(gl LINE STRIP); for(double x=-4.0; x<=4.0; x+=przyrost) glvertex3d(x, x*x-7, 0); glend(); parabola
Linie inne niż łamane Wykład 10. Wprowadzene do malarstwa, str. 10 Linie inne niż łamane są rysowane jako łamane z bardzo krótkich odcinków. glbegin(gl LINE STRIP); for(double x=-4.0; x<=4.0; x+=przyrost) glvertex3d(x, x*x-7, 0); glend(); parabola glbegin(gl POLYGON); for(double kat=0; kat<=2*m PI; kat+=przyrost) glvertex3d(prom*cos(kat), prom*sin(kat), 0); glend(); koło pełne
Linie inne niż łamane Wykład 10. Wprowadzene do malarstwa, str. 10 Linie inne niż łamane są rysowane jako łamane z bardzo krótkich odcinków. glbegin(gl LINE STRIP); for(double x=-4.0; x<=4.0; x+=przyrost) glvertex3d(x, x*x-7, 0); glend(); parabola glbegin(gl POLYGON); for(double kat=0; kat<=2*m PI; kat+=przyrost) glvertex3d(prom*cos(kat), prom*sin(kat), 0); glend(); koło pełne (por. program wprawki2.c).
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar.
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar.
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar.
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar.
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar.
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar. (por. program wprawki3.c).
Ćwiczenie z rysowania buźki Wykład 10. Wprowadzene do malarstwa, str. 11 Buźka składa się z: okręgu stanowiącego obrys; koła stanowiącego wypełnienie; oczuzłożonychzdwóchłuków (odcinków okręgu); ust wycinkakoła; nosa kuli,wystającejwtrzeci wymiar. (por. program wprawki3.c). To,żenosjestkuląaniekołem,uwidocznisię,kiedybędziemymoglispojrzećnabuźkęzboku.
Zmiana punktu widzenia y Wykład 10. Wprowadzene do malarstwa, str. 12 x z...
Zmiana punktu widzenia y Wykład 10. Wprowadzene do malarstwa, str. 12 x... z
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 12 y x... z glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze)
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze)
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz wkierunkupunktu(0,0,0)
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz wkierunkupunktu(0,0,0) tak, żeby dodatnia półoś y wskazywała w górę rysunku.
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz wkierunkupunktu(0,0,0) tak, żeby dodatnia półoś y wskazywała w górę rysunku. Możemy to zmienić przez użycie funkcji glulookat: pierwsze trzy argumenty współrzędne oka
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz wkierunkupunktu(0,0,0) tak, żeby dodatnia półoś y wskazywała w górę rysunku. Możemy to zmienić przez użycie funkcji glulookat: pierwsze trzy argumenty współrzędne oka; następne trzy argumenty współrzędne punktu, w kierunku którego patrzymy
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 13 glulookat(gdzie jest oko, na co patrzy, co przedstawić na górze) Standardowo OpenGL patrzy odstronydodatniejpółosiz wkierunkupunktu(0,0,0) tak, żeby dodatnia półoś y wskazywała w górę rysunku. Możemy to zmienić przez użycie funkcji glulookat: pierwsze trzy argumenty współrzędne oka; następne trzy argumenty współrzędne punktu, w kierunku którego patrzymy; ostatnie trzy argumenty kierunek w górę obrazka.
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia Punkt widzenia po glulookat(3,0,1, 0,0,0, 0,1,0);
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia Punkt widzenia po glulookat(3,0,1, 0,0,0, 0,1,0); okonapłaszczyźniexz,bardzozprawej
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia Punkt widzenia po glulookat(3,0,1, 0,0,0, 0,1,0); okonapłaszczyźniexz,bardzozprawej centrum sceny w początku układu współrzędnych
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia Punkt widzenia po glulookat(3,0,1, 0,0,0, 0,1,0); okonapłaszczyźniexz,bardzozprawej centrum sceny w początku układu współrzędnych, ośypatrzywgórę.
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 14 Standardowy punkt widzenia Punkt widzenia po glulookat(3,0,1, 0,0,0, 0,1,0); okonapłaszczyźniexz,bardzozprawej centrum sceny w początku układu współrzędnych, ośypatrzywgórę. (por. program wprawki4.c).
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 15 OpenGL transformuje kierunki rzutowania(również oświetlenie itp.) przy pomocy rachunku macierzowego. Zmianie punktu widzenia odpowiada przekształcenie obrazu, polegające na pomnożeniu przez odpowiednią macierz.
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 15 OpenGL transformuje kierunki rzutowania(również oświetlenie itp.) przy pomocy rachunku macierzowego. Zmianie punktu widzenia odpowiada przekształcenie obrazu, polegające na pomnożeniu przez odpowiednią macierz. Polecenie ustalenia rzutu(np. równoległego) w funkcji odpowiedzialnej za geometrię należy poprzedzić informacją, że będziemy zmieniać macierz odpowiedzialną za perspektywę i że początkowo ma to być macierz jednostkowa
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 15 OpenGL transformuje kierunki rzutowania(również oświetlenie itp.) przy pomocy rachunku macierzowego. Zmianie punktu widzenia odpowiada przekształcenie obrazu, polegające na pomnożeniu przez odpowiednią macierz. Polecenie ustalenia rzutu(np. równoległego) w funkcji odpowiedzialnej za geometrię należy poprzedzić informacją, że będziemy zmieniać macierz odpowiedzialną za perspektywę i że początkowo ma to być macierz jednostkowa: voidgeom(intw,inth) { glmatrixmode(gl PROJECTION); glloadidentity(); glortho(-20, 20,-15, 15,-25, 25); }
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 16 OpenGL transformuje kierunki rzutowania(również oświetlenie itp.) przy pomocy rachunku macierzowego. Zmianie punktu widzenia odpowiada przekształcenie obrazu, polegające na pomnożeniu przez odpowiednią macierz. Polecenie ustalenia punktu widzenia w funkcji odpowiedzialnej za wyswietlanie należy poprzedzić informacją, że będziemy zmieniać macierz odpowiedzialną za widok modelu, oraz że początkowo ma to być macierz jednostkowa
Zmiana punktu widzenia Wykład 10. Wprowadzene do malarstwa, str. 16 OpenGL transformuje kierunki rzutowania(również oświetlenie itp.) przy pomocy rachunku macierzowego. Zmianie punktu widzenia odpowiada przekształcenie obrazu, polegające na pomnożeniu przez odpowiednią macierz. Polecenie ustalenia punktu widzenia w funkcji odpowiedzialnej za wyswietlanie należy poprzedzić informacją, że będziemy zmieniać macierz odpowiedzialną za widok modelu, oraz że początkowo ma to być macierz jednostkowa: void wyswietl(void) { glclear(gl COLOR BUFFER BIT); glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(3,0,1, 0,0,0, 0,1,0); twarz(); glflush(); }
Wykład 10. Wprowadzene do malarstwa, str. 17 Film ruchomy(ale ciągle niemy) Jak wyświetlać różniące się obrazki jeden za drugim, żeby uzyskać efekt ruchu?
Wykład 10. Wprowadzene do malarstwa, str. 17 Film ruchomy(ale ciągle niemy) Jak wyświetlać różniące się obrazki jeden za drugim, żeby uzyskać efekt ruchu? funkcji wyświetlającej zabrać odpowiedzialność za punkt widzenia: void wyswietl(void) { glclear(gl COLOR BUFFER BIT); glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(3,0,1, 0,0,0, 0,1,0); twarz(); glflush(); }
Wykład 10. Wprowadzene do malarstwa, str. 17 Film ruchomy(ale ciągle niemy) Jak wyświetlać różniące się obrazki jeden za drugim, żeby uzyskać efekt ruchu? funkcji wyświetlającej zabrać odpowiedzialność za punkt widzenia: void wyswietl(void) { glclear(gl COLOR BUFFER BIT); glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(3,0,1, 0,0,0, 0,1,0); twarz(); glflush(); } (ale pozostawić zbudowanie początkowego obrazka).
Wykład 10. Wprowadzene do malarstwa, str. 17 Film ruchomy(ale ciągle niemy) Jak wyświetlać różniące się obrazki jeden za drugim, żeby uzyskać efekt ruchu? funkcji wyświetlającej zabrać odpowiedzialność za punkt widzenia: void wyswietl(void) { glclear(gl COLOR BUFFER BIT); glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(3,0,1, 0,0,0, 0,1,0); twarz(); glflush(); } (ale pozostawić zbudowanie początkowego obrazka). dodatkowej funkcji powierzyć modyfikacje obrazka; np. co ustalony czas; albo co kliknięcie myszą.
Wykład 10. Wprowadzene do malarstwa, str. 18 Film ruchomy(ale ciągle niemy) W części main umieścić informację, że będzie używany czasomierz: gluttimerfunc(15, timer, 0); zwłoka w milisekundach funkcja czasomierza parametr dla fkcji czasomierza
Wykład 10. Wprowadzene do malarstwa, str. 18 Film ruchomy(ale ciągle niemy) W części main umieścić informację, że będzie używany czasomierz: gluttimerfunc(15, timer, 0); zwłoka w milisekundach Zdefiniować zmiany w obrazku: funkcja czasomierza parametr dla fkcji czasomierza void timer(int v) { staticdoublealfa=0; alfa+=katobrotu; if(alfa>=2*mpi)alfa-=2*mpi; glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(20*cos(alfa), 7, 20*sin(alfa), 0,0,0, 0,1,0); glutpostredisplay(); gluttimerfunc(15, timer, v); }
Wykład 10. Wprowadzene do malarstwa, str. 18 Film ruchomy(ale ciągle niemy) W części main umieścić informację, że będzie używany czasomierz: gluttimerfunc(15, timer, 0); zwłoka w milisekundach Zdefiniować zmiany w obrazku: funkcja czasomierza parametr dla fkcji czasomierza void timer(int v) { staticdoublealfa=0; alfa+=katobrotu; if(alfa>=2*mpi)alfa-=2*mpi; glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(20*cos(alfa), 7, 20*sin(alfa), 0,0,0, 0,1,0); glutpostredisplay(); gluttimerfunc(15, timer, v); } (por. program wprawki5.c).
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć?
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć?
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć?
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć?
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć? Sprawdzanie głębokości OpenGL może sprawdzać odległość elementów sceny od obserwatora i nie rysować dalszych, zasłoniętych przez bliższe.
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć? Sprawdzanie głębokości OpenGL może sprawdzać odległość elementów sceny od obserwatora i nie rysować dalszych, zasłoniętych przez bliższe. W części main: glenable(gl DEPTH TEST); W funkcji wyświetlającej: glclear(gl DEPTH BUFFER BIT);
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć? Sprawdzanie głębokości OpenGL może sprawdzać odległość elementów sceny od obserwatora i nie rysować dalszych, zasłoniętych przez bliższe. W części main: glenable(gl DEPTH TEST); W funkcji wyświetlającej: glclear(gl DEPTH BUFFER BIT);
Zasłanianie Wykład 10. Wprowadzene do malarstwa, str. 19 Fragmenty obrazka narysowane później zakrywają fragmenty narysowane wcześniej. Nos był narysowany na końcu, dlatego jest stale na wierzchu. Jak to leczyć? Sprawdzanie głębokości OpenGL może sprawdzać odległość elementów sceny od obserwatora i nie rysować dalszych, zasłoniętych przez bliższe. W części main: glenable(gl DEPTH TEST); (por. program wprawki6.c). W funkcji wyświetlającej: glclear(gl DEPTH BUFFER BIT);
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć?
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć?
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć?
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć? Lekko przesunąć w przestrzeni jeden wielokąt, żeby uniknąć współpłaszczyznowości z drugim
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć? Lekko przesunąć w przestrzeni jeden wielokąt, żeby uniknąć współpłaszczyznowości z drugim: glpushmatrix(); gltranslated(0, 0, 0.5); glbegin(gl POLYGON); odcinek okregu(1.414*4, 5*M PI/4, 7*M PI/4); glend(); glpopmatrix();
Zasłanianie dlaczego miga?! Wykład 10. Wprowadzene do malarstwa, str. 20 Dwa wielokąty wypełnienie buzki i usta są narysowane w tej samej płaszczyźnie, więc OpenGL nie wie, który powinien zasłaniać który. Jak to leczyć? Lekko przesunąć w przestrzeni jeden wielokąt, żeby uniknąć współpłaszczyznowości z drugim: glpushmatrix(); gltranslated(0, 0, 0.5); glbegin(gl POLYGON); odcinek okregu(1.414*4, 5*M PI/4, 7*M PI/4); glend(); glpopmatrix(); (por. program wprawki7.c).
Więcej przestrzeni! Wykład 10. Wprowadzene do malarstwa, str. 21 Drugiednoodtyłu glpushmatrix(); gltranslated(0, 0,-2); glcolor3d(czarn); //obrysbuzki... glcolor3d(szary); // wypelnienie buzki... glpopmatrix();
Więcej przestrzeni! Wykład 10. Wprowadzene do malarstwa, str. 21 Drugiednoodtyłu korzyśćzprzesunięć: glpushmatrix(); gltranslated(0, 0,-2); glcolor3d(czarn); //obrysbuzki... glcolor3d(szary); // wypelnienie buzki... glpopmatrix();
Więcej przestrzeni! Wykład 10. Wprowadzene do malarstwa, str. 21 Drugiednoodtyłu korzyśćzprzesunięć: glpushmatrix(); gltranslated(0, 0,-2); glcolor3d(czarn); //obrysbuzki... glcolor3d(szary); // wypelnienie buzki... glpopmatrix(); (por. program wprawki8.c).
Więcej przestrzeni! Wykład 10. Wprowadzene do malarstwa, str. 21 Drugiednoodtyłu korzyśćzprzesunięć: glpushmatrix(); gltranslated(0, 0,-2); glcolor3d(czarn); //obrysbuzki... glcolor3d(szary); // wypelnienie buzki... glpopmatrix(); (por. program wprawki8.c). Zadanie domowe: Dorobić powierzchnię walcową między dwoma szarymi kołami, żeby zamknąć pudełko.
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 22 Bez właściwego oświetlenia nie widać przestrzenności: Ilustracja z http://www.glprogramming.com/red/chapter05.html (por. program wprawki9.c).
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL);
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL); Oświetlenie jest rzeczą skomplikowaną.
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL); Oświetlenie jest rzeczą skomplikowaną. W OpenGL Można ustawiać m.in. charakterystykę światła(kolor, rozproszenie itp.)
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL); Oświetlenie jest rzeczą skomplikowaną. W OpenGL Można ustawiać m.in. charakterystykę światła(kolor, rozproszenie itp.), geometrię powierzchni odbijającej(jak jest powyginana)
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL); Oświetlenie jest rzeczą skomplikowaną. W OpenGL Można ustawiać m.in. charakterystykę światła(kolor, rozproszenie itp.), geometrię powierzchni odbijającej(jak jest powyginana), charakterystykę powierzchni odbijającej(kolor, połysk, gładkość, itp.)
Więcej światła! Wykład 10. Wprowadzene do malarstwa, str. 23 Ustawianie źródeł światła: glenable(gl LIGHTING); GLfloatswiatlomce[]={2,2,-1,0}; gllightfv(gl LIGHT0, GL POSITION, swiatlo mce); glenable(gl LIGHT0); glenable(gl COLOR MATERIAL); Oświetlenie jest rzeczą skomplikowaną. W OpenGL Można ustawiać m.in. charakterystykę światła(kolor, rozproszenie itp.), geometrię powierzchni odbijającej(jak jest powyginana), charakterystykę powierzchni odbijającej(kolor, połysk, gładkość, itp.), osłabianie i rozmywanie światła przez odległość, mgłę itd.