Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie grafiki 3D

Podobne prezentacje


Prezentacja na temat: "Programowanie grafiki 3D"— Zapis prezentacji:

1 Programowanie grafiki 3D
Wprowadzenie Kilka słów o przedmiocie Czym jest OpenGL? Założenia i konwencje przyjęte w OpenGL Biblioteka GLUT Pierwszy program Prymitywy w OpenGL

2 Kilka słów o przedmiocie
Forma zajęć: - Wykłady - Laboratoria Zaliczenie: - dwa kolokwia na laboratorium Tematyka: - Przede wszystkim OpenGL - VTK, ORGE

3 Kilka słów o przedmiocie
Materiały dodatkowe: - internet: - książki: „The OpenGL Reference Manual - The Bluebook” - Dave Shreiner „OpenGL w praktyce” - Janusz Ganczarski „The OpenGL Programming Guide - The Redbook” – Dave Shreiner „Advanced Graphics Programming Using OpenGL” – Tom McReynolds , David Blythe

4 Czym jest OpenGL? OpenGL (Open Graphics Library) - specyfikacja uniwersalnego API do generowania grafiki. Zestaw funkcji składa się z około 250 podstawowych wywołań, umożliwiających budowanie złożonych trójwymiarowych scen z podstawowych figur geometrycznych. 3.VIII.2009 OpenGL 3.2 8.VIII.2011 OpenGL 4.2 2006 ARB→Khronos (OpenGL 2.1) 2004 OpenGL 2.0 1992 OpenGL Architectural Review Board (ARB) 1990 Silicon Graphics Inc. IRIS GL API

5 Czym jest OpenGL? Czym jest OpenGL? - Systemem typu klient-serwer
- API (ApplicationProgrammingInterface) do obsługi grafiki 3D - Biblioteką procedur niskopoziomowych - Maszyną stanu Czym OpenGL nie jest? - Biblioteką wysokiego poziomu - Systemem śledzenia biegu promieni świetlnych (raytracing) Pomocne dodatki do OpenGL: - GLU(GL UtilityLibrary) - GLUT(GL UtilityToolkit) - GLAUX, GLX, WGL, SDL… i wiele innych

6 Czym jest OpenGL? Potok przetwarzania grafiki (graphics pipe line)
W OpenGL jest jeszcze drugi potok – przetwarzania obrazów rastrowych.

7 Czym jest OpenGL? Zalety OpenGL:
- Najpowszechniej implementowany standard grafiki 3D - Stabilna, niezawodna - Systematycznie rozwijania (system rozszerzeń) - Łatwa w użyciu (znacznie łatwiejsza od DirectX) - Przenośna i skalowalna - Dobrze udokumentowana Wady OpenGL: - Zaszłości historyczne - Nieobiektowość (choć niektórzy traktują to jako zaletę) - Mnogość tożsamych funkcji - Brak możliwości bezpośredniego powiązania ze sterownikiem - Zaawansowane funkcje dostępne tylko w rozszerzeniach

8 Czym jest OpenGL? Zalety DirectX: - Łatwość pisania pod różne karty
- Biblioteka obiektowa - Bardziej spójne API - Bezpośredni dostęp do sterowników Wady DirectX: - W zasadzie ograniczony do Windows i Xbox’a - Trudniejszy w nauce - Gorsza dokumentacja i wsparcie internetowe Należy pamiętać, że DirectX to biblioteka znacznie szersza niż obsługa grafiki 3D. W zasadzie odpowiednikiem OpenGL’a jest jedynie moduł Direct3D. Biorąc to pod uwagę, zaletą DirectX’a będzie również obsługa całej „multimedialności” komputera.

