Elementarne obiekty geometryczne, bufory. Dorota Smorawa

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

Mieszanie kolorów. Dorota Smorawa

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

Materiały. Dorota Smorawa

Temat: Transformacje 3D

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

Grafika 3D OpenGL część II

Przekształcenia geometryczne. Dorota Smorawa

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

OpenGL - charakterystyka

Rzutowanie DOROTA SMORAWA

Janusz Ganczarski. OpenGL Pierwszy program

6 Przygotował: mgr inż. Maciej Lasota

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

PRZEWODNIK PO PRZEDMIOCIE

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

1. Prymitywy graficzne

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

OpenGL model oświetlenia

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

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

Tekstury. Dorota Smorawa

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

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

8 Przygotował: mgr inż. Maciej Lasota

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

2 Przygotował: mgr inż. Maciej Lasota

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

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

Rysowanie precyzyjne. Polecenie:

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

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

Systemy wirtualnej rzeczywistości. Podstawy grafiki 3D

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

Nadają się do automatycznego rysowania powierzchni, ponieważ może ich być dowolna ilość.

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

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

GRAFIKA KOMPUTEROWA 10: Antyaliasing

Temat: Wprowadzenie do OpenGL i GLUT

Rysowanie punktów na powierzchni graficznej

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

Grafika trójwymiarowa

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

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

AUTOCAD MIERZENIE I PODZIAŁ

4. Rysowanie krzywych

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

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

Trójwymiarowa grafika komputerowa rzutowanie

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

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

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Programowanie Procesorów Graficznych

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

OPROGRAMOWANIE UŻYTKOWE

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

AUTOCAD teoria i zadania z podstaw rysowania Rysowanie linii, prostej, półprostej, punktu, trasy, polilinii. Zadania geodezyjne.

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Elementy okna MatLab-a

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

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

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

Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007

PODSTAWY INFORMATYKI 1 MATLAB CZ. 3

Wprowadzenie do klas w C++ oraz biblioteki opengl

IRONCAD. TriBall IRONCAD Narzędzie pozycjonujące

Badanie ruchu złożenia

Wykład VII PASCAL - grafika;

OpenGL. Biblioteka procedur graficznych. GLU = OpenGL Utility Library. GLX = OpenGL Extension to the X Window System [tm]

O czym należy pamiętać?

DesignCAD 3D Max 24.0 PL

Zad. 6: Sterowanie robotem mobilnym

Ćwiczenie nr 2 - Rysowanie precyzyjne

OpenGL Światło (cieniowanie)

PRZEWODNIK PO PRZEDMIOCIE

OpenGL Zaawansowana grafika komputerowa

GRK 4. dr Wojciech Palubicki

Układy współrzędnych GUW, LUW Polecenie LUW

OpenGL Światło (cieniowanie)

VII. WYKRESY Wprowadzenie

I. Potęgi. Logarytmy. Funkcja wykładnicza.

Simba 3D LOGO. Cele zajęć: - Poznanie zasad i sposobów tworzenia procedur z parametrami. - Poznanie zasad wywoływania procedur z parametrami.

1 Tworzenie brył obrotowych

1. Potęgi. Logarytmy. Funkcja wykładnicza

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

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

Transformacje obiektów 3D

ZAKRES PODSTAWOWY CZĘŚĆ II. Wyrażenia wymierne

Transformacje. dr Radosław Matusik. radmat

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

Wizualizacja danych sensorycznych Projekt Tworzenie grafiki stereoskopowej. Marek Gulanowski

11.3 Definiowanie granic obszaru przeznaczonego do kreskowania

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy)

Logo Komeniusz. Gimnazjum w Tęgoborzy. Mgr Zofia Czech

OpenGL przezroczystość

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

Transkrypt:

Elementarne obiekty geometryczne, bufory Dorota Smorawa

Elementarne obiekty Tworząc scenę 3D, od najprostszej, po najbardziej skomplikowaną, używamy obiektów złożonych, przede wszystkim podstawowych, elementarnych obiektów, tj. punkty, linie, trójkąty, czy czworokąty. Od tego, jaki rodzaj obiektów podstawowych użyjemy, zależy ile i w jaki sposób będziemy definiować wierzchołki. Definicję obiektu złożonego z obiektów podstawowych rozpoczyna się od wywołania funkcji glbegin z odpowiednim parametrem. Na przykład, jeśli chcemy rysować liniami, wywołanie będzie miało następującą postać: glbegin(gl_lines) // początek definicji obiektów glvertex3f(0.0f, 0.0f, 0.0f); // kolejne wierzchołki glvertex3f(1.0f, 0.0f, 0.0f); // kolejne wierzchołki glend(); // koniec definicji wielokątów Polecenie glend kończy definicję obiektu. Oczywiście liczba zdefiniowanych wierzchołków glvertex ściśle uzależniona jest od rodzaju użytego obiektu podstawowego, co jest chyba oczywiste. Linia to dwa punkty, trójkąt to trzy itd.

