OpenGL - charakterystyka

Podobne dokumenty
Elementarne obiekty geometryczne, bufory. Dorota Smorawa

3 Przygotował: mgr inż. Maciej Lasota

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

Zegary. Zegary (timers) umożliwiają cykliczne w danych odstępach czasu wykonać określone operacje.

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

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

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

Temat: Transformacje 3D

Grafika 3D OpenGL część II

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Janusz Ganczarski. OpenGL Pierwszy program

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

OpenGL model oświetlenia

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

OpenGL przezroczystość

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

Temat: Wprowadzenie do OpenGL i GLUT

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

OpenGL. Silicon Graphics (IRIS GL stacje graficzne)

Podstawowy projekt OpenGL utworzony przy użyciu środowisk programistycznych firmy Microsoft.

6 Przygotował: mgr inż. Maciej Lasota

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

Materiały. Dorota Smorawa

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

8 Przygotował: mgr inż. Maciej Lasota

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

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

OpenGL teksturowanie

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

Grafika trójwymiarowa

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

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

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

1. Prymitywy graficzne

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

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

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

Przekształcenia geometryczne. Dorota Smorawa

Formaty plików graficznych - wprowadzenie

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

IFiZR Laboratorium 5 Info

Programowanie Procesorów Graficznych

Podstawy programowania w języku C dla środowiska Windows

OpenGL i wprowadzenie do programowania gier

Programowanie na poziomie sprzętu. Programowanie w Windows API

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

Plan wykładu. Akcelerator 3D Potok graficzny

Rysowanie punktów na powierzchni graficznej

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

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

PRZEWODNIK PO PRZEDMIOCIE

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

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

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

Autodesk 3D Studio MAX Teksturowanie modeli 3D

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

Mobilne aplikacje multimedialne. OpenGL

I - Microsoft Visual Studio C++

POMOC / INSTRUKCJA OBSŁUGI

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Wprowadzenie do programowania w Windows

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie I. Wprowadzenie do programowania w Windows

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Symfonia Mała Księgowość 2013 Specyfikacja zmian

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

Część 4 życie programu

Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons

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

Podstawy Informatyki Wykład V

Wprowadzenie do klas w C++ oraz biblioteki opengl

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Tutorial OpenGL i GLUT Na podstawie ksiki OpenGL Ksiga eksperta - Helion

OpenGL Zaawansowana grafika komputerowa

2 Przygotował: mgr inż. Maciej Lasota

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

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

Szybkie tworzenie grafiki w GcIde

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka


7. Dynamiczne generowanie grafiki

Bartłomiej Filipek

Procedura okna: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);

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

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

Praktyka programowania projekt

Metody Metody, parametry, zwracanie wartości

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

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

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

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

TECHNIKI MULTIMEDIALNE LABORATORIUM GIMP: Projektowanie tła

Programowanie współbieżne. Tworzenie i obsługa semaforów oraz wątków przy użyciu funkcji Windows API.

Transkrypt:

OpenGL - charakterystyka OpenGL jest interfejsem programowym aplikacji zestawem funkcji umożliwiających tworzenie interaktywnej grafiki 3D. Program oparty na OpenGL musi być pisany z zastosowaniem języka programowania (C, Visual Basic, Delphi itp.). Zestaw funkcji OpenGL podzielono na 3 podstawowe składniki: Bibliotekę AUX (nowa wersja nosi nazwę GLUT) Narzędzie do uruchamiania aplikacji OpenGL na dowolnej platformie systemowej (nie należy do standardu). Bibliotekę GL Zestaw funkcji zdefiniowanych w standardzie OpenGL. Bibliotekę GLU Zestaw funkcji wyższego poziomu umożliwiających rysowanie, oświetlenie i teksturowanie sfer dydków i walców, korzystających z biblioteki GL. Biblioteka OpenGL jest włączona jako składnik systemów operacyjnych Windows (od Win95 OSR), Unix oraz Linux. 1

Modyfikacje konieczne w ustawieniach projektu Visual C++ Project->Settings, zakładka Link Należy uzupełnić listę bibliotek o: glaux.lib glu32.lib opengl32.lib 2

