[Kurs OpenGL, C++] V Okraw

background image

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

background image

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

background image

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


Wyszukiwarka

Podobne podstrony:
[Kurs OpenGL, C++] VII Wie
[Kurs OpenGL, C++] VIII Ko
[Kurs OpenGL, C++] IV Prze
[Kurs OpenGL, C++] III Def
[Kurs OpenGL, C++] VI Elem
[Kurs OpenGL, C++] II Pier
[Kurs OpenGL, C++] I Podstawy
Darmowy Kurs OpenGL, C++ On
KURS ETYKI
Choroba hemolityczna p odu na kurs
zapotrzebowanie ustroju na skladniki odzywcze 12 01 2009 kurs dla pielegniarek (2)
kurs
wady postawy kurs
ostre białaczki 24 11 2008 (kurs)
AT kurs analityka giełdowego 3
Pielęgniarki kurs wersja 6 V 01

więcej podobnych podstron