Elementarne obiekty Rozróżniamy następujące obiekty podstawowe: GL_POINTS rysowanie punktów, GL_LINES rysowanie linii prostych, GL_LINE_STRIP rysowanie linii łamanych, GL_LINE_LOOP rysowanie z linii obiektów zamkniętych, GL_TRIANGLES rysowanie trójkątów, GL_TRIANGLE_STRIP rysowanie trójkątów sklejanych, GL_TRIANGLE_FAN rysowanie wachlarzy trójkątów, GL_POLYGON rysowanie dowolnych wielokątów, GL_QUADS rysowanie kwadratów.

Wachlarze trójkątów Trójkątów sklejanych możemy np. wykorzystać do narysowania ścian bocznych i podstawy stożka: glbegin(gl_triangle_fan); // Rysowanie ściany bocznej stożka glvertex3f(0.0f, 0.0f, 2.5f); // Czubek stożka jest wspólnym wierzchołkiem wszystkich trójkątów z wachlarza for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f)) { x = 1.0f*sin(angle); // Wyliczenie współrzędnych x i y kolejnego wierzchołka y = 1.0f*cos(angle); if((ipivot %2) == 0) // Wybieranie koloru - zielony lub czerwony glcolor3f(0.0f, 1.0f, 0.0f); else glcolor3f(1.0f, 0.0f, 0.0f); ipivot++; // Inkrementacja zmiennej określającej rodzaj koloru // Definiowanie kolejnego wierzchołka w wachlarzu trójkątów glvertex2f(x, y); } glend(); // Zakończenie rysowania trójkątów stożka

Wachlarze trójkątów glbegin(gl_triangle_fan); // Rozpoczęcie rysowania kolejnego wachlarza trójkątów zakrywającego podstawę stożka glvertex2f(0.0f, 0.0f); // Środek wachlarza znajduje się na początku układu współrzędnych for(angle = 0.0f; angle < (2.0f*GL_PI); angle += (GL_PI/8.0f)) { x = 1.0f*sin(angle); // Wyliczenie współrzędnych x i y kolejnego wierzchołka y = 1.0f*cos(angle); if((ipivot %2) == 0) // Wybieranie koloru - zielony lub czerwony glcolor3f(0.0f, 1.0f, 0.0f); else glcolor3f(1.0f, 0.0f, 0.0f); ipivot++; // Inkrementacja zmiennej określającej rodzaj koloru glvertex2f(x, y); // Definiowanie kolejnego wierzchołka w wachlarzu trójkątów } glend(); // Zakończenie rysowania trójkątów podstawy stożka Wcześniej definiujemy zmienne: GLfloat x,y,angle; // Przechowują wartości współrzędnych i kąta int ipivot = 1; // Do oznaczania zamiennych kolorów

Ukrywanie powierzchni niewidocznych Modelując obiekty na scenie nakazujemy bibliotece OpenGL rysowanie wszystkich elementów składających się na dany obiekt, zarówno tych widocznych, jak i tych, które w danym momencie nie są bezpośrednio widoczne dla obserwatora. Możemy włączyć mechanizm ukrywania powierzchni niewidocznych, wówczas niewidoczne elementy nie biorą udziału w obliczeniach przy wyświetlaniu grafiki. Włączenie ukrywania powierzchni niewidocznych odbywa się za pomocą wywołania funkcji glenable z parametrem GL_CULL_FACE, lub wyłączyć analogicznie za pomocą funkcji gldisable: // Włączenie lub wyłączenie mechanizmu eliminowania ukrytych powierzchni if(icull) else glenable(gl_cull_face); gldisable(gl_cull_face);

Testowanie głębi Kolejny z mechanizmów wpływających na poprawne działanie zaprogramowanej sceny trójwymiarowej jest testowanie głębi. Testowanie głębi pozwala nam na właściwe rysowanie obiektów, tak aby elementy znajdujące się dalej i będące przesłonięte przez elementy znajdujące się bliżej nie były rysowane. Bez tego mechanizmu zawsze na wierzchu jest to, co było później narysowane. Do włączenia lub wyłączenia mechanizmu testowania głębi używamy funkcji glenable lub gldisable z parametrem GL_DEPTH_TEST. // Włączenie lub wyłączenie mechanizmu sprawdzania głębi if(idepth) else glenable(gl_depth_test); gldisable(gl_depth_test); Konieczne jest jeszcze użycie bufora głębi: // Wyczyszczenie okna i bufora głębi glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glutinitdisplaymode(glut_double GLUT_RGB GLUT_DEPTH);

