Laboratorium grafika3D 3

background image

Laboratorium nr 3

1/5

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.

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.

Grafika Komputerowa 3D

Temat: Rysowanie prymitywów

Instrukcja

laboratoryjna

3

Przygotował: mgr inż. Maciej Lasota

Biblioteka

Rdzeń

Liczba

argumentów

Typ

argumentów

background image

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ż nie wywołamy jej raz jeszcze z innym

parametrem.

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.

background image

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

Opis

GL_LINE_STRIP

Odcinki połączone (łamana)

GL_LINE_LOOP

Odcinki połączone (łamana zamknięta)

GL_TRIANGLES

Trójkąty

GL_TRIANGLE_STRIP

Połączone trójkąty (pasek trójkątów)

GL_TRIANGLE_FAN

Połączone trójkąty (wachlarz)

GL_QUADS

Czworokąty

GL_QUAD_STRIP

Połączone czworokąty

GL_POLYGON

Wielokąty o dowolnej liczbie wierzchołków

1.4) Kierunek rysowania

W celu określenie kierunku rysowania (ściany przedniej i tylnej) wielokąta

wykorzystujemy funkcję glFrontFace.

A

A

B

C

B

C

background image

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,

GL_DEPTH_BUFFER_BIT,

GL_ACCUM_BUFFER_BIT,

GL_STENCIL_BUFFER_BIT), który chcemy wyczyścić. Bufory można łączyć za pomocą

operacji „OR”.

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.

background image

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ż kolor będzie się zmieniał płynnie od wierzchołka do

wierzchołka, decyduje model cieniowania. Aby ustawić odpowiedni model cieniowania

wykorzystywana jest funkcja.

void glShadeModel(GLenum mode)

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.


Wyszukiwarka

Podobne podstrony:
Laboratorium 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7
Laboratorium grafika3D 5
Laboratorium grafika2D 5
Laboratorium grafika3D 6
Laboratorium grafika3D 2
Laboratorium Grafiki Komputerowej3, Studia PK, Inne - serwer Nexus, Dydaktyka, ZaoczniGK, OpenGL-lab
Laboratorium grafika2D 6
Laboratorium grafika3D 1
Laboratorium 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7

więcej podobnych podstron