Elementy rysowania obiektów z użyciem kwadryk w bibliotekach GLU

Transkrypt

Elementy rysowania obiektów z użyciem kwadryk w bibliotekach GLU
Elementy rysowania obiektów z użyciem kwadryk
w bibliotekach GLU
Andrzej Kądzielawa
Marzec 2012
1
Kwadryki
Kwadrykami nazywamy powierzchnie, które są rozwiązaniem równania drugiego
stopnia. W trzech wymiarach (x, y, z) można to sprowadzić do:
Ax2 + By 2 + Cz 2 + Dxy + Exz + F yz + Gx + Hy + Iz + J = 0,
(1)
gdzie A, B, C, D, E, F, G, H, I, J ∈ R.
Można w ten sposób opisać:
1. elipsoidę (szczególnym przypadkiem jest sfera)
2. hiperboloidy
3. paraboloidy
4. walce
5. stożki
6. płaszczyzny
(Przykłady na en.wikipedia.org/wiki/Quadric).
2
Zastosowanie
W OpenGL w bibliotece OpenGL Utility Library mamy możliwość łatwego rysowania kwadryk, a co za tym idzie. Sfer, walców, i dysków (co jest o tyle
nietrywialne, że “ręczne“ rysowanie tych obiektów jest czasochłonne i wymaga
optymalizacji).
2.1
Metoda
Do narysowania objektu (powiedzmy sfery) musimy mieć przygotowaną kwadrykę. W tym celu tworzymy wskaźnik do kwadryki:
GLUquadricObj * jakas_kwadryka = gluNewQuadric () ;
1
Następnie musimy określić styl rysowania. Mamy do wyboru GL FILL (wypełnienie kolorem), GL SILHOUETTE (sama siatka), czy GL POINTS (same punkty). Na nasze potrzeby wybieramy pełne wypełnienie.
gluQuadricDrawStyle ( jakas_kwadryka , GL_FILL ) ;
Aby narysować objekt musimy określić odpowiednie parametry. I tak:
g l u S p h e r e ( G L U q u a d r i c O b j * j a k a s _ k w a d r y k a , G L d o u b l e p r o m i e n , G L i n t ←l i c z b a _ p u n k t o w _ n a _ r o w n o l e z n i k a c h , G L i n t ←liczba_punktow_na_poludnikach ) ;
g l u C y l i n d e r ( G L U q u a d r i c O b j * j a k a s _ k w a d r y k a , G L d o u b l e ←p r o m i e n _ d o l n e j _ p o d s t a w y , G L d o u b l e p r o m i e n _ g o r n e j _ p o d s t a w y , ←G L d o u b l e w y s o k o s c , G L i n t l i c z b a _ p u n k t o w _ n a _ o b r e c z a c h , G L i n t ←liczba_punktow_na_wysokosciach ) ;
g l u D i s k ( G L U q u a d r i c O b j * j a k a s _ k w a d r y k a , G L d o u b l e ←p r o m i e n _ w e w n w t r z n e j _ o b r e c z y , G L d o u b l e ←p r o m i e n _ z e w n w t r z n e j _ o b r e c z y , G L i n t l i c z b a _ p u n k t o w _ n a _ o b r e c z a c h , ←GLint liczba_petli_miedzy_obreczami ) ;
Tak więc:
gluSphere ( jakas_kwadryka ,10.0 ,100 ,100) ;
narysuje kulę o promieniu 10.0 w punkcie (0, 0, 0) z 100 punktów na zarówno
południkach, jak i równoleżnikach.
Na sam koniec usuwamy kwadrykę:
gluDeleteQuadric ( jakas_kwadryka ) ;
Półprzepuszczalną niebieską kulkę narysujemy wywołując:
GLUquadricObj * jakas_kwadryka = gluNewQuadric () ;
gluQuadricDrawStyle ( jakas_kwadryka , GL_FILL ) ;
glColor4f ( 0 . 0 , 0 . 0 , 1 . 0 , 0 . 5 ) ;
gluSphere ( jakas_kwadryka ,10.0 ,100 ,100) ;
gluDeleteQuadric ( jakas_kwadryka ) ;
czerwony, ledwo widoczny cylinder (o dolnej podstawie na płaszczyźnie z =
0) wywołując:
GLUquadricObj * jakas_kwadryka = gluNewQuadric () ;
gluQuadricDrawStyle ( jakas_kwadryka , GL_FILL ) ;
glColor4f ( 1 . 0 , 0 . 0 , 0 . 0 , 0 . 1 ) ;
gluCylinder ( jakas_kwadryka ,10.0 ,10.0 ,5.0 ,100 ,100) ;
gluDeleteQuadric ( jakas_kwadryka ) ;
a zielony nietransparentny dysk (na płaszczyźnie z = 0) wywołując:
GLUquadricObj * jakas_kwadryka = gluNewQuadric () ;
gluQuadricDrawStyle ( jakas_kwadryka , GL_FILL ) ;
glColor4f ( 0 . 0 , 1 . 0 , 0 . 0 , 1 . 0 ) ;
gluDisk ( jakas_kwadryka ,0.0 ,10.0 ,100 ,100) ;
gluDeleteQuadric ( jakas_kwadryka ) ;
2

Podobne dokumenty