Sposób rysowania obiektów Biblioteka OpenGL pozwala nam na rysowanie obiektów na trzy różne sposoby: jako wypełnione obiekty, jako szkielet złożony z samych linii lub jako same punkty wskazujące kolejne wierzchołki. Sposób rysowania obiektów ustala się za pomocą funkcji glpolygonmode z odpowiednimi parametrami: GL_BACK, GL_LINE; GL_BACK, GL_FILL; GL_BACK, GL_POINT. Pierwszy parametr ustala która część obiektu ma być rysowana w sposób określony za pomocą drugiego parametru. Przykładowo: // Jeżeli ten znacznik będzie ustawiony, to wielokąty zwrócone tyłem do widza będą rysowane tylko w postaci szkieletu if(ioutline) glpolygonmode(gl_back,gl_line); else glpolygonmode(gl_back,gl_fill);

Wypełnienie obiektów W celu ustalenia sposobu wypełniania powierzchni wielokątów, biblioteka OpenGL udostępnia nam funkcję, która pozwala nam na wypełnianie wielokątów w sposób gładki (cieniowanie gładkie) lub w sposób płaski (cieniowanie płaskie). Wypełnienie kolorem jednolitym ustala się za pomocą funkcji glshademodel z parametrem GL_FLAT, natomiast wypełnienie umożliwiające płynne przejście kolorami od jednego wierzchołka do drugiego definiuje funkcja glshademodel z parametrem GL_SMOTH. // Jeżeli ten znacznik będzie ustawiony, to wielokąty będą wypełniane jednolitym kolorem w przeciwnym razie nastąpi płynne przejście kolorów pomiędzy wierzchołkami if(ifill) else glshademodel(gl_flat); glshademodel(gl_smoth);

Nawinięcie wielokątów Ważnym elementem podczas modelowania scen 3D jest nawinięcie wielokątów. Nawinięcie określa, czy ścianka obiektu jest zwrócona przodem do nas, czy też do wnętrza obiektu. Domyślnie nawinięcie w bibliotece OpenGL jest lewostronne, tzn. w kierunku przeciwnym do ruchu wskazówek zegara. Takie nawinięcie określa przód obiektu. Aby zmienić domyślne nawinięcie stosujemy funkcję glfront z parametrem GL_CW. Przywrócenie domyślnego nawinięcia to wywołanie funkcji glfront z parametrem GL_CCW. // Jeżeli ten znacznik będzie ustawiony, to domyślne nawinięcie zostanie zmienione na zgodne z ruchem wskazówek zegara dla części przodem do nas, w przeciwnym razie powracamy do domyślnych ustawień. if(iclock) else glfront(gl_cw); glfront(gl_ccw);

Opis funkcji glrotatef składnia parametry Wykonuje obrót aktualnej macierzy zgodnie z podaną macierzą obrotu void glrotatef (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); angle podawany w stopniach kąt obrotu w kierunku przeciwnym do ruchu wskazówek zegara, x, y, z wektor kierunku od początku układu współrzędnych stosowany jako oś obrotu @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ glscalef składnia parametry Mnoży aktualną macierz przez macierz skalowania void glscalef (GLdouble x, GLdouble y, GLdouble z); x, y, z współczynniki skalowania wzdłuż osi x, y i z

Opis funkcji glenable, gldisable składnia Włącza lub wyłącza funkcje stanu biblioteki OpenGL void glenable (GLenum feature); void gldisable (GLenum feature); parametry feature funkcja do włączenia bądź wyłączenia. Potrzebne funkcje: GL_CULL_FACE (ukrywanie ukrytych stron wielokątów), GL_DEPTH_TEST (sprawdzanie głębi) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ glfrontface składnia parametry Definiuje przednią i tylną stronę wielokątów void glfrontface (GLenum mode); mode określa orientację przedniej strony wielokąta zgodną (GL_CW) lub przeciwną (GL_CCW) do ruchy wskazówek zegara

Opis funkcji glshademodel składnia parametry Ustala czy stosowany będzie model cieniowania płaskiego, czy też gładkiego void glshademodel (GLenum mode); mode określa stosowany model Cieniowania. Można podać tu wartości GL_FLAT (cieniowanie płaskie) lub GL_SMOOTH (cieniowanie gładkie). Domyślnie jest cieniowanie gładkie @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ glpolygonmode składnia parametry Ustala tryb rastryzacji stosowany przy rysowaniu wielokątów void glpolygonmode (Glenum face, GLenum mode); face określa, która strona wielokątów będzie brana pod uwagę przy zmianie trybu rysowania: przednia (GL_FRONT), tylna (GL_BACK), czy też obie (GL_FRONT_AND_BACK). mode ustala nowy tryb rysowania wielokątów. Domyślna wartość GL_FILL pozwala na rysowanie wypełnionych wielokątów. Wartość GL_LINE powoduje rysowanie konturów wszystkich wielokątów, a wartość GL_POINT rysowanie punktów

Literatura 1. Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta Wydanie III, Helion2005 2. Pomoce dydaktyczne i instrukcje, http://icis.pcz.pl/~mkubanek 3. Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The RedBook 4. Kevin Hawkins, Dave Astle: OpenGL. Programowanie gier, Helion 2003 5. The official OpenGL web page, http://www.opengl.org 6. http://januszg.hg.pl/opengl/