Strona główna
Kursy
Artykuły
Forum
Pliki
Promuj Nas!
[Kurs OpenGL, C++] V. Okrawanie i obcinanie
http://kursy.ddt.pl/?LessonId=194
1 z 3
2010-04-30 14:22
Powrót
Historia odwiedzonych stron
Poprzednia lekcja
Kurs OpenGL, C++
Następna lekcja
Autor: Janusz Ganczarski
http://januszg.hg.pl/opengl/
V. Okrawanie i obcinanie
Poza opisanymi wczesniej technikami definiowania sceny 3D biblioteka posiada jeszcze dwa ciekawe
mechanizmy. Pierwszy z nich to okrawanie obrazu (ang. scissoring), drugim sa płaszczyzny obcinajace (ang.
clipping plane).
5.1. Okrawanie obrazu
Okrawanie obrazu, czyli zmniejszenie okna renderingu, sprowadza sie do zdefiniowania tzw. prostokata
okrawajacy (ang. scissor box), w granicach którego bedzie wykonywany rendering. Słuzy do tego funkcja:
void
glScissor (GLint x, GLint y, GLsizei width, GLsizei height)
Parametry x i y okreslaja współrzedne lewego dolnego rogu prostokata okrawajacego, a width i height
odpowiednio jego szerokosc i wysokosc. Początkowo prostokat okrawajacy pokrywa cały obszar renderingu.
Standardowo okrawanie obszaru renderingu jest wyłaczone. Do modyfikacji tego i wielu innych parametrów
maszyny stanów OpenGL słuzy para funkcji:
void
glEnable (GLenum cap)
void
glDisable (GLenum cap)
Parametr cap okresla jaki parametr maszyny stanów OpenGL ma byc odpowiednio właczony (glEnable) lub
wyłaczony (glDisable). W przypadku okrawania parametr ten ma wartosc GL SCISSOR TEST.
1.2. Płaszczyzny obcinające
Płaszczyzny obcinajace stanowia uzupełnienie podstawowych płaszczyzn odcinajacych składajacych sie na
bryłe odcinania, a podstawowa ich cecha jest brak ograniczen co do orientacji w przestrzeni sceny 3D.
Definiowanie płaszczyzny odcinania umozliwia funkcja:
void glClipPlane (GLenum plane, const GLdouble *equation)
Parametr plane okresla numer definiowanej płaszczyzny i moze przyjmowac wartosci okreslone stałymi GL
CLIP PLANEi, gdzie i zawiera sie od 0 do pomniejszonej o 1 ilosci płaszczyzn obcinania obsługiwanej przez
dana implementacje biblioteki OpenGL. Ilosc dostepnych płaszczyzn okresla zmienna stanu GL MAX CLIP
PLANES, przy czym specyfikacja OpenGL okresla, ze nie moze ich byc mniej niz szesc.
Typowe pliki nagłówkowe gl.h definiuja szesc stałych: GL CLIP PLANE0, GL CLIP PLANE1, GL CLIP
PLANE2, GL CLIP PLANE3, GL CLIP PLANE4 i GL CLIP PLANE5, ale mozna takze uzywac prostej
arytmetyki: GL CLIP PLANEi = GL CLIP PLANE0 + i.
Drugi parametr equation zawiera wskaznik na tablice ze współczynnikami (A,B,C,D) równania płaszczyzny
w postaci:
Ax + By + Cz + D = 0
Dla tak okreslonego równania płaszczyzny wektor (A,B,C) jest jej wektorem normalnym (prostopadłym).
Płaszczyzna bedzie obcinała te wszystkie elementy sceny, które znajda sie po stronie przeciwnej do wskazywanej
przez zwrot tego wektora.
Współczynniki równania płaszczyzny obcinajacej podlegaja takim samym przekształceniom jak
współrzedne wierzchołków prymitywów. Jeżeli zatem płaszczyzna taka ma pozostac niezmieniona niezbedne jest
wcześniejsze odłozenie macierzy modelowania na stos.
Standardowo wszystkie płaszczyzny obcinania sa wyłaczone. Ich aktywacja wymaga wywołania funkcji
glEnable z parametrem GL CLIP PLANEi, gdzie i jest oczywiscie numerem płaszczyzny. Biblioteka OpenGL
umozliwia takze pobranie współczynników równania płaszczyzny dla wybranej płaszczyzny obcinanaia. Słuzy do
tego funkcja:
void
glGetClipPlane (GLenum plane, GLdouble *equation)
której parametr plane okresla numer płaszczyzny, a equation zawiera wskaźnik na tablice, gdzie zostana
umieszczone współczynniki jej równania. Domyślnie współczynniki równania płaszczyzny obcinajacej wynosza
(0, 0, 0, 0).
5.3. Program przykładowy
Program przykładowy (plik okrawanie i obcinanie.cpp) jest niewielka modyfikacja jednego z poprzednich
programów. Dwie zdefiniowane płaszczyzny obcinajace róznia sie jedynie zwrotem wektora normalnego. Ich
naprzemienne właczanie i wyłaczanie oraz dwukrotne rysowanie obiektu umozliwia uzyskanie efektu
przedstawionego na rysunku 1, czyli dwubarwnosci. Ponadto wielkosc okna renderingu w programie jest
ograniczona, co widac na przykładzie ucha czajnika na powyzszym rysunku.
P anel Logowania
dast19
Administracja
Twój profil
Wyloguj
Uż yt kowników
Obecnie aktywnych:
14
Zalogowanych:
2
Zarejestrowanych:
3855
Ostatnie 24h:
646
Non-cookie 24h:
2051
Wszystkich:
178944
O c z e kuj ąc e t e mat y
Lista jest pusta.
Pokaż wszystkie (0)
Os tatnia Aktualizacja
2010-04-29 22:01:07
(wczoraj)
O st atnio akt ywni
dast19
1 min
Piotr Szawdyński
5 min
Iname
(√ιק)
17 min
szywro5
29 min
Saiph
34 min
markon
57 min
imandre
75 min
WunM
93 min
kuba1817
2 godz
killersft
2 godz
fish13
2 godz
kizia
2 godz
www.sklepjubilerski.com
Reklamy Google
[Kurs OpenGL, C++] V. Okrawanie i obcinanie
http://kursy.ddt.pl/?LessonId=194
2 z 3
2010-04-30 14:22
Rysunek 1. P rogram Okrawanie i obcinanie
1.3.1. Plik okrawanie i obcinanie.cpp
/*
(c) Janusz Ganczarski
http://www.januszg.hg.pl
JanuszG(małpeczka)enter.net.pl
*/
#include <GL/glut.h>
#include <stdlib.h>
// stałe do obsługi menu podręcznego
enum
{
FULL_WINDOW,
// aspekt obrazu - całe okno
ASPECT_1_1,
// aspekt obrazu 1:1
WIRE_SPHERE,
// kula
WIRE_CONE,
// stożek
WIRE_CUBE,
// sześcian
WIRE_TORUS,
// torus
WIRE_DODECAHEDRON,
// dwunastościan
WIRE_TEAPOT,
// czajnik
WIRE_OCTAHEDRON,
// ośmiościan
WIRE_TETRAHEDRON,
// czworościan
WIRE_ICOSAHEDRON,
// dwudziestościan
EXIT
// wyjście
5.4. Źródło materiału
Materiał został pobrany ze strony
http://januszg.hg.pl/opengl/
, za uprzednim otrzymaniem zgody od jego
autora. Podziekowania dla
Janusza Ganczarskiego
za udostępnienie materiałów
Poprzednia lekcja
Kurs OpenGL, C++
Następna lekcja
Wsz e lkie prawa z ast rz e ż one . Aut or: ź ródło z e wnę t rz ne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub
rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.
Powrót
Historia odwiedzonych stron
O portalu
Archiwum
Historia
Indeks
Regulamin
Wyszukiwarka
Linki
© Wszelkie prawa zastrzeżone 2005-2010
Czas wygenerowania strony: 0.060s
Autor: Piotr Szawdyński
[Kurs OpenGL, C++] V. Okrawanie i obcinanie
http://kursy.ddt.pl/?LessonId=194
3 z 3
2010-04-30 14:22