Biblioteka AUX Program z zastosowaniem biblioteki AUX (GLUT) tworzy się jako aplikację konsoli (typ projektu Win Console Application, typowy program w języku C z główną funkcją main() ). Podstawowy szablon aplikacji z zastosowaniem biblioteki AUX może mieć postać: #include <windows.h> #include <gl\gl.h> #include <gl\glaux.h> void CALLBACK ChangeSize(GLsizei w, GLsizei h) {...} void CALLBACK RenderScene(void) {...} void CALLBACK IdleFunction(void) {... RenderScene();} void main(void) { auxinitdisplaymode(aux_double AUX_RGBA); auxinitposition(100,100,250,250); auxinitwindow("double Buffered Animation"); auxreshapefunc(changesize); auxidlefunc(idlefunction); auxmainloop(renderscene);} 3

Biblioteka AUX przykładowa funkcja IdleFunction void CALLBACK IdleFunction(void) { // Modyfikuj położenie obiektu na scenie if(x1 > windowwidth-rsize x1 < 0) xstep = -xstep; if(y1 > windowheight-rsize y1 < 0) ystep = -ystep; if(x1 > windowwidth-rsize) x1 = windowwidth-rsize-1; if(y1 > windowheight-rsize) y1 = windowheight-rsize-1; x1 += xstep; y1 += ystep; // Odrysuj scenę z nowymi koordynatami kwadratu RenderScene(); } 4

Biblioteka AUX przykładowa funkcja RenderScene void CALLBACK RenderScene(void) { // Ustal kolor tła na niebieski: glclearcolor(0.0f, 0.0f, 1.0f, 1.0f); // Wyczyść okno przypomocy ustalonego koloru: glclear(gl_color_buffer_bit); // Ustal kolor malowanych obiektów na czerwony i rysuj // kwadrat w ustalonej bieżącej pozycji: glcolor3f(1.0f, 0.0f, 0.0f); glrectf(x1, y1, x1+rsize, y1+rsize); // Opróżnij wszystkie bufory OpenGL: glflush(); // Zawartość namalowanego obrazu prześlij na ekran: auxswapbuffers(); } 5

Aplikacje OpenGL zgodne z Win32 - kontekst renderowania LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, PARAM lparam ) { static HGLRC hrc; // Kontekst renderowania static HDC hdc; // Kontekst urządzenia switch (message) { case WM_CREATE: hdc = GetDC(hWnd); SetDCPixelFormat(hDC); // format pikseli hrc = wglcreatecontext(hdc); wglmakecurrent(hdc, hrc); //... break; case WM_DESTROY: wglmakecurrent(hdc,null); wgldeletecontext(hrc); PostQuitMessage(0); break; //... } return (0L); } 6

Aplikacje OpenGL zgodne z Win32 komunikat WM_PAINT case WM_PAINT: { // Wywołaj funkcję rysującą RenderScene(); // wywołaj funkcję zamieniającą bufory SwapBuffers(hDC); //Zabezpieczenie przed niepotrzebnymi wywołaniami // komunikatu WM_PAINT ValidateRect(hWnd,NULL); } break; 7

Aplikacje OpenGL zgodne z Win32 tworzenie okna hwnd = CreateWindow ( lpszappname, lpszappname, // OpenGL wymaga WS_CLIPCHILDREN i WS_CLIPSIBLINGS WS_OVERLAPPEDWINDOW WS_CLIPCHILDREN WS_CLIPSIBLINGS, // Pozycja i rozmiar okna 100, 100, 250, 250, NULL, NULL, hinstance, NULL ); 8

Aplikacje OpenGL zgodne z Win32 format pikseli void SetDCPixelFormat(HDC hdc) { int npixelformat; static PIXELFORMATDESCRIPTOR pfd = { sizeof(pixelformatdescriptor),// Rozmiar struktury 1, // Wersja struktury PFD_DRAW_TO_WINDOW // Rysuj w oknie nie w bitmapie PFD_SUPPORT_OPENGL // Wspomagaj OpenGL PFD_DOUBLEBUFFER, // Tryb podwójnego buforowania PFD_TYPE_RGBA, // Tryb kolorów RGBA 8, // 8-bitowy kolor 0,0,0,0,0,0,0,0,0,0,0,0,0, // Nie używane 16, // Rozmiar bufora głębokości 0,0, // Nie używane do wybrania trybu PFD_MAIN_PLANE, // Rysuj w głównym planie 0,0,0,0 }; // Nie używane do wybrania trybu npixelformat = ChoosePixelFormat(hDC, &pfd); SetPixelFormat(hDC, npixelformat, &pfd); } 9

Aplikacje OpenGL zgodne z Win32 zegar synchronizujący animację case WM_CREATE: //... // Utwórz Timer odpalający co 1 milisekundę SetTimer(hWnd,101,1,NULL); break; case WM_DESTROY: // Zniszcz Timer KillTimer(hWnd,101); //... break; case WM_TIMER: { IdleFunction(); InvalidateRect(hWnd,NULL,FALSE); } break; 10

Prymitywy graficzne OpenGL - punkty // Wyrysowanie dwu punktów: glbegin(gl_points); glvertex3f(0.0f,0.0f,0.0f); glvertex3f(50.0f,50.0f,50.0f); glend(); GL_POINTS // Definiowanie rozmiaru punktów: { GLfloat sizes[2]; GLfloat step; glgetfloatv(gl_point_size_range,sizes); glgetfloatv(gl_point_size_granularity,&step); glpointsize(glfloat size); //ustal rozmiar punktu } // Wygładzanie punktów: glenable(gl_piont_smooth); 11

Prymitywy graficzne OpenGL punkty - przykład void RenderScene(void) { GLfloat x,y,z,angle, step, cursize; GLfloat sizes[2]; glclear(gl_color_buffer_bit); glcolor3f(0.0f, 0.0f, 0.0f); glpushmatrix(); glgetfloatv(gl_point_size_range,sizes); glgetfloatv(gl_point_size_granularity,&step); cursize = sizes[0]; z = -50.0f; for(angle=0.0f; angle<=(2.0f*3.1415f)*3.0f; angle+=0.1f) { x = 50.0f*sin(angle); y = 50.0f*cos(angle); glpointsize(cursize); glbegin(gl_points); glvertex3f(x, y, z); glend(); z += 0.5f; cursize += step; } glpopmatrix(); glflush();} 12

Prymitywy graficzne OpenGL - linie // Pojedyncze linie glbegin(gl_lines); glvertex3f(0.0f,0.0f,0.0f); glvertex3f(50.0f,50.0f,50.0f); GL_LINES glend(); // Łańcuch linii glbegin(gl_line_strip); // glbegin(gl_line_loop); glvertex3f(0.0f, 0.0f, 0.0f); //V0 GL_LINE_STRIP glvertex3f(50.0f, 50.0f, 0.0f); //V1 glvertex3f(50.0f, 100.0f, 0.0f); //V2 glend(); // Definiowanie grubości linii: {GLfloat sizes[2]; GLfloat step; glgetfloatv(gl_line_width_range,sizes); GL_LINE_LOOP glgetfloatv(gl_line_width_granularity,&step); gllinewidth(glfloat size[1]);} 13

Prymitywy graficzne OpenGL linie - wzory glenable(gl_line_stipple); void gllinestipple(glint factor, GLushort pattern); Pattern=0x00FF=255 Binarnie: 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Wzór: Linia: Pojedynczy segment 14

Prymitywy graficzne OpenGL trójkąty // Pojedyncze trójkąty glbegin(gl_triangles); glvertex2f(0.0f, 0.0f); //V0 glvertex2f(25.0f, 25.0f); //V1 GL_TRIANGLES glvertex2f(50.0f, 0.0f); //V2 glvertex2f(-50.0f, 0.0f); //V3 V2 glvertex2f(-75.0f, 50.0f); //V4 glvertex2f(-25.0f, 0.0f); //V4 V0 glend(); // Łańcuch trójkątów glbegin(gl_triangle_strip); //... glend(); // Wachlarz trójkątów // glbegin(gl_triangle_fan); //... glend(); V4 V3 V1 GL_TRIANGLE_STRIP V2 V1 V3 V4 GL_TRIANGLE_FAN V0 15

Prymitywy graficzne OpenGL czworokąty // Pojedyncze czworokąty glbegin(gl_quads); glvertex2f(0.0f, 0.0f); //V0 glvertex2f(25.0f, 25.0f); //V1 GL_QUADS glvertex2f(50.0f, 0.0f); //V2 glvertex2f(-50.0f, 0.0f); //V3 glend(); V1 // Łańcuch czworokątów glbegin(gl_quad_strip); //... V0 glend(); // Wielokąty glbegin(gl_polygon); V1 //... glend(); GL_POLYGON V0 Wszystkie wierzchołki wielokąta mają leżeć w jednej płaszczyźnie Nie wolno definiować wielokątów wklęsłych V3 V5 V4 V2 GL_QUAD_STRIP V2 V3 V4 16

Kierunek rysowania prymitywów zamkniętych V5 V1 V3 V4 V0 V2 Kierunek tworzenia obiektu odwrotny do obiegu wskazówek zegara (ang. CCW-Counterclockwise) Kierunek tworzenia obiektu zgodny z kierunkiem obiegu wskazówek zegara (ang. CW-Clockwise) glfrontface(gl_cw); //zgodnie ze wskazówkami zegara glfrontface(gl_ccw); // przeciwnie do wskazówek 17

Tworzenie zamkniętych brył glbegin(gl_triangle_fan); glvertex3f(0.0f, 0.0f, 75.0f); for(angle=0.0f; angle<(2.0f*3.15); angle+=(3.15/8.0f)) { x = 50.0f*sin(angle); y = 50.0f*cos(angle); if((ipivot %2) == 0) glcolor3f(0.0f, 1.0f, 0.0f); else glcolor3f(1.0f, 0.0f, 0.0f); ipivot++; glvertex2f(x, y);} glend(); glbegin(gl_triangle_fan); glvertex2f(0.0f, 0.0f); for(angle=0.0f; angle<(2.0f*3.15); angle+=(3.15/8.0f)) { x = 50.0f*sin(angle); y = 50.0f*cos(angle); if((ipivot %2) == 0) glcolor3f(0.0f, 1.0f, 0.0f); else glcolor3f(1.0f, 0.0f, 0.0f); ipivot++; glvertex2f(x, y);} glend(); 18

Tworzenie zamkniętych brył Interpretacja kolorów wierzchołków: glshademodel(gl_flat); // glshademodel(gl_smooth); Bufor głębokości: glenable(gl_depth_test); // gldisable(gl_depth_test); Wyłączanie wyświetlania wybranych powierzchni: glenable(gl_cull_face); // gdisable(gl_cull_face); Ustalenie sposobu wyświetlania stron wielokąta: glpolygonmode(gl_back,gl_line);// glpolygonmode(gl_back,gl_fill); Dostepne parametry wywołania glpolygonmode: glpolygonmode(face, mode); GL_FRONT GL_FRONT GL_FRONT_AND_BACK GL_POINT GL_LINE GL_FILL 19

Funkcja glvertex - charakterystyka Dostępne funkcje rysowania wierzchołków: glvertex2d, glvertex2f, glvertex2i, glvertex2s, glvertex3d, glvertex3f, glvertex3i, glvertex3s, glvertex4d, glvertex4f, glvertex4i, glvertex4s, glvertex2dv, glvertex2fv, glvertex2iv, glvertex2sv, glvertex3dv, glvertex3fv, glvertex3iv, glvertex3sv, glvertex4dv, glvertex4fv, glvertex4iv, glvertex4sv Interpretacja oznaczeń: d double (GLdouble) f i s float (GLfloat) int (GLint) short (GLshort) 2 podawane są współrzędne x i y 3 - podawane są współrzędne x, y i z 4 - podawane są współrzędne x, y, z i w = 1.0 (domyślnie), v - prawdziwe współrzędne oblicza się jako x/w, y/w, z/w parametrem wywołania funkcji jest tablica zawierające odpowiednio 2, 3 lub 4 dane określające współrzędne wierzchołka 20

Funkcja glvertex - przykłady { double x=10.0, y=0.0, z=5.0, w=1.0; glbegin(gl_points); glvertex4d(x,y,z,w); glend();} //-------------------------------------------------------------- { int v_tab1[3] ={20,20,0}; int v_tab2[3] ={-20,20,0}; int v_tab3[3] ={-20,-20,0}; int v_tab4[3] ={20,-20,0}; glbegin(gl_quads); glvertex3iv(v_tab1); glvertex3iv(v_tab2); glvertex3iv(v_tab3); glvertex3iv(v_tab4); glend();} //-------------------------------------------------------------- { int i; int v_tab[4][3] = {{20,20,0},{-20,20,0},{-20,-20,0},{20,-20,0} }; glbegin(gl_quads); for(i=0;i<4;i++) glvertex3iv(v_tab[i]); glend();} 21

Funkcje glbegin / glend zasady stosowania Dostępne prymitywy graficzne: GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP GL_POLYGON Podzbiór funkcji OpenGL, które można wywołać pomiędzy glbegin a glend: glvertex glcolor glindex glnormal gltexcoord glevalcoord glevalpoint glmaterial gledgeflag 22

1. Przygotowanie siatek Zasady konstruowania typowej sceny 1. Siatki skonstruować można z zastosowaniem programów graficznych lub bezpośrednio definiując prymitywy graficzne i położenie ich wierzchołków. 2. Siatki zamkniętych brył warto zbudować z zewnętrznych ścian (można wyłączyć wtedy liczenie ścian wewnętrznych przyspieszenie obliczeń). Do tworzenia brył należy zastosować wielokąty a nie linie, czy łamane. Przy czym w pierwszym etapie można wymusić wyświetlanie wielokątów w postaci siatek (większa czytelność). 3. Każdy element sceny, który będzie się poruszał w stosunku do innych elementów należy zdefiniować jako osobną siatkę. 4. W tworzeniu siatek należy się posługiwać lokalnym układem współrzędnych, nie należy definiować położenia siatki (obiektu) na scenie. 5. Sąsiednie ściany brył, które współdzielą ostrą krawędź należy wykonać z zastosowaniem oddzielnych prymitywów. 6. Poszczególne elementy siatki zamknąć w jednostka programowaych (język C funkcje, język C++ - klasy). 7. Siatki do wielokrotnego użycia (np. walec) zdefiniować w postaci sparametryzowanej (np. Funkcje z parametrami wywołania); 23

Zasady konstruowania typowej sceny 2. Zdefiniowanie transformacji przestrzennych i położenia kamery: 1. Powiązanie ruchomych elementów poszczególnych obiektów za pomocą lokalnych transformacji przestrzennych; 2. Ustalenie zasad ruchu obiektów i kamery na scenie. 3. Zdefiniowanie oświetlenia sceny: 1. Włączenie oświetlenia na scenie; 2. Zdefiniowanie normalnych do ścian obiektów, które będą oświetlane; 3. Dla elementów nieoświetlanych dynamicznie wyłączać oświetlenie. 4. Teksturowanie: 1. Przekształcić pliki graficzne w tekstury OpenGL; 2. Powiązać współrzędne tekstur ze współrzędnymi wierzchołków. 5. Zdefiniowanie interfejsu użytkownika: 1. Zaproponować zestaw klawiszy lub okien i elementów menu, które będą służyć do wpływania przez użytkownika na elementy sceny; 2. Zastosować możliwość dotykania obiektów sceny: 6. Dodatkowe elementy mgła, przezroczystość, mapy oświetlenia itp.. 24

Przykład definiowanie siatki walca void walec(double r, double h) { double angle,x,y,z; glbegin(gl_triangle_fan); glvertex3f(0.0f, 0.0f, 0.0f); for(angle = 0.0f; angle < (2.0*3.15); angle += (3.15/8.0f)) { x = r*sin(angle); y = r*cos(angle); glvertex2d(x, y);} glend(); glbegin(gl_quad_strip); for(angle = 0.0f; angle < (2.0*3.15); angle += (3.15/8.0f)) { x = r*sin(angle); y = r*cos(angle); z = h; glvertex3d(x, y, 0); glvertex3d(x, y, z);} glend();} void RenderScene(void) { //... glcolor3d(1.0,0.0,0.0); glpolygonmode(gl_back,gl_line); walec(40,20); //... } 25