Laboratorium_grafika3D_3.pdf

(84 KB) Pobierz
Laboratorium nr 3
1/5
Instrukcja
laboratoryjna
Grafika Komputerowa 3D
Temat:
Rysowanie prymitywów
Przygotował:
mgr in . Maciej Lasota
3
1)
Rysowanie prymitywów
Podstawową
rodziną funkcji
wykorzystywanych w bibliotece OpenGL do rysowania
ró nego rodzaju prymitywów (punktów, odcinków, wielokątów) jest
glVertex.
Funkcje te
słu
ą
do rysowania punktu. Istnieje wiele wersji glVertex, ró niących się ilością oraz typem
przyjmowanych parametrów wejściowych. Liczbę i typ parametrów jakie przyjmują funkcje
określa ich nazwa. Najczęściej korzysta się z funkcji
glVertex2f
oraz
glVertex3f.
Biblioteka
Rdzeń
Liczba
argumentów
Typ
argumentów
W celu narysowani pojedynczego punktu za pomocą glVertex, nale y umieścić ją
wewnątrz bloku tworzonego przez parę funkcji
glBegin
oraz
glEnd.
Funkcja glBegin
informuje bibliotekę OpenGL o rozpoczęciu rysowania grafiki. Przyjmuje ona jeden parametr
będący typem rysowanego prymitywu. Typ ten określa się za pomocą parametru mode.
void glBegin(GLenum mode)
Ka de wywołanie funkcji glBegin musi zostać zakończone bezparametrową funkcją
glEnd.
void glEnd()
UWAGA!!! Blok opisany za pomocą funkcji glBegin oraz glEnd nie mo e być
zagnie d ony w innym bloku.
Laboratorium nr 3
2/5
1.1)
Rysowanie punktu
Punkt jest najprostszym prymitywem graficznym. W celu narysowania punktu jako
parametr wejściowy dla glBegin podajemy
GL_POINTS.
Parametr ten informuje bibliotekę
OpenGL, aby narysowała punkt w trójwymiarowej przestrzeni kartezjańskiej.
Przykład 1:
glBegin(GL_POINTS);
glVertex3f(5.0f, 5.0f, 5.0f);
glEnd();
Przykład 2:
float pozycja[] = {5.0f, 5.0f, 5.0f};
glBegin(GL_POINTS);
glVertex3fv(pozycja);
glEnd();
Rysowanym punktom oczywiście mo na ustawić określony rozmiar. Słu y do tego
celu funkcja.
void glPointSize(GLfloat rozmiar)
Funkcja przyjmuje tylko jeden parametr, będący wielkością punktu. Podobnie jak
większość funkcji OpenGL działa ona na bie
ąco.
Parametry przez nią ustawione będą
oddziaływać na kolejne funkcje tak długo, a
parametrem.
nie wywołamy jej raz jeszcze z innym
1.2)
Rysowanie linii
Rysowanie linii jest bardzo zbli one do rysowania punktów. Zmienia się tylko stała
przekazywana do funkcji glBegin. Stała którą przekazujemy, nazywa się
GL_LINES.
Jeśli
chcemy narysować większą ilość linii, musimy wywołać po dwie funkcje glVertex3f dla
ka dego wierzchołka.
Laboratorium nr 3
3/5
Przykład 3:
glBegin(GL_LINES);
glVertex3f(-5.0f, 0.0f, 3.0f);
glVertex3f(5.0f, 3.0f, 0.0f);
glEnd();
Podobnie jak w przypadku punktów mo liwe jest ustawienie rozmiarów (szerokości)
rysowanej linii za pomocą funkcji glLineWidth. Funkcja przyjmuje tylko jeden parametr,
będący szerokości linii.
void glLineWidth(GLfloat rozmiar)
1.3)
Rysowanie pozostałych prymitywów
Tabela poni ej przedstawia pozostałe prymitywy graficzne dostępne w bibliotece
OpenGL.
Parametr
GL_LINE_STRIP
GL_LINE_LOOP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON
Opis
Odcinki połączone (łamana)
Odcinki połączone (łamana zamknięta)
Trójkąty
Połączone trójkąty (pasek trójkątów)
Połączone trójkąty (wachlarz)
Czworokąty
Połączone czworokąty
Wielokąty o dowolnej liczbie wierzchołków
1.4)
Kierunek rysowania
C
C
B
A
A
B
W celu określenie kierunku rysowania (ściany przedniej i tylnej) wielokąta
wykorzystujemy funkcję
glFrontFace.
Laboratorium nr 3
4/5
Funkcja ta przyjmuje jeden parametr określający kierunek rysowania, zgodny z
ruchem wskazówek zegara
GL_CW,
lub kierunek przeciwny do ruchu wskazówek zegara
GL_CCW.
2)
Ustawianie kolorów
Nadawaniem koloru w bibliotece OpenGL zajmuje się rodzina funkcji glColor. Funkcje
z rodziny glColor mogą przyjmować trzy lub cztery parametr.
void glColor3f(GLfloat R, GLfloat G, GLfloat B)
void glColor4f(GLfloat R, GLfloat G, GLfloat B, GLfloat A)
Kolor podaje się w postaci trzech składowych RGB w przypadku funkcji
trójparametrowych, natomiast w postaci RGBA w przypadku funkcji czteroparametrowych
ostatni parametr jest tzw. współczynnikiem alfa.
3)
Czyszczenie bufora kolorów oraz głębi
W OpenGL wyró nimy cztery rodzaj buforów: bufor koloru, głębi, szablonu (wzorca) i
akumulacyjny, Najczęściej stosowane są dwa pierwsze czyli bufor kolorów odpowiedzialny
za prawidłowe wyświetlanie kolorów oraz bufor głębi odpowiedzialny za poprawne
renderowanie obiektów w przestrzeni 3D. Za czyszczenie buforów odpowiedzialna jest
funkcja.
void glClear(GLbitfield mask)
Jako
parametr
przyjmuje
ona
stałe
określającą
rodzaj
bufora
(GL_COLOR_BUFFER_BIT,
operacji „OR”.
GL_DEPTH_BUFFER_BIT,
GL_ACCUM_BUFFER_BIT,
GL_STENCIL_BUFFER_BIT),
który chcemy wyczyścić. Bufory mo na łączyć za pomocą
Dodatkowo do czyszczenie bufora kolorów na wybrany kolor słu y funkcja
void glClearColor(GLfloat R, GLfloat G, GLfloat B, GLfloat A)
Przyjmuje ona cztery parametry określające kolor w formacie RGBA na jaki ma
zostać wyczyszczony bufor.
Laboratorium nr 3
5/5
3)
Antialiasing
Antialiasing umo liwia wygładzenie ostrych krawędzi punktów lub linii. W OpenGL
włączenie antialiasingu polega na aktywowaniu opcji
GL_POINT_SMOOTH
dla punktów lub
GL_LINE_SMOOTH
dla linii. Aktywowane odpowiednich funkcji dokonywane jest za pomocą
funkcji.
void glEnable(GLenum mode)
Wyłączenie opcji odbywa się przez wywołanie funkcji.
void glDisable(GLenum mode)
4)
Cieniowanie
W przypadku kolorowania wielokątów, kolory określane są dla wierzchołków, a nie dla
wielokątów. O tym, czy wielokąt będzie posiadał jednolity kolor (kolor określony dla
ostatniego wierzchołka), czy te
wykorzystywana jest funkcja.
void glShadeModel(GLenum mode)
kolor będzie się zmieniał płynnie od wierzchołka do
wierzchołka, decyduje model cieniowania. Aby ustawić odpowiedni model cieniowania
Funkcja przyjmuje jeden z dwóch parametrów
GL_FLAT
określający model
cieniowania jednolitego (płaskiego) oraz
GL_SMOOTH
model cieniowania płynnego
przejścia. Cieniowanie jest bardzo wa nym elementem wizualizacji. Wykorzystywane jest
m. in. przy obliczeniach związanych ze
światłem.
Zgłoś jeśli naruszono regulamin