Grafika Komputerowa
Laboratorium 3
Temat: Przekształcenia geometryczne
Funkcje OpenGl
• Działania na stosie macierzowym:
-
skopiowanie macierzy na wierzchołku stosu
void glPushMatrix(void);
-
zdjęcie macierzy z wierzchołka stosu
void glPopMatrix(void);
-
załadowanie macierzy jednostkowej na wierzchołek stosu
void glLoadIdentity(void);
-
wybór aktywnego stosu macierzowego ( tryb = GL_MODELVIEW – stos macierzy modelujących, tryb = GL_PROJECTION – stos macierzy rzutujących)
void glMatrixMode(GLenum tryb);
• Przekształcenia modelujące:
-
translacja o wektor (x, y, z)
void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
-
rotacja o kąt alfa (kąt w stopniach, wartość dodatnia oznacza kierunek przeciwny do ruchu wskazówek zegara) wokół osi równoległej do wektora (x, y, z)
void glRotatef(GLfloat alfa, GLfloat x, GLfloat y, GLfloat z);
-
skalowanie wzdłuż osi x, y, z ( sx, sy, sz – współczynniki skalowania)
void glScalefGL(float sx, GLfloat sy, GLfloat sz);
• Funkcje rysujące bryły przestrzenne (biblioteka GLUT):
-
szkielet sfery ( radius – promień sfery, slices - liczba południków, stacks – liczba równoleżników)
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
-
sfera ( radius – promień sfery, slices - liczba południków, stacks – liczba równoleżników)
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
-
szkielet stożka ( base – promień podstawy, height – wysokość, slices - liczba
„południków”, stacks – liczba „równoleżników”)
void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-
stożek ( base – promień podstawy, height – wysokość, slices - liczba
„południków”, stacks – liczba „równoleżników”)
void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-
szkielet sześcianu ( size – długość boku)
void glutWireCube(GLdouble size);
-
sześcian ( size – długość boku)
void glutSolidCube(GLdouble size);
-
szkielet czworościanu
void glutWireTetrahedron (void);
-
czworościan
void glutSolidTetrahedron (void);
-
szkielet osmiościanu
void glutWireOctahedron (void);
-
ośmiościan
void glutWireOctahedron (void);
-
szkielet dwunastościanu
void glutWireDodecahedron(void);
-
dwunastościan
void glutWireDodecahedron(void);
-
szkielet dwudziestościanu
void glutWireIcosahedron (void);
-
dwudziestościan
void glutSolidIcosahedron (void);
-
szkielet torusa ( innerRadius – promień wewnętrzny, outerRadius – promień zewnętrzny, sides – liczba ścian, rings – liczba pierścieni)
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides,
GLint rings);
-
torus ( innerRadius – promień wewnętrzny, outerRadius – promień zewnętrzny, sides – liczba ścian, rings – liczba pierścieni)
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides,
GLint rings);
-
szkielet dzbanka ( size – rozmiar)
glutWireTeapot(GLdouble size);
-
dzbanek ( size – rozmiar)
void glutSolidTeapot(GLdouble size);
• Funkcje rysujące kwadryki (biblioteka GLU):
-
alokacja pamięci dla nowej kwadryki (utworzenie kwadryki). Funkcja zwraca wskaźnik do zaalokowanej pamięci, który wykorzystywany jest w pozostałych funkcjach operujących na kwadrykach
GLUquadric* gluNewQuadric (void);
-
zwolnienie pamięci o kwadryce (usunięcie kwadryki)
void gluDeleteQuadric ( GLUquadric *state);
-
tryb rysowania kwadryki ( gobj – wskaźnik do kwadryki, drawStyle – tryb rysowania: GLU_POINT, GLU_LINE, GLU_FILL, GLU_SILHOUETTE)
void gluQuadricDrawStyle ( GLUquadric *gobj, GLenum drawStyle);
-
cylinder bez podstaw (gobj – wskaźnik do kwadryki, baseRadius – promień dolnej podstawy, topRadius – promień górnej podstawy, height – wysokość, liczba „południków”, stacks – liczba „równoleżników)
void gluCylinder ( GLUquadric *qobj, GLdouble baseRadius,
GLdouble topRadius, GLdouble height, GLint slices, GLint stacks);
-
dysk (koło z wewnętrznym otworem) ( gobj – wskaźnik do kwadryki, innerRadius – promień wewnętrzny, outerRadius – promień zewnętrzny, slices –
liczba podziałów promienistych , loop s – liczba podziałów koncentrycznych)
void gluDisk ( GLUquadric *qobj, GLdouble innerRadius,
GLdouble outerRadius, GLint slices, GLint loops);