9 Czym jest OpenGL? Licencja:
- Wolna dla twórców oprogramowania bazującego na API OpenGL - Komercyjna dla producentów sprzętu (sterowniki) Aby skompilować i uruchomić program trzeba mieć: - Biblioteki statyczne: opengl32.lib, glu32.lib i ew. glut.lib - Pliki nagłówkowe: gl.h, glu.h ew. glut.h - W ścieżce muszą być widoczne: opengl32.dll, glu32.dll i ew. glut32.dll - Kartę graficzną obsługującą odpowiednią wersję OpenGL’a Aby sprawdzić możliwości swojej karty graficznej (sterownika) w obsłudze OpenGL można użyć programu OpenGL ExtensionViewer

10 Ktoś używa OpenGL? Gry komputerowe: - Call of Duty (cała seria)

11 Ktoś używa OpenGL? Gry komputerowe: - Doom3 (i cała seria Quake)

12 Ktoś używa OpenGL? Gry komputerowe:
- War of Warcraft (domyślnie pod Windows Direct3D) - Star Wars: Knights of the Old Republic (również II część) - Counter-Strike i wiele, wiele innych Inne programy: - 3D Studio Max - Blender - Photoshop CS4, Premiere Pro, After Effects - Google Earth - Stellarium

13 Konwencje typ OpenGL bity opis GLboolean 1 typ logiczny GLbyte 8
liczba całkowita ze znakiem GLubyte liczba całkowita bez znaku GLchar znak tekstowy GLshort 16 GLushort GLint 32 GLuint GLsizei nieujemna liczba całkowita GLenum typ wyliczeniowy GLintptr * adres liczby całkowitej ze znakiem GLsizeiptr adres liczby całkowitej bez znaku GLbitfield pole bitowe GLfloat liczba zmiennoprzecinkowa pojedynczej precyzji GLclampf liczba zmiennoprzecinkowa pojedynczej precyzji z przedziału <0;1> GLdouble 64 liczba zmiennoprzecinkowa podwójnej precyzji GLclampd liczba zmiennoprzecinkowa podwójnej precyzji z przedziału <0;1>

14 Konwencje OpenGL stosuje następującą konwencję nazywania funkcji:
rtype Name{1|2|3|4}{b|s|i|f|d|ub|us|ui}{v}([args,]T arg1,..., T argN[,args]) Argumentem będzie tablica wartości. Liczby argumentów nie podaje się. Podaje typ argumentów: b - argumenty typu GLbyte, s - argumenty typu GLshort, i - argumenty typu GLint, f - argumenty typu GLfloat, d - argumenty typu GLdouble, ub - argumenty typu GLubyte, us - argumenty typu GLushort, ui - argumenty typu GLuint Typ zwracany Argumenty funkcji Nazwy wszystkich funkcji biblioteki OpenGL rozpoczynają się od przedrostka gl, a funkcje biblioteki GLU od przedrostka glu. Liczba argumentów

15 Konwencje OpenGL stosuje następującą konwencję nazywania funkcji:
rtype Name{1|2|3|4}{b|s|i|f|d|ub|us|ui}{v}([args,]T arg1,..., T argN[,args]) void glPixelTransferf (GLenum pname, GLfloat param) void glPixelTransferi (GLenum pname, GLint param) void glColor3ub (GLubyte red, GLubyte green, GLubyte blue) void glColor3ui (GLuint red, GLuint green, GLuint blue) void glColor3ubv (const GLubyte *v) void glColor3uiv (const GLuint *v) void glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) void glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha) Argumentem będzie tablica wartości. Liczby argumentów nie podaje się. Podaje typ argumentów: b - argumenty typu GLbyte, s - argumenty typu GLshort, i - argumenty typu GLint, f - argumenty typu GLfloat, d - argumenty typu GLdouble, ub - argumenty typu GLubyte, us - argumenty typu GLushort, ui - argumenty typu GLuint Typ zwracany Argumenty funkcji Nazwy wszystkich funkcji biblioteki OpenGL rozpoczynają się od przedrostka gl, a funkcje biblioteki GLU od przedrostka glu. Liczba argumentów

16 Konwencje OpenGL przyjmuje prawoskrętny układ współrzędnych z osią z standardowo skierowaną w stronę widza. Y UWAGA: W grafice komputerowej znacznie częściej przyjmuje się lewoskrętny układ współrzędnych. X Maszyna stanów OpenGL przechowuje wszystkie parametry pracy biblioteki. Wiele parametrów można ustawić (włączyć) funkcją: void glEnable(GLenum cap) a wyłączyć funkcją: void glDisable(GLenum cap) Z

17 Konwencje Obsługę błędów realizuje funkcja: GLenum glGetError(void).
Błędy w OpenGL odkładane są na stosie. Funkcja zwraca wartość błędu z góry stosu. Wystąpienie błędu z wyjątkiem GL_OUT_OF_MEMORY nie przerywa wykonania programu. Pomijana jest jedynie operacja powodująca błąd. błąd opis GL_NO_ERROR brak błędu GL_INVALID_ENUM błędna wartość typu wyliczeniowego GL_INVALID_VALUE błędna wartość argumentu GL_INVALID_OPERATION operacja niemożliwa do wykonania GL_STACK_OVERFLOW przepełnienie stosu GL_STACK_UNDERFLOW niedomiar stosu GL_OUT_OF_MEMORY brak pamięci GL_TABLE_TOO_LARGE zbyt duża tablica Biblioteka GLU udostępnia: const GLubyte *gluErrorString(GLenumerrorCode). Błędy z OpenGL mają swoje odpowiedniki w GLU np. GLU_INVALID_ENUM.

18 Biblioteka GLUT Biblioteka OpenGL została zaprojektowana tak, aby być niezależną zarówno od sprzętu jak i od systemu operacyjnego. Nie zawiera zatem żadnych funkcji odpowiedzialnych za interfejs użytkownika. Biblioteka GLUT uzupełnia tą lukę i jest również multiplatformowa. Biblioteka zawiera 10 grup funkcji. Initialization Callback Registration • inicjalizacja biblioteki, • początkowe pozycje i rozmiary okien, • inicjalizacja trybu graficznego • rejestracja funkcji obsługujących zdarzenia Index Colormap Management Begining event processing • obsługa indeksowanego trybu barw • obecnie bezużyteczna • obsługa pętli zdarzeń State Retrieval Windows management • zwraca parametry stanu • tworzenie i niszczenie okien • zarządzanie oknami i ich parametrami Font Rendering • obsługa wbudowanych czcionek bitmapowych Overlay management • obsługuje tryb nakładki Geometric Object Rendering Menu management • 9 typowych obiektów • każdy w wersji „solid” i „wire” • tworzy i zarządza menu programu

19 Biblioteka GLUT GLUT Open GLUT Free GLUT
• Oryginalna biblioteka autorstwa Marka J. Kilgarda z Silicon Graphics • Od wersji 3.7 (2001 rok) nie rozwijana • Najpopularniejsza Open GLUT • Pełna zgodność z GLUT • Dodatkowe funkcje (m.in. menu z ikonkami) Free GLUT • Pełna zgodność z GLUT • Bezproblemowa integracja z różnymi środowiskami

20 Biblioteka GLUT Funkcje inicjalizujące
Pierwszą linijką w każdym programie używającym biblioteki GLUT zawsze jest wywołanie funkcji: void glutInit(int *argc, char **argv) Drugą linijką najczęściej jest wywołanie funkcji inicjalizującej bufor ramki: void glutInitDisplayMode(unsigned int mode) Parametr mode jest maską bitową, której bity można ustawiać korzystając z operatora |. GLUT_RGBA, GLUT_INDEX, GLUT_ALPHA, GLUT_RGB – ustala tryb koloru GLUT_SINGLE, GLUT_DOUBLE – ustala liczbę buforów GLUT_ACCUM – włącza bufor akumulacyjny GLUT_DEPTH – włącza bufor głębokości GLUT_STENCIL – włącza bufor szablonowy GLUT_MULTISAMPLE – włącza wielopróbkowanie GLUT_STEREO – włącza tryb stereoskopowy (niewiele implementacji obsługuje ten tryb) GLUT_LUMINANCE – zamiast trybu RGB włącza tryb odcieni szarości

21 Biblioteka GLUT Funkcje tworzenia i obsługi okien.
void glutInitWindowSize(int width, int height) void glutInitWindowPosition(int x, int y) int glutCreateWindow(char *name) void glutSetWindow(int win) int glutGetWindow(void) int glutCreateSubWindow(int win, int x, int y, int width, int height) void glutDestroyWindow(int win) void glutPositionWindow(int x, int y) void glutReshapeWindow(int width, int height) void glutFullScreen(void) void glutSetWindowTitle(char *name) void glutSetIconTitle(char *name) void glutPostRedisplay(void) void glutSwapBuffers(void) void glutHideWindow(void) void glutShowWindow(void) void glutIconifyWindow(void)

22 Biblioteka GLUT Funkcje obsługi zdarzeń.
Funkcja rejestrująca handler obsługujący przyciski klawiatury zwracające kod ASCII: void glutKeyboardFunc (void (*func)(unsigned char key, int x, int y)) Funkcja rejestrująca handler obsługujący klawisze specjalne: void glutSpecialFunc (void (*func)(int key, int x, int y)) Biblioteka oferuje predefiniowane stałe: GLUT_KEY_F1 , … , GLUT_KEY_F12 GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN GLUT_KEY_HOME, GLUT_KEY_END, GLUT_KEY_INSERT Obsługa wciśnięcia lub zwolnienia klawisza myszy: void glutMouseFunc (void (*func)(int button, int state, int x, int y)) button: GLUT_LEFT_BUTTON, GLUT_RIGHT_BUTTON, GLUT_MIDDLE_BUTTON state: GLUT_UP, GLUT_DOWN Obsługa poruszania myszą z wciśniętym klawiszem. void glutMotionFunc(void (*func)(int x, int y)) Obsługa poruszania myszą ze zwolnionym klawiszem. void glutPassiveMotionFunc (void (*func)(int x, int y))

23 Biblioteka GLUT Obsługa zdarzeń polegających na wejściu kursora w obszar okna oraz wyjścia poza okno: void glutEntryFunc(void (*func)(int state)) state: GLUT_LEFT, GLUT_ENTERED Obsługa zdarzeń związanych z oknem: void glutDisplayFunc(void (*func)(void)) void glutReshapeFunc(void (*func)(int width, int height)) void glutVisibilityFunc(void (*func)(int state)) state: GLUT_NOT_VISIBLE, GLUT_VISIBLE Obsługa stanu bezczynności: void glutIdleFunc(void (*func)(void)) Obsługa timera systemowego: void glutTimerFunc(unsigned int milis, void (*func)(int value), value)

24 Biblioteka GLUT Funkcje tworzenia i obsługi menu.
Tworzenie, usuwanie i przełączanie się między menu: int glutCreateMenu(void (*func)(int value)) void glutDestroyMenu(int menu) void glutSetMenu(int menu) int glutGetMenu(void) Dodawanie, usuwanie i zmiana pozycji w menu: void glutAddMenuEntry(char *name, int value) void glutRemoveMenuItem(int entry) void glutChangeToMenuEntry(int entry, char *name, int value) Tworzenie i zmiana podmenu: void glutAddSubMenu(const char *label, int submenu) void glutChangeToSubMenu(int entry, char *name, int menu)

25 Niestety biblioteka GLUT obsługuje wyłącznie kodowanie ISO 8859-1
Powiązanie i usuwanie powiązania menu z klawiszem myszy. void glutAttachMenu (int button) button: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON void glutDetachMenu(int button) Obsługa pętli zdarzeń: void glutMainLoop(); Czcionki bitmapowe void glutBitmapCharacter(void *font, int character) void glutBitmapWidth(void *font, int character) font: GLUT_BITMAP_8_BY_13 , GLUT_BITMAP_9_BY_15 , GLUT_BITMAP_TIMES_ROMAN_10 , GLUT_BITMAP_TIMES_ROMAN_24 GLUT_BITMAP_HELVETICA_10 , GLUT_BITMAP_HELVETICA_12 , GLUT_BITMAP_HELVETICA_18 Niestety biblioteka GLUT obsługuje wyłącznie kodowanie ISO

26 Biblioteka GLUT Zmienne stanu
Stan klawiszy specjalnych można sprawdzić funkcją: int glutGetModifiers(void); W bibliotece zdefiniowano stałe: GLUT_ACTIVE_SHIFT, GLUT_ACTIVE_CTRL, GLUT_ACTIVE_ALT. Sprawdzenie czy dany klawisz został wciśnięty przeprowadza się następująco: If (GLUT_ACTIVE_CTRL & glutGetModifiers()) … Funkcja zwracająca wartość wybranego parametru : int glutGet(GLenum type); GLUT_WINDOW_X, GLUT_WINDOW_Y, GLUT_WINDOW_WIDTH, GLUT_WINDOW_HEIGHT, GLUT_INIT_WINDOW_WIDTH, GLUT_INIT_WINDOW_HEIGHT, GLUT_SCREEN_WIDTH, GLUT_SCREEN_HEIGHT GLUT_WINDOW_BUFFER_SIZE, GLUT_WINDOW_RED_SIZE, GLUT_WINDOW_GREEN_SIZE, GLUT_WINDOW_BLUE_SIZE, GLUT_WINDOW_ALPHA_SIZE, GLUT_WINDOW_STENCIL_SIZE GLUT_WINDOW_ACCUM_RED_SIZE, GLUT_WINDOW_ACCUM_GREEN_SIZE, GLUT_WINDOW_ACCUM_BLUE_SIZE, GLUT_WINDOW_ACCUM_ALPHA_SIZE

27 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; }

28 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; } void initOpenGL() { glClearColor(0.0f,0.0f,0.0f,0.0f); }

29 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; } void initOpenGL() { glClearColor(0.0f,0.0f,0.0f,0.0f); } void drawScene() { handleKeys(); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glutSwapBuffers(); glutPostRedisplay(); }

30 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; } void initOpenGL() { glClearColor(0.0f,0.0f,0.0f,0.0f); } void handleKeys() { if(keys[27]) exit(0); } void drawScene() { handleKeys(); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glutSwapBuffers(); glutPostRedisplay(); }

31 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; } void reshapeScreen(int w, int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, 0.1f,100.0f); glMatrixMode(GL_MODELVIEW); }

32 Pierwszy program. #include <gl\gl.h> #include <gl\glu.h>
#include <gl\openglut.h> #include <stdlib.h> bool keys[256],specialkeys[256]; int main(intargc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(640,480); glutInitWindowPosition(0,0); glutCreateWindow("OpenGL -Szablon ..."); initOpenGL(); glutDisplayFunc(drawScene); glutReshapeFunc(reshapeScreen); glutKeyboardFunc(keyDown); glutKeyboardUpFunc(keyUp); glutSpecialFunc(specialKeyDown); glutSpecialUpFunc(specialKeyUp); glutMainLoop(); return 0; } void keyDown(unsigned char key, int x,int y) { keys[key]=true; } void keyUp(unsigned char key, int x,int y) keys[key]=false; void specialKeyDown(int key, int x, int y) specialkeys[key]=true; void specialKeyUp(int key, int x, int y) specialkeys[key]=false;

33 Prymitywy w OpenGL Definicja każdego podstawowego obiektu OpenGL składa się z uporządkowanego zbioru punktów (vertexów) opisujących wierzchołki obiektu i zawsze ma postać: void glBegin(GLenum mode) … definicje wierzchołków i inne parametry (*)… void glEnd(void) Argument mode informuje o tym jaki prymityw powstanie. W OpenGL dostępne są: mode prymityw GL_POINTS zbiór odseparowanych punktów GL_TRIANGLE_STRIP wstęga trójkątów GL_LINES pojedyncze linie GL_TRIANGLE_FAN wachlarz trójkątów GL_LINE_STRIP linie połączone (łamana) GL_QUADS czworokąty GL_LINE_LOOP łamana zamknięta GL_QUAD_STRIP wstęga czworokątów GL_TRIANGLES oddzielne trójkąty GL_POLYGON wielokąt (*) glVertex, glColor, glSecondaryColor, glIndex, glNormal, glTexCoord, glMultiTexCoord, glVertexAttrib, glFogCoord, glArrayElement, glEvalCoord, glEvalPoint, glMaterial, glEdgeFlag, glCallList, glCallLists

34 Prymitywy w OpenGL GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP
GL_TRIANGLES GL_POLYGON

35 Prymitywy w OpenGL GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS
GL_QUAD_STRIP

36 Prymitywy w OpenGL Wierzchołki mogą być definiowane przez funkcje jednej z trzech grup: void glVertex2d (GLdouble x, GLdouble y) void glVertex2f (GLfloat x, GLfloat y) void glVertex2i (GLint x, GLint y) void glVertex2s (GLshort x, GLshort y) void glVertex2dv (const GLdouble *v) void glVertex2fv (const GLfloat *v) void glVertex2iv (const GLint *v) void glVertex2sv (const GLshort *v) void glVertex3d (GLdouble x, GLdouble y, GLdouble z) void glVertex3f (GLfloat x, GLfloat y, GLfloat z) void glVertex3i (GLint x, GLint y, GLint z) void glVertex3s (GLshort x, GLshort y, GLshort z) void glVertex3dv (const GLdouble *v) void glVertex3fv (const GLfloat *v) void glVertex3iv (const GLint *v) void glVertex3sv (const GLshort *v) void glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w) void glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w) void glVertex4i (GLint x, GLint y, GLint z, GLint w) void glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w) void glVertex4dv (const GLdouble *v) void glVertex4fv (const GLfloat *v) void glVertex4iv (const GLint *v) void glVertex4sv (const GLshort *v) Wierzchołki wielokąta oraz czworokątów muszą leżeć w jednej płaszczyźnie. OpenGL tego nie sprawdza, a efekty nieprzestrzegania tej zasady mogą być nieprzewidywalne. Wierzchołki wielokątów muszą być uporządkowane. Czworokąty i wielokąty muszą być wypukłe.

37 Prymitywy w OpenGL Aby przyspieszyć rysowanie, w specjalny sposób zostały potraktowane prostokąty. void glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) void glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) void glRecti (GLint x1, GLint y1, GLint x2, GLint y2) void glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2) void glRectdv (const GLdouble *v1, const GLdouble *v2) void glRectfv (const GLfloat *v1, const GLfloat *v2 ) void glRectiv (const GLint *v1, const GLint *v2) void glRectsv (const GLshort *v1, const GLshort *v2) Rozmiary punktów ustala funkcja: void glPointSize(GLfloat size). Grubość linii ustala funkcja: void glLineWidth(GLfloat width). Rodzaj linii ustala funkcja: void glLineStipple(GLint factor, GLushort pattern). Ustawione bity parametru pattern informują, które punkty prostej mają być rysowane. Zmienna factor określa ile razy poszczególne bity mają zostać powtórzone. Standardowo w maszynie stanu rysowanie linią z wzorca jest wyłączone. Aby je aktywować, należy włączyć opcję GL_LINE_STIPPLE.


Pobierz ppt "Programowanie grafiki 3D"

Podobne prezentacje


Reklamy Google