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