Janusz Ganczarski. OpenGL Definiowanie sceny 3D

Wielkość: px
Rozpocząć pokaz od strony:

Download "Janusz Ganczarski. OpenGL Definiowanie sceny 3D"

Transkrypt

1 Janusz Ganczarski OpenGL Definiowanie sceny 3D

2 Spis treści Spis treści Definiowanie sceny 3D Obszar renderingu Plik kwadrat2.cpp Rzutowanie prostokątne Plik szescian1.cpp Rzutowanie perspektywiczne Plik szescian2.cpp Plik szescian3.cpp Położenie obserwatora Plik szescian4.cpp Literatura

3 1. Definiowanie sceny 3D W kolejnych programach korzystających z biblioteki OpenGL zajmiemy się podstawowymi zagadnieniami, związanymi ze sceną 3D: obszarem renderingu, rzutowaniem i położeniem obserwatora. Informacje tu zawarte stanowią podstawę do wszystkich następnych programów Obszar renderingu W pierwszym programie obszar renderingu, który zajmował początkowo całe okno, nie był modyfikowany podczas zmiany rozmiarów tego okna. W efekcie jedyny element sceny 3D - kwadrat - zawsze znajdował się w tym samym miejscu względem lewego dolnego narożnika okna. W aplikacjach pracujących w systemach okienkowych problem zmiany rozmiaru okna jest jednak tak powszechny, że wymaga specjalnego potraktowania. Jednym z możliwych sposobów jego rozwiązania jest dynamiczna modyfikacja modyfikacja obszaru renderingu. Służy to tego funkcja: void glviewport (GLint x, GLint y, GLsizei width, GLsizei height) której parametry oznaczają: x, y - współrzędne lewego dolnego narożnika obszaru renderingu względem lewego dolnego narożnika okna, width - szerokość okna renderingu, height - wysokość okna renderingu. Domyślnie obszar renderingu zajmuje całe okno udostępnione dla aplikacji OpenGL. W naszym drugim programie w trakcie zmiany rozmiaru okna (funkcja Reshape) będziemy modyfikować obszar renderingu na dwa sposoby. Pierwszy polega na objęciu obszarem renderingu całego dostępnego okna, drugi na takim wyborze okna renderingu aby okno zachowało pierwotny aspekt obrazu, czyli stosunek szerokości do wysokości. Oczywiście przy zastosowaniu pierwszej metody kwadrat będzie zazwyczaj zdeformowany (patrz rysunki 1 i 2). Zmiany sposobu definiowania okna renderingu można dokonać w dowolnym momencie, poprzez wybranie odpowiedniej opcji w menu podręcznym. W funkcji Menu została użyta do tej pory nieopisana funkcja z biblioteki GLUT: int glutget (GLenum type) O tym jakiego rodzaju informacje zwróci funkcja glutget decyduje parametr type. W przykładowym programie są to szerokość i wysokość okna, co odpowiada parametrom opisanym stałymi GLUT WINDOW WIDTH i GLUT WINDOW HEIGHT.

4 1. Definiowanie sceny 3D 2 Warto jeszcze kilka słów poświęcić zagadnieniu aspektu obrazu. Typowe monitory komputerowe posiadają aspekt 4:3, który jest zgodny z większością popularnych rozdzielczości roboczych (np , , , ), ale inna popularna rozdzielczość pikseli odpowiada aspektowi 5:4. Rysunek 1. Programu Kwadrat 2 - rendering na całym oknie Rysunek 2. Programu Kwadrat 2 - rendering z zachowaniem aspektu 1: Plik kwadrat2.cpp / ( c ) Janusz G a n c z a r s k i h t t p : / /www. j a n u s z g. hg. p l JanuszG@enter. n e t. p l / #include <GL/ glut. h> #include < s t d l i b. h> // s t a ł e do o b s ł u g i menu p o d r ę c z n e g o enum FULL WINDOW, // o b s z a r r e n d e r i n g u c a ł e okno ASPECT 1 1, // o b s z a r r e n d e r i n g u a s p e k t 1 : 1

5 1. Definiowanie sceny 3D 3 EXIT // w y j ś c i e ; // a s p e k t o b r a z u int Aspect = FULL WINDOW; // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // k o l o r k w a d r a t u g l C o l o r 3 f ( 1. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i w i e l o k ą t a g l B e g i n (GL POLYGON) ; // k o l e j n e w i e r z c h o ł k i w i e l o k ą t a g l V e r t e x 3 f ( 0. 0, 0. 0, 0. 0 ) ; g l V e r t e x 3 f ( 0. 0, 1. 0, 0. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 0. 0 ) ; g l V e r t e x 3 f ( 1. 0, 0. 0, 0. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ; // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int width, int h e i g h t ) // o b s z a r r e n d e r i n g u a s p e k t 1 : 1 i f ( Aspect == ASPECT 1 1 ) // s z e r o k o ś ć okna w i ę k s z a od w y s o k o ś c i okna i f ( width > h e i g h t ) g l V i e w p o r t ( ( width h e i g h t ) / 2, 0, h e i g h t, h e i g h t ) ; e l s e // w y s o k o ś ć okna w i ę k s z a od w y s o k o ś c i okna i f ( width < h e i g h t ) g l V i e w p o r t ( 0, ( h e i g h t width ) / 2, width, width ) ; e l s e // o b s z a r r e n d e r i n g u c a ł e okno ( t a k ż e, gdy a s p e k t w y n o s i 1 : 1 ) g l V i e w p o r t ( 0, 0, width, h e i g h t ) ; // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // o b s z a r r e n d e r i n g u c a ł e okno case FULL WINDOW: Aspect = FULL WINDOW; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // o b s z a r r e n d e r i n g u a s p e k t 1 : 1 case ASPECT 1 1 : Aspect = ASPECT 1 1 ; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ;

6 1. Definiowanie sceny 3D 4 break ; // w y j ś c i e case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( Kwadrat 2 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna glutreshapefunc ( Reshape ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Obszar renderingu całe okno,full WINDOW) ; glutaddmenuentry ( Obszar renderingu aspekt 1 : 1, ASPECT 1 1 ) ; glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ; // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ; 1.2. Rzutowanie prostokątne Rzutowaniem określamy odwzorowanie zawartości trójwymiarowej sceny graficznej na płaskim ekranie monitora. Biblioteka OpenGL oferuje standardowo dwie metody rzutowania: rzutowanie prostokątne i rzutowanie perspektywiczne. Domyślnie stosowane jest rzutowanie prostokątne. W rzutowaniu prostokątnym (lub ortogonalnym) proste rzutowania są prostopadłe do rzutni, która jest reprezentowana przez obszar renderingu. Z rzutowaniem prostokątnym ściśle związane jest pojęcie bryły odcinania - prostopadłościanu, który stanowi ograniczenie sceny 3D. Obiekty znajdujące się poza bryłą odcinania nie sa rysowane, a obiekty ją przecinające rysowane są tylko częściowo. Rozmiar bryły odcinania w rzutowaniu prostokątnym określa funkcja: void glortho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

7 1. Definiowanie sceny 3D 5 której parametry określają współrzędne punktów przecięcia płaszczyzn tworzących bryłę odcinania z osiami układu współrzędnych kartezjańskich. Płaszczyzny te opisane są następującymi równaniami: x = right x = left y = top y = bottm z = near z = far Obszar renderingu zawiera się w płaszczyźnie o równaniu z = near. Położenie poszczególnych płaszczyzn tworzących bryłę odcinania przedstawia rysunek 3. Trzeba jednak wyraźnie zwrócić uwagę, że początek układu współrzędnych nie musi znajdować się wewnątrz bryły odcinania - rozmiary i położenie bryły ograniczone są jedynie zakresem stosowanych liczb. Y top -far left right X -near Z bottom Rysunek 3. Położenie płaszczyzn bryły odcinania w rzutowaniu prostokątnym Domyślnie bryła odcinania ma postać sześcianu o bokach równych 2, którego środek pokrywa się z początkiem układu współrzędnych, co odpowiada

8 1. Definiowanie sceny 3D 6 wywołaniu funkcji glortho (-1,1,-1,1,-1,1). Oś OZ jest prostopadła do płaszczyzny obszaru renderingu i przechodzi przez środek tego obszaru. Dlatego rysowany w pierwszym i drugim programie kwadrat zajmował początkowo czwartą część okna. Funkcja glortho tworzy macierz rzutu prostokątnego: 2 right+left right left top+bottom top bottom far+near far near right left top bottom far near która jest nastepnie mnożona przez bieżącą macierz i umieszczona na szczycie stosu z bieżącą macierzą. OpenGL zawiera kilka stosów macierzy, z których w przykładowym programie wykorzystamy stos macierzy rzutowania oraz stos macierzy modelowania. Wybór bieżącej macierzy umożliwia funkcja: void glmatrixmode (GLenum mode) gdzie parametr mode może przyjąć jedną z wartości: GL MODELVIEW - macierz modelowania, GL PROJECTION - macierz rzutowania, GL TEXTURE - macierz tekstury (omówiona później). Ponieważ początkowa wartość wybranej macierzy jest nieokreślona, przed wywołaniem glortho należy bieżącej macierzy przyporządkować macierz jednostkową. Najłatwiej można to zrobić używając funkcji: void glloadidentity (void) Analogiczne postępowanie dotyczy macierzy modelowania. Po jej wyborze przykładowym programie (plik szescian1.cpp) w funkcji Display macierzy modelowania także przyporządkowywana jest macierz jednostkowa. Jeżeli renderowana scena jest dwuwymiarowa, do ustawienia parametrów bryły odcinania w rzutowaniu prostokątnym można użyć funkcji z biblioteki GLU: void gluortho2d (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) której parametry left, right, bottom i top odpowiadają parametrom funkcji glortho, a przednia (near) i tylna (far) płaszczyzna obcinania mają wartości odpowiednio -1 i 1. W przykładowym programie początkowa bryła odcinania ma postać sześcianu o krawędziach długości 4, a rysowana figura - także sześcian - ma

9 1. Definiowanie sceny 3D 7 krawędzie o długości 2. Centralne umieszczenie rysowanego sześcianu w połączeniu z zastosowanym rzutowaniem prostokątnym daje w efekcie kwadrat (patrz rysunek 4). Podobnie jak w poprzednim programie możliwy jest wybór, czy scena ma być rysowana z zachowaniem początkowego aspektu obrazu czy też bez zachowania tej proporcji. Jednak w tym przypadku nie jest modyfikowany obszar renderingu ale współrzędne bryły odcinania (funkcja Reshape). Rysunek 4. Początkowe okno programu Sześcian Plik szescian1.cpp / ( c ) Janusz G a n c z a r s k i h t t p : / /www. j a n u s z g. hg. p l JanuszG@enter. n e t. p l / #include <GL/ glut. h> #include < s t d l i b. h> // s t a ł e do o b s ł u g i menu p o d r ę c z n e g o enum FULL WINDOW, // a s p e k t o b r a z u c a ł e okno ASPECT 1 1, // a s p e k t o b r a z u 1 : 1 EXIT // w y j ś c i e ;

10 1. Definiowanie sceny 3D 8 // a s p e k t o b r a z u int Aspect = FULL WINDOW; // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // wybór m a c i e r z y modelowania glmatrixmode (GL MODELVIEW) ; // m a c i e r z modelowania = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // k o l o r k r a w ę d z i s z e ś c i a n u g l C o l o r 3 f ( 0. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i k r a w ę d z i s z e ś c i a n u g l B e g i n ( GL LINES ) ; // w s p ó l r z ę d n e k o l e j n y c h k r a w ę d z i s z e ś c i a n u g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ; // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int width, int h e i g h t ) // o b s z a r r e n d e r i n g u c a ł e okno g l V i e w p o r t ( 0, 0, width, h e i g h t ) ;

11 1. Definiowanie sceny 3D 9 // wybór m a c i e r z y r z u t o w a n i a glmatrixmode ( GL PROJECTION ) ; // m a c i e r z r z u t o w a n i a = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // p a r a m e t r y b r y ł y o b c i n a n i a i f ( Aspect == ASPECT 1 1 ) // w y s o k o ś ć okna w i ę k s z a od w y s o k o ś c i okna i f ( width < h e i g h t && width > 0) glortho ( 2. 0, 2. 0, 2. 0 h e i g h t / width, 2. 0 h e i g h t / width, 2. 0, 2. 0 ) ; e l s e // s z e r o k o ś ć okna w i ę k s z a l u b równa w y s o k o ś c i okna i f ( width >= h e i g h t && h e i g h t > 0) glortho ( 2.0 width / h e i g h t, 2. 0 width / h e i g h t, 2. 0, 2. 0, 2. 0, 2. 0 ) ; e l s e glortho ( 2. 0, 2. 0, 2. 0, 2. 0, 2. 0, 2. 0 ) ; // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // o b s z a r r e n d e r i n g u c a ł e okno case FULL WINDOW: Aspect = FULL WINDOW; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // o b s z a r r e n d e r i n g u a s p e k t 1 : 1 case ASPECT 1 1 : Aspect = ASPECT 1 1 ; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // w y j ś c i e case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( S z e ś c i a n 1 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna glutreshapefunc ( Reshape ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Aspekt obrazu całe okno,full WINDOW) ; glutaddmenuentry ( Aspekt obrazu 1 : 1, ASPECT 1 1 ) ; glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ;

12 1. Definiowanie sceny 3D 10 // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ; 1.3. Rzutowanie perspektywiczne Rzutowanie perspektywiczne daje bardziej realistyczne efekty niż rzutowanie prostokątne, stąd jest szeroko stosowane np. w grach. Parametry bryły odcinania, która przy rzutowaniu perspektywicznym ma postać ostrosłupa ściętego o wierzchołku znajdującym się w początku układu współrzędnych (patrz rysunek 5), określa funkcja: void glfrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) Y top -far left -near right bottom X Z Rysunek 5. Położenie płaszczyzn bryły odcinania w rzutowaniu perspektywicznym

13 1. Definiowanie sceny 3D 11 Parametry left, right, bottom i top wyznaczają rozmiary górnej podstawy bryły odcinania (jest to obszar bezpośrednio odwzorowywany na obszar renderingu), a near i far wyznaczają położenie odpowiednio górnej i dolnej podstawy ostrosłupa (przedniej i tylnej płaszczyzny odcinania), które zawierają się w płaszczyznach o równaniach: z = near i z = far. Parametry near i far muszą mieć wartości dodatnie. Macierz rzutowania perspektywicznego, tworzona przez funkcję glfrustum i mnożona przez aktualnie wybraną macierz, ma postać: 2near right left 0 2near 0 top bottom right+left right left 0 top+bottom top bottom 0 far+near far near 2far near far near Warto zauważyć, że precyzja działania jeszcze przez nas nieużywanego z-bufora, zależy od wartości stosunku parametrów near i far: r = far near Im większa wartość r, tym mniej efektywne jest działanie z-bufora. Oczywiście near nigdy nie może przyjąć wartości równej 0, bowiem przednia płaszczyzna odcinania przechodziła by wówczas przez środek perspektywy. Alternatywny sposób określania rzutu perspektywicznego umożliwia funkcja z biblioteki GLU: void gluperspective (GLdouble fovy, GLdouble aspect, GLdouble znear, GLdouble zfar) gdzie parametr fovy określa w stopniach kąt widzenia obserwatora zawarty w płaszczyźnie YZ ( (top, 0, bottom)), a aspect jest stosunkiem szerokości do wysokości przedniej płaszczyzny odcinania, czyli górnej podstawy ostrosłupa ograniczającego scenę 3D. Parametry znear i zfar odpowiadają parametrom near i far funkcji glfrustum. Macierz rzutowania perspektywicznego, tworzona przez funkcję gluperspective i mnożona przez aktualnie wybraną macierz, ma postać: ctg fovy 2 aspect ctg fovy zf ar znear znear zf ar zf ar+znear 0 0 znear zf ar

14 1. Definiowanie sceny 3D 12 Wewnętrznie funkcja gluperspective wykorzystuje do ustawienia macierzy rzutowania perspektywicznego funkcję glfrustum. Oto przekształcenia parametrów gluperspective na parametry glfrustum: ( ) left = aspect znear tg π fovy ( 360) right = aspect znear tg π fovy ( ) 360 bottom = znear tg π fovy ( top = znear tg π fovy 360 ) 360 W kolejnym przykładowym programie (plik szescian2.cpp) do utworzenia macierzy rzutowania perspektywicznego wykorzystamy funkcję glfrustum. Przednia płaszczyzna odcinania będzie miała takie same rozmiary jak w poprzednim programie. Zmianie ulegną natomiast współrzędne przedniej i tylnej płaszczyzny obcinania - poprzednio jedna z tych płaszczyzn miała wartość ujemną, której nie akceptuje funkcja glfrustum. Rysowanym obiektem ponownie będzie sześcian ale próba narysowania go w tym samym miejscu jak w poprzednim programie spowoduje, że będzie widoczna tylko jedna jego ściana. Wszystko dlatego, że pozostałe ściany sześcianu znajdują się poza obszarem bryły odcinania. Możliwe są trzy sposoby rozwiązania tego problemu. Pierwszy polega na zmianie współrzędnych wierzchołków sześcianu w taki sposób, aby sześcian zmieścił się w zmienionej bryle obcinania. Rozwiązanie to ma jedną zasadniczą wadę - wierzchołki sześcianu trzeba będzie modyfikować przy każdej zmianie parametrów sceny 3D. W przypadku jednego obiektu nie stanowi to specjalnego problemu, ale czyni pomysł niewykonalnym przy każdej bardziej skomplikowanej scenie 3D. Drugie, zastosowane w programie rozwiązanie, polega na przesunięciu wierzchołków sześcianu o wektor [0, 0, 3], czyli o -3 jednostki wzdłuż osi OZ. Realizuje to funkcja gltranslatef, która wywoływana jest bezpośrednio po zainicjowaniu macierzy modelowania macierzą jednostkową (patrz funkcja Display). W efekcie otrzymamy sześcian przedstawiony na rysunku 6. Należy dodać, że taka metoda jest często stosowaną praktyką. Obiekty 3D definiowane są z różnymi współrzędnymi, a następnie odpowiednio transformowane do docelowego położenia w scenie 3D. Funkcje umożliwiające takie przekształcenia poznamy bliżej w następnym odcinku kursu. Trzecią metodą jest modyfikacja położenia obserwatora sceny 3D - zapoznamy się z tą techniką jeszcze w tym odcinku Plik szescian2.cpp / ( c ) Janusz G a n c z a r s k i h t t p : / /www. j a n u s z g. hg. p l

15 1. Definiowanie sceny 3D 13 Rysunek 6. Początkowe okno programu Sześcian 2 JanuszG@enter. n e t. p l / #include <GL/ glut. h> #include < s t d l i b. h> // s t a ł e do o b s ł u g i menu p o d r ę c z n e g o enum FULL WINDOW, // a s p e k t o b r a z u c a ł e okno ASPECT 1 1, // a s p e k t o b r a z u 1 : 1 EXIT // w y j ś c i e ; // a s p e k t o b r a z u int Aspect = FULL WINDOW; // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // wybór m a c i e r z y modelowania glmatrixmode (GL MODELVIEW) ; // m a c i e r z modelowania = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ;

16 1. Definiowanie sceny 3D 14 // p r z e s u n i ę c i e o b i e k t u o w e k t o r [ 0, 0, 3 ] g l T r a n s l a t e f ( 0, 0, 3. 0 ) ; // k o l o r k r a w ę d z i s z e ś c i a n u g l C o l o r 3 f ( 0. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i k r a w ę d z i s z e ś c i a n u g l B e g i n ( GL LINES ) ; // w s p ó l r z ę d n e k o l e j n y c h k r a w ę d z i s z e ś c i a n u g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ; // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int width, int h e i g h t ) // o b s z a r r e n d e r i n g u c a ł e okno g l V i e w p o r t ( 0, 0, width, h e i g h t ) ; // wybór m a c i e r z y r z u t o w a n i a glmatrixmode ( GL PROJECTION ) ; // m a c i e r z r z u t o w a n i a = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // p a r a m e t r y b r y ł y o b c i n a n i a i f ( Aspect == ASPECT 1 1 ) // w y s o k o ś ć okna w i ę k s z a od w y s o k o ś c i okna i f ( width < h e i g h t && width > 0) glfrustum ( 2. 0, 2. 0, 2. 0 h e i g h t / width, 2. 0 h e i g h t / width, 1. 0, 5. 0 ) ; e l s e // s z e r o k o ś ć okna w i ę k s z a l u b równa w y s o k o ś c i okna i f ( width >= h e i g h t && h e i g h t > 0) glfrustum ( 2.0 width / h e i g h t, 2. 0 width / h e i g h t, 2. 0, 2. 0, 1. 0, 5. 0 ) ;

17 1. Definiowanie sceny 3D 15 e l s e glfrustum ( 2. 0, 2. 0, 2. 0, 2. 0, 1. 0, 5. 0 ) ; // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // o b s z a r r e n d e r i n g u c a ł e okno case FULL WINDOW: Aspect = FULL WINDOW; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // o b s z a r r e n d e r i n g u a s p e k t 1 : 1 case ASPECT 1 1 : Aspect = ASPECT 1 1 ; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // w y j ś c i e case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( S z e ś c i a n 2 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna glutreshapefunc ( Reshape ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Aspekt obrazu całe okno,full WINDOW) ; glutaddmenuentry ( Aspekt obrazu 1 : 1, ASPECT 1 1 ) ; glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ; // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ; Drugi program przedstawiający rzutowanie perspektywiczne (plik szescian3.cpp) stosuje funkcję gluperspective. Aby jednak nie powielać rozwiązań z poprzedniego programu dodamy mechanizm pokazujący jaki wpływ na wygląd obiektów 3D ma zmiana położenie środka perspektywy, realizowana poprzez zmianę kąta widzenia obserwatora (parametr fovy funkcji gluperspective). W tym celu potrzebna jest obsługa klawiatury. Podstawo-

18 1. Definiowanie sceny 3D 16 wa funkcja obsługi klawiatury (w przykładowym programie jest to funkcja Keyboard) ma trzy parametry: key - kod ASCII klawisza, x, y - współrzędne kursora myszki w chwili naciśnięcia przycisku klawiatury. Aby obsługa klawiatury działała, w części głównej programu należy włączyć funkcję obsługi klawiatury wywołując funkcję: void glutkeyboardfunc (void (*func)(unsigned char key, int x, int y)) Początkowe okno programu Sześcian 3 zawiera rysunek 7. Przyciskając klawisze + i - można modyfikować kąt patrzenia obserwatora, który początkowo wynosi 90. Rysunek 7. Początkowe okno programu Sześcian Plik szescian3.cpp / ( c ) Janusz G a n c z a r s k i h t t p : / /www. j a n u s z g. hg. p l JanuszG@enter. n e t. p l /

19 1. Definiowanie sceny 3D 17 #include <GL/ glut. h> #include < s t d l i b. h> // s t a ł a do o b s ł u g i menu p o d r ę c z n e g o enum EXIT // w y j ś c i e ; // pionowy k ą t p o l a w i d z e n i a GLdouble f o v y = 9 0 ; // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // wybór m a c i e r z y modelowania glmatrixmode (GL MODELVIEW) ; // m a c i e r z modelowania = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // p r z e s u n i ę c i e o b i e k t u o w e k t o r [ 0, 0, 3 ] g l T r a n s l a t e f ( 0, 0, 3. 0 ) ; // k o l o r k r a w ę d z i s z e ś c i a n u g l C o l o r 3 f ( 0. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i k r a w ę d z i s z e ś c i a n u g l B e g i n ( GL LINES ) ; // w s p ó l r z ę d n e k o l e j n y c h k r a w ę d z i s z e ś c i a n u g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ;

20 1. Definiowanie sceny 3D 18 // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int width, int h e i g h t ) // o b s z a r r e n d e r i n g u c a ł e okno g l V i e w p o r t ( 0, 0, width, h e i g h t ) ; // wybór m a c i e r z y r z u t o w a n i a glmatrixmode ( GL PROJECTION ) ; // m a c i e r z r z u t o w a n i a = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // o b l i c z e n i e a s p e k t u o b r a z u z u w z g l ę d n i e n i e m // przypadku, gdy wysokość obrazu wynosi 0 GLdouble a s p e c t = 1 ; i f ( h e i g h t > 0) aspect = width / ( GLdouble ) height ; // r z u t o w a n i e p e r s p e k t y w i c z n e g l u P e r s p e c t i v e ( fovy, a s p e c t, 1. 0, 5. 0 ) ; // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // o b s ł u g a k l a w i a t u r y void Keyboard ( unsigned char key, int x, int y ) // k l a w i s z + i f ( key == + && f o v y < 180) f o v y++; e l s e // k l a w i s z i f ( key == && f o v y > 0) fovy ; // o d r y s o w a n i e okna Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // w y j ś c i e case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( S z e ś c i a n 3 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna

21 1. Definiowanie sceny 3D 19 glutreshapefunc ( Reshape ) ; // d o ł ą c z e n i e f u n k c j i o b s ł u g i k l a w i a t u r y glutkeyboardfunc ( Keyboard ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ; // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ; 1.4. Położenie obserwatora Ostatnim z podstawowych elementów wymagających omówienia przy tworzeniu sceny 3D jest położenie obserwatora, nazywane także położeniem kamery lub oka. Domyślnie obserwator w OpenGL położony jest w początku układu współrzędnych i skierowany jest w stronę ujemnej półosi OZ. Obserwator jest tak zorientowany w przestrzeni, że kierunek do góry pokrywa się z kierunkiem osi OY. Zasadniczo OpenGL nie umożliwia zmiany położenia obserwatora. Wszystkie przekształcenia położenia obserwatora faktycznie realizowane są jako odpowiednie przekształcenia układu współrzędnych. Aby jednak ułatwić prace związane z definiowaniem tych przekształceń, biblioteka GLU zawiera funkcję glulookat, która pozwala na jednorazowe zdefiniowanie wszystkich parametrów opisujących obserwatora: void glulookat (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) Kolejne trójki parametrów funkcji glulookat oznaczają: eyex, eyey, eyez - współrzędne położenia obserwatora, centerx, centery, centerz - współrzędne punktu, w którego kierunku jest zwrócony obserwator, upx, upy, upz - współrzędne wektora określającego kierunek do góry. Domyślne położenie obserwatora odpowiada wywołaniu glulookat (0.0, 0.0, 0.0, 0.0, 0.0, , 0.0, 1.0, 0.0). W kolejnym przykładowym programie (plik szescian4.cpp) będziemy modyfikować tylko współrzędne położenia obserwatora. Przy niezmiennych współrzędnych punktu, w którego kierunku patrzy obserwator, daje to ciekawy efekt obserwacji sceny z pewnej odległości. Zmiana położenia obserwatora realizowana jest w funkcjach Keyboard (przyciski + i - ) oraz SpecialKeys (klawisze kursora). Warto zauwa-

22 1. Definiowanie sceny 3D 20 żyć, że zmiany współrzędnych obserwatora, które reprezentują zmienne eyex, eyey i eyez, są odwrotne niż można by się spodziewać. Przykładowo naciśnięcie strzałki w dół powoduje zwiększenie o 0,1 zmiennej eyey, która określa współrzędną Y położenia obserwatora. Jest to spowodowane tym, że macierz modelowania, modyfikowana przy wywołaniu funkcji glulookat, odgrywa podwójną rolę. Z jednej strony umożliwia przekształcenia współrzędnych obiektu (patrz poprzedni przykład), a z drugiej przekształcenia współrzędnych obserwatora. Przykładowo, to co z punktu widzenia obiektu jest przesunięciem o wektor [1, 0, 0], dla obserwatora jest przesunięciem o wektor przeciwny tj. [ 1, 0, 0]. Dobre poznanie opisanego mechanizmy wymaga eksperymentów, do których gorąco zachęcam Czytelników. Do omówienia pozostała wprowadzona w ostatnim przykładzie obsługa klawiszy kursora. Jest ona realizowana odrębnie od obsługi przycisków, które reprezentowane są bezpośrednio przez kody ASCII (funkcja Keyboard). Funkcja obsługująca klawisze kursora oraz przyciski funkcyjne (w przykładowym programie jest to funkcja SpecialKeys) ma trzy parametry: key - kod przycisku; zwracana jest jedna z poniższych wartości: GLUT KEY F1 - przycisk F1, GLUT KEY F2 - przycisk F2, GLUT KEY F3 - przycisk F3, GLUT KEY F4 - przycisk F4, GLUT KEY F5 - przycisk F5, GLUT KEY F6 - przycisk F6, GLUT KEY F7 - przycisk F7, GLUT KEY F8 - przycisk F8, GLUT KEY F9 - przycisk F9, GLUT KEY F10 - przycisk F10, GLUT KEY F11 - przycisk F11, GLUT KEY F12 - przycisk F12, GLUT KEY LEFT - kursor w lewo, GLUT KEY UP - kursor do góry, GLUT KEY RIGHT - kursor w prawo, GLUT KEY DOWN - kursor w dół, GLUT KEY PAGE UP - przycisk Page Up GLUT KEY PAGE DOWN - przycisk Page Down, GLUT KEY HOME - przycisk Home, GLUT KEY END - przycisk End, GLUT KEY INSERT - przycisk Insert. x, y - współrzędne kursora myszki w chwili naciśnięcia przycisku klawiatury. Podobnie jak w przypadku poprzedniej funkcji obsługującej klawiaturę,

23 1. Definiowanie sceny 3D 21 w głównym programie należy włączyć obsługę klawiszy kursora i klawiszy funkcyjnych wywołując funkcję: void glutspecialfunc (void (*func)(int key, int x, int y)) Rysunek 8 przedstawia przykładowe okno programu Sześcian 4, którego kod źródłowy znajduje się poniżej. Rysunek 8. Przykładowe okno programu Sześcian Plik szescian4.cpp / ( c ) Janusz G a n c z a r s k i h t t p : / /www. j a n u s z g. hg. p l JanuszG@enter. n e t. p l / #include <GL/ glut. h> #include < s t d l i b. h> // s t a ł e do o b s ł u g i menu p o d r ę c z n e g o enum FULL WINDOW, // a s p e k t o b r a z u c a ł e okno ASPECT 1 1, // a s p e k t o b r a z u 1 : 1 EXIT // w y j ś c i e ; // a s p e k t o b r a z u

24 1. Definiowanie sceny 3D 22 int Aspect = FULL WINDOW; // w p ó ł r z ę d n e p o ł o ż e n i a o b s e r w a t o r a GLdouble eyex = 0 ; GLdouble eyey = 0 ; GLdouble e y e z = 3 ; // współrzędne punktu w k t ó r e g o kierunku j e s t zwrócony obserwator, GLdouble c e n t e r x = 0 ; GLdouble c e n t e r y = 0 ; GLdouble c e n t e r z = 100; // f u n k c j a g e n e r u j ą c a s c e n ę 3D void D i s p l a y ( ) // k o l o r t ł a z a w a r t o ś ć b u f o r a k o l o r u g l C l e a r C o l o r ( 1. 0, 1. 0, 1. 0, 1. 0 ) ; // c z y s z c z e n i e b u f o r a k o l o r u g l C l e a r ( GL COLOR BUFFER BIT ) ; // wybór m a c i e r z y modelowania glmatrixmode (GL MODELVIEW) ; // m a c i e r z modelowania = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // u s t a w i e n i e o b s e r w a t o r a glulookat ( eyex, eyey, eyez, c e n t e r x, c e n t e r y, c e n t e r z, 0, 1, 0 ) ; // k o l o r k r a w ę d z i s z e ś c i a n u g l C o l o r 3 f ( 0. 0, 0. 0, 0. 0 ) ; // p o c z ą t e k d e f i n i c j i k r a w ę d z i s z e ś c i a n u g l B e g i n ( GL LINES ) ; // w s p ó l r z ę d n e k o l e j n y c h k r a w ę d z i s z e ś c i a n u g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; g l V e r t e x 3 f ( 1. 0, 1. 0, 1. 0 ) ; // k o n i e c d e f i n i c j i prymitywu glend ( ) ;

25 1. Definiowanie sceny 3D 23 // s k i e r o w a n i e p o l e c e ń do wykonania g l F l u s h ( ) ; // zamiana b u f o r ó w k o l o r u glutswapbuffers ( ) ; // zmiana w i e l k o ś c i okna void Reshape ( int width, int h e i g h t ) // o b s z a r r e n d e r i n g u c a ł e okno g l V i e w p o r t ( 0, 0, width, h e i g h t ) ; // wybór m a c i e r z y r z u t o w a n i a glmatrixmode ( GL PROJECTION ) ; // m a c i e r z r z u t o w a n i a = m a c i e r z j e d n o s t k o w a g l L o a d I d e n t i t y ( ) ; // p a r a m e t r y b r y ł y o b c i n a n i a i f ( Aspect == ASPECT 1 1 ) // w y s o k o ś ć okna w i ę k s z a od w y s o k o ś c i okna i f ( width < h e i g h t && width > 0) glfrustum ( 2. 0, 2. 0, 2. 0 h e i g h t / width, 2. 0 h e i g h t / width, 1. 0, 5. 0 ) ; e l s e // s z e r o k o ś ć okna w i ę k s z a l u b równa w y s o k o ś c i okna i f ( width >= h e i g h t && h e i g h t > 0) glfrustum ( 2.0 width / h e i g h t, 2. 0 width / h e i g h t, 2. 0, 2. 0, 1. 0, 5. 0 ) ; e l s e glfrustum ( 2. 0, 2. 0, 2. 0, 2. 0, 1. 0, 5. 0 ) ; // g e n e r o w a n i e s c e n y 3D D i s p l a y ( ) ; // o b s ł u g a k l a w i a t u r y void Keyboard ( unsigned char key, int x, int y ) // k l a w i s z + i f ( key == + ) e y e z = 0.1; e l s e // k l a w i s z i f ( key == ) e y e z + = 0. 1 ; // o d r y s o w a n i e okna Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; // o b s ł u g a k l a w i s z y f u n k c y j n y c h i k l a w i s z y k u r s o r a void SpecialKeys ( int key, int x, int y ) switch ( key ) // k u r s o r w l e w o case GLUT KEY LEFT : eyex + = 0. 1 ; break ; // k u r s o r w g ó r ę case GLUT KEY UP : eyey = 0.1; break ; // k u r s o r w prawo case GLUT KEY RIGHT : eyex = 0.1; break ; // k u r s o r w d ó ł case GLUT KEY DOWN: eyey + = 0. 1 ;

26 1. Definiowanie sceny 3D 24 break ; // o d r y s o w a n i e okna Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; // ob sług a menu podręcznego void Menu ( int v a l u e ) switch ( v a l u e ) // o b s z a r r e n d e r i n g u c a ł e okno case FULL WINDOW: Aspect = FULL WINDOW; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // o b s z a r r e n d e r i n g u a s p e k t 1 : 1 case ASPECT 1 1 : Aspect = ASPECT 1 1 ; Reshape ( glutget (GLUT WINDOW WIDTH), glutget (GLUT WINDOW HEIGHT ) ) ; break ; // w y j ś c i e case EXIT : e x i t ( 0 ) ; int main ( int argc, char argv [ ] ) // i n i c j a l i z a c j a b i b l i o t e k i GLUT g l u t I n i t (& argc, argv ) ; // i n i c j a l i z a c j a b u f o r a ramki g l u t I n i t D i s p l a y M o d e (GLUT DOUBLE GLUT RGB ) ; // r o z m i a r y g ł ó w n e g o okna programu g l u t I n i t W i n d o w S i z e ( 4 0 0, ) ; // u t w o r z e n i e g ł ó w n e g o okna programu glutcreatewindow ( S z e ś c i a n 4 ) ; // d o ł ą c z e n i e f u n k c j i g e n e r u j ą c e j s c e n ę 3D glutdisplayfunc ( Display ) ; // d o ł ą c z e n i e f u n k c j i wywoływanej p r z y z m i a n i e r o z m i a r u okna glutreshapefunc ( Reshape ) ; // d o ł ą c z e n i e f u n k c j i o b s ł u g i k l a w i a t u r y glutkeyboardfunc ( Keyboard ) ; // d o ł ą c z e n i e f u n k c j i o b s ł u g i k l a w i s z y f u n k c y j n y c h i k l a w i s z y k u r s o r a glutspecialfunc ( SpecialKeys ) ; // u t w o r z e n i e menu p o d r ę c z n e g o glutcreatemenu ( Menu ) ; // d o d a n i e p o z y c j i do menu p o d r ę c z n e g o glutaddmenuentry ( Aspekt obrazu całe okno,full WINDOW) ; glutaddmenuentry ( Aspekt obrazu 1 : 1, ASPECT 1 1 ) ; glutaddmenuentry ( Wyjście,EXIT ) ; // o k r e ś l e n i e p r z y c i s k u m y s z k i o b s ł u g u j ą c e j menu p o d r ę c z n e glutattachmenu (GLUT RIGHT BUTTON ) ; // w p r o w a d z e n i e programu do o b s ł u g i p ę t l i komunikatów glutmainloop ( ) ; return 0 ;

27 Literatura 25 Literatura [1] Mark Segal, Kurt Akeley: The OpenGL Graphics System. A Specification Version 2.0 [2] Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The Red Book [3] Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta, Helion 1999 [4] The official OpenGL web page, [5] Piotr andrzejewski, Jakub Kurzak: Wprowadzenie do OpenGL. Programowanie zastosowań graficznych, Kwantum 2000

Janusz Ganczarski. OpenGL Pierwszy program

Janusz Ganczarski. OpenGL Pierwszy program Janusz Ganczarski OpenGL Pierwszy program Spis treści Spis treści..................................... 1 1. Pierwszy program.............................. 1 1.1. Rysowanie sceny 3D...........................

Bardziej szczegółowo

Rzutowanie DOROTA SMORAWA

Rzutowanie DOROTA SMORAWA Rzutowanie DOROTA SMORAWA Rzutowanie Rzutowanie jest operacja polegająca na tym, aby odpowiednie piksele na płaskim ekranie były wyświetlane w taki sposób, by sprawiać wrażenie trójwymiarowej głębi (przestrzeni

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/6 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Manipulowanie przestrzenią 2 Przygotował: mgr inż. Maciej Lasota 1) Manipulowanie przestrzenią Istnieją dwa typy układów współrzędnych:

Bardziej szczegółowo

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych Instrukcja laboratoryjna 9 Grafika komputerowa 3D Temat: Manipulowanie przestrzenią Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Układ

Bardziej szczegółowo

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL Dorota Smorawa Pierwszy program Pierwszy program będzie składał się z trzech etapów: Funkcji rysującej scenę 3D, Inicjacji okna renderingu,

Bardziej szczegółowo

Przekształcenia geometryczne. Dorota Smorawa

Przekształcenia geometryczne. Dorota Smorawa Przekształcenia geometryczne Dorota Smorawa Przekształcenia geometryczne Na poprzednich laboratoriach już dowiedzieliśmy się, na czym polegają podstawowe przekształcenia geometryczne. Trzy podstawowe przekształcenia

Bardziej szczegółowo

Prosty program- cpp. #include <GL/glut.h>

Prosty program- cpp. #include <GL/glut.h> Wizualizacje 3D Prosty program- cpp #include #include #include int main(int argc, char** argv) { glutinit(&argc, argv); glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA ); glutinitwindowsize(400,

Bardziej szczegółowo

Trójwymiarowa grafika komputerowa rzutowanie

Trójwymiarowa grafika komputerowa rzutowanie Trójwymiarowa grafika komputerowa rzutowanie Mirosław Głowacki Wydział Inżynierii Metali i Informatyki Przemysłowej Rzutowanie w przestrzeni 3D etapy procesu rzutowania określenie rodzaju rzutu określenie

Bardziej szczegółowo

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6 Wykład 6 p. 1/2 Oprogramowanie i wykorzystanie stacji roboczych Wykład 6 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Wektory normalne

Bardziej szczegółowo

Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki

Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki Strona 1 z 9 C E L Ć W I C Z E N I A Celem ćwiczenia jest zapoznanie się z podstawowymi operacjami

Bardziej szczegółowo

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. Funkcje OpenGL

Bardziej szczegółowo

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30 Wykład 4 mgr inż. 1/30 Synteza grafiki polega na stworzeniu obrazu w oparciu o jego opis. Synteza obrazu w grafice komputerowej polega na wykorzystaniu algorytmów komputerowych do uzyskania obrazu cyfrowego

Bardziej szczegółowo

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. WjęzykuC: pliki

Bardziej szczegółowo

Temat: Transformacje 3D

Temat: Transformacje 3D Instrukcja laboratoryjna 11 Grafika komputerowa 3D Temat: Transformacje 3D Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny Bardzo często programując

Bardziej szczegółowo

Światła i rodzaje świateł. Dorota Smorawa

Światła i rodzaje świateł. Dorota Smorawa Światła i rodzaje świateł Dorota Smorawa Rodzaje świateł Biblioteka OpenGL posiada trzy podstawowe rodzaje świateł: światło otoczenia, światło rozproszone oraz światło odbite. Dodając oświetlenie na scenie

Bardziej szczegółowo

Temat: Wprowadzenie do OpenGL i GLUT

Temat: Wprowadzenie do OpenGL i GLUT Instrukcja laboratoryjna 8 Grafika komputerowa 3D Temat: Wprowadzenie do OpenGL i GLUT Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny OpenGL

Bardziej szczegółowo

Mieszanie kolorów. Dorota Smorawa

Mieszanie kolorów. Dorota Smorawa Mieszanie kolorów Dorota Smorawa Tworzenie efektu przezroczystości Biblioteka OpenGL umożliwia nam tworzenie bardzo ciekawych efektów związanych z przezroczystością i odbiciem. Aby zrealizować efekt przezroczystości

Bardziej szczegółowo

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE

OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE SPIS TREŚCI 1. Przekształcenia geometryczne... 3 1.1. Obrót... 3 1.2. Skalowanie... 3 1.3. Przesunięcie... 3 1.4. Mnożenie macierzy... 4 1.5. Ładowanie macierzy... 4

Bardziej szczegółowo

Materiały. Dorota Smorawa

Materiały. Dorota Smorawa Materiały Dorota Smorawa Materiały Materiały, podobnie jak światła, opisywane są za pomocą trzech składowych. Opisują zdolności refleksyjno-emisyjne danej powierzchni. Do tworzenia materiału służy funkcja:

Bardziej szczegółowo

Rysowanie punktów na powierzchni graficznej

Rysowanie punktów na powierzchni graficznej Rysowanie punktów na powierzchni graficznej Tworzenie biblioteki rozpoczniemy od podstawowej funkcji graficznej gfxplot() - rysowania pojedynczego punktu na zadanych współrzędnych i o zadanym kolorze RGB.

Bardziej szczegółowo

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D Wprowadzenie do rysowania w 3D 13 Praca w środowisku 3D Pierwszym krokiem niezbędnym do rozpoczęcia pracy w środowisku 3D programu AutoCad 2010 jest wybór odpowiedniego obszaru roboczego. Można tego dokonać

Bardziej szczegółowo

Wykład 4. Rendering (1) Informacje podstawowe

Wykład 4. Rendering (1) Informacje podstawowe Wykład 4. Rendering (1) Informacje podstawowe Z punktu widzenia dzisiejszego programowania gier: Direct3D jest najczęściej wykorzystywanym przez profesjonalnych deweloperów gier API graficznym na platformie

Bardziej szczegółowo

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( ) Wizualizacje 3D Bufor koloru Bufor koloru służy do przechowywania obrazu renderowanej sceny 3D. Typowo OpenGL stosuje dwa bufory koloru: przedni i tylny. Bieżąca scena znajduje się w przednim buforze i

Bardziej szczegółowo

Elementarne obiekty geometryczne, bufory. Dorota Smorawa

Elementarne obiekty geometryczne, bufory. Dorota Smorawa Elementarne obiekty geometryczne, bufory Dorota Smorawa Elementarne obiekty Tworząc scenę 3D, od najprostszej, po najbardziej skomplikowaną, używamy obiektów złożonych, przede wszystkim podstawowych, elementarnych

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL. Laboratorium 1 Część I Podstawy biblioteki graficznej OpenGL. I. Konfiguracja środowiska 1. Ściągamy bibliotekę freeglut i rozpakujemy do głównego folderu dysku systemowego np. C:\freeglut 2. Uruchamiamy

Bardziej szczegółowo

gdzie (4.20) (4.21) 4.3. Rzut równoległy

gdzie (4.20) (4.21) 4.3. Rzut równoległy 4.3. Rzut równoległy 75 gdzie (4.20) Punkt zbiegu, określony wzorami (4.19) (4.20), leży na prostej przechodzącej przez środek rzutowania i równoległej do wektora u. Zauważmy, że gdy wektor u jest równoległy

Bardziej szczegółowo

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie http://galaxy.agh.edu.pl/~mhojny Prowadzący: dr inż. Hojny Marcin Akademia Górniczo-Hutnicza Mickiewicza 30 30-059 Krakow pawilon B5/p.406 tel. (+48)12 617 46

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: moduł specjalności obowiązkowy: Inżynieria oprogramowania Rodzaj zajęć: wykład, laboratorium I KARTA PRZEDMIOTU CEL PRZEDMIOTU GRAFICZNE MODELOWANIE

Bardziej szczegółowo

Animowana grafika 3D. Opracowanie: J. Kęsik.

Animowana grafika 3D. Opracowanie: J. Kęsik. Animowana grafika 3D Opracowanie: J. Kęsik kesik@cs.pollub.pl Rzutowanie Równoległe Perspektywiczne Rzutowanie równoległe Rzutowanie równoległe jest powszechnie używane w rysunku technicznym - umożliwienie

Bardziej szczegółowo

Układy współrzędnych GUW, LUW Polecenie LUW

Układy współrzędnych GUW, LUW Polecenie LUW Układy współrzędnych GUW, LUW Polecenie LUW 1 Układy współrzędnych w AutoCAD Rysowanie i opis (2D) współrzędnych kartezjańskich: x, y współrzędnych biegunowych: r

Bardziej szczegółowo

Grafika komputerowa Wykład 4 Geometria przestrzenna

Grafika komputerowa Wykład 4 Geometria przestrzenna Grafika komputerowa Wykład 4 Geometria przestrzenna Instytut Informatyki i Automatyki Państwowa Wyższa Szkoła Informatyki i Przedsiębiorczości w Łomży 2 0 0 9 Spis treści Spis treści 1 Geometria 3D - podstawowe

Bardziej szczegółowo

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012 Rysowanie precyzyjne 7 W ćwiczeniu tym pokazane zostaną wybrane techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2012, między innymi wykorzystanie punktów charakterystycznych. Narysować

Bardziej szczegółowo

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup Baltie 3 Podręcznik do nauki programowania dla klas I III gimnazjum Tadeusz Sołtys, Bohumír Soukup Czytanie klawisza lub przycisku myszy Czytaj klawisz lub przycisk myszy - czekaj na naciśnięcie Polecenie

Bardziej szczegółowo

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz. Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych Wykład 5 Dr inż. Tomasz Olas olas@icis.pcz.pl OpenGL (Open Graphics Library) jest niskopoziomowa biblioteka graficzna (API - programowy

Bardziej szczegółowo

BRYŁY PODSTAWOWE I OBIEKTY ELEMENTARNE

BRYŁY PODSTAWOWE I OBIEKTY ELEMENTARNE Przemysław KLOC, Krzysztof KUBISTA BRYŁY PODSTAWOWE I OBIEKTY ELEMENTARNE Streszczenie: Niniejszy rozdział dotyczy wykorzystania brył podstawowych i obiektów elementarnych podczas modelowania 3D. Napisany

Bardziej szczegółowo

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku.

Tworzenie nowego rysunku Bezpośrednio po uruchomieniu programu zostanie otwarte okno kreatora Nowego Rysunku. 1 Spis treści Ćwiczenie 1...3 Tworzenie nowego rysunku...3 Ustawienia Siatki i Skoku...4 Tworzenie rysunku płaskiego...5 Tworzenie modeli 3D...6 Zmiana Układu Współrzędnych...7 Tworzenie rysunku płaskiego...8

Bardziej szczegółowo

Janusz Ganczarski CIE XYZ

Janusz Ganczarski CIE XYZ Janusz Ganczarski CIE XYZ Spis treści Spis treści..................................... 1 1. CIE XYZ................................... 1 1.1. Współrzędne trójchromatyczne..................... 1 1.2. Wykres

Bardziej szczegółowo

54. Układy współrzędnych

54. Układy współrzędnych 54 54. Układy współrzędnych Współrzędne punktów i dostępne układy współrzędnych na płaszczyźnie (2D) omówiono w rozdziale 8. Współrzędne 2D. W tym rozdziale podane zostaną informacje dodatkowe konieczne

Bardziej szczegółowo

Grafika 3D OpenGL część II

Grafika 3D OpenGL część II #include #include #include float kat=0.0f; void renderujscene(void) { glclearcolor(1.0f,1.0f,1.0f,1.0f); glclear(gl_color_buffer_bit); glpushmatrix(); glrotatef(kat,0,0,1);

Bardziej szczegółowo

GEOMETRIA PRZESTRZENNA (STEREOMETRIA)

GEOMETRIA PRZESTRZENNA (STEREOMETRIA) GEOMETRIA PRZESTRZENNA (STEREOMETRIA) WZAJEMNE POŁOŻENIE PROSTYCH W PRZESTRZENI Stereometria jest działem geometrii, którego przedmiotem badań są bryły przestrzenne oraz ich właściwości. Na początek omówimy

Bardziej szczegółowo

TWORZENIE OBIEKTÓW GRAFICZNYCH

TWORZENIE OBIEKTÓW GRAFICZNYCH R O Z D Z I A Ł 2 TWORZENIE OBIEKTÓW GRAFICZNYCH Rozdział ten poświęcony będzie dokładnemu wyjaśnieniu, w jaki sposób działają polecenia służące do rysowania różnych obiektów oraz jak z nich korzystać.

Bardziej szczegółowo

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza Plan wykładu Wykład 3 Rzutowanie prostokątne, widoki, przekroje, kłady 1. Rzutowanie prostokątne - geneza 2. Dwa sposoby wzajemnego położenia rzutni, obiektu i obserwatora, metoda europejska i amerykańska

Bardziej szczegółowo

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL Grafika komputerowa i wizualizacja, Bioinformatyka S1, II Rok OpenGL Open Graphics Library Jest to API pozwalające na renderowanie grafiki w czasie rzeczywistym,

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python PyGame 18 grudnia 2015 Plan wykładu 1 Wprowadzenie Parametry wyświetlania Powierzchnie 2 Klawiatura Mysz Dżojstik 3 Odtwarzanie plików dźwiękowych Odtwarzanie muzyki Samodzielne tworzenie dźwięków 4 3D:

Bardziej szczegółowo

Rysowanie precyzyjne. Polecenie:

Rysowanie precyzyjne. Polecenie: 7 Rysowanie precyzyjne W ćwiczeniu tym pokazane zostaną różne techniki bardzo dokładnego rysowania obiektów w programie AutoCAD 2010, między innymi wykorzystanie punktów charakterystycznych. Z uwagi na

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu Oznaczenia A, B, 1, 2, I, II, punkty a, b, proste α, β, płaszczyzny π 1, π 2, rzutnie k kierunek rzutowania d(a,m) odległość punktu od prostej m(a,b) prosta przechodząca przez punkty A i B α(1,2,3) płaszczyzna

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do 0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do obserwatora f) w kierunku od obserwatora 1. Obrót dookoła osi

Bardziej szczegółowo

BLENDER- Laboratorium 1 opracował Michał Zakrzewski, 2014 r. Interfejs i poruszanie się po programie oraz podstawy edycji bryły

BLENDER- Laboratorium 1 opracował Michał Zakrzewski, 2014 r. Interfejs i poruszanie się po programie oraz podstawy edycji bryły BLENDER- Laboratorium 1 opracował Michał Zakrzewski, 2014 r. Interfejs i poruszanie się po programie oraz podstawy edycji bryły Po uruchomieniu programu Blender zawsze ukaże się nam oto taki widok: Jak

Bardziej szczegółowo

1. Opis okna podstawowego programu TPrezenter.

1. Opis okna podstawowego programu TPrezenter. OPIS PROGRAMU TPREZENTER. Program TPrezenter przeznaczony jest do pełnej graficznej prezentacji danych bieżących lub archiwalnych dla systemów serii AL154. Umożliwia wygodną i dokładną analizę na monitorze

Bardziej szczegółowo

Grafika komputerowa Wstęp do OpenGL

Grafika komputerowa Wstęp do OpenGL Instytut Informatyki Politechniki Warszawskiej Grafika komputerowa Wstęp do OpenGL Zbigniew Szymański z.szymanski@ii.pw.edu.pl listopad 2008 - v1 Prowadzący zajęcia: Sprawy organizacyjne /1/ Zbigniew Szymański

Bardziej szczegółowo

Część II Wyświetlanie obrazów

Część II Wyświetlanie obrazów Tło fragmentu ABA-X Display jest wyposażony w mechanizm automatycznego tworzenia tła fragmentu. Najprościej można to wykonać za pomocą skryptu tlo.sh: Składnia: tlo.sh numer oznacza numer

Bardziej szczegółowo

DARMOWA PRZEGLĄDARKA MODELI IFC

DARMOWA PRZEGLĄDARKA MODELI IFC www.bimvision.eu DARMOWA PRZEGLĄDARKA MODELI IFC BIM VISION. OPIS FUNKCJONALNOŚCI PROGRAMU. CZĘŚĆ I. Spis treści OKNO GŁÓWNE... 1 NAWIGACJA W PROGRAMIE... 3 EKRAN DOTYKOWY... 5 MENU... 6 ZAKŁADKA WIDOK....

Bardziej szczegółowo

RZUTOWANIE PROSTOKĄTNE

RZUTOWANIE PROSTOKĄTNE RZUTOWANIE PROSTOKĄTNE wg PN-EN ISO 5456-2 rzutowanie prostokątne (przedstawienie prostokątne) stanowi odwzorowanie geometrycznej postaci konstrukcji w postaci rysunków dwuwymiarowych. Jest to taki rodzaj

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Techniki wstawiania tabel

Techniki wstawiania tabel Tabele w Wordzie Tabela w Wordzie to uporządkowany układ komórek w postaci wierszy i kolumn, w które może być wpisywany tekst lub grafika. Każda komórka może być formatowana oddzielnie. Możemy wyrównywać

Bardziej szczegółowo

Spis treści. Konwencje zastosowane w książce...5. Dodawanie stylów do dokumentów HTML oraz XHTML...6. Struktura reguł...9. Pierwszeństwo stylów...

Spis treści. Konwencje zastosowane w książce...5. Dodawanie stylów do dokumentów HTML oraz XHTML...6. Struktura reguł...9. Pierwszeństwo stylów... Spis treści Konwencje zastosowane w książce...5 Dodawanie stylów do dokumentów HTML oraz XHTML...6 Struktura reguł...9 Pierwszeństwo stylów... 10 Klasyfikacja elementów... 13 Sposoby wyświetlania elementów...

Bardziej szczegółowo

Transformacje obiektów 3D

Transformacje obiektów 3D Synteza i obróbka obrazu Transformacje obiektów 3D Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych Lokalny układ współrzędnych Tworząc model obiektu, zapisujemy

Bardziej szczegółowo

Programowanie, część III

Programowanie, część III 9 kwietnia 2010 Biblioteki i podsystemy graficzne Biblioteki graficzne (ang. graphics library) Są potrzebne, aby można było programować grafikę w C++, ponieważ (niestety) we współczesnych systemach komputerowych

Bardziej szczegółowo

Ćwiczenia nr 4. TEMATYKA: Rzutowanie

Ćwiczenia nr 4. TEMATYKA: Rzutowanie TEMATYKA: Rzutowanie Ćwiczenia nr 4 DEFINICJE: Rzut na prostą: rzutem na prostą l (zwaną rzutnią) w kierunku rzutowania k (k l) nazywamy przekształcenie płaszczyzny przyporządkowujące: a) Punktom prostej

Bardziej szczegółowo

OpenGL - maszyna stanu. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 7. Grupy atrybutów. Zmienne stanu.

OpenGL - maszyna stanu. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 7. Grupy atrybutów. Zmienne stanu. OpenGL - maszyna stanu Oprogramowanie i wykorzystanie stacji roboczych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska OpenGL posiada

Bardziej szczegółowo

OPROGRAMOWANIE UŻYTKOWE

OPROGRAMOWANIE UŻYTKOWE R 3 OPROGRAMOWANIE UŻYTKOWE PROJEKTOWANIE Z WYKORZYSTANIEM PROGRAMU Solid Edge Cz. I Part 14 A 1,5 15 R 2,5 OO6 R 4,5 12,72 29 7 A 1,55 1,89 1,7 O33 SECTION A-A OPRACOWANIE: mgr inż. Marcin Bąkała Uruchom

Bardziej szczegółowo

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH Stereometria jest działem geometrii, którego przedmiotem badań są bryły przestrzenne oraz ich właściwości. WZAJEMNE POŁOŻENIE PROSTYCH W PRZESTRZENI 2 proste

Bardziej szczegółowo

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D. System graficzny scena 3D algorytm graficzny obraz 2D Potok graficzny 3D Radosław Mantiuk Dane wejściowe Algorytm tworzący obraz wyjściowy na podstawie sceny 3D Dane wyjściowe Wydział Informatyki Zachodniopomorski

Bardziej szczegółowo

GRK 2. dr Wojciech Palubicki

GRK 2. dr Wojciech Palubicki GRK dr Wojciech Palubicki Macierz wektor produkt jako Transformacja T: R n R m T Ԧx = A Ԧx Przemieszczanie wierzchołków - Transformacje Skalowanie Rotacja Translacja -y -y Macierz rotacji M wobec punktu

Bardziej szczegółowo

Programowanie Procesorów Graficznych

Programowanie Procesorów Graficznych Programowanie Procesorów Graficznych Wykład 1 9.10.2012 Prehistoria Zadaniem karty graficznej było sterowanie sygnałem do monitora tak aby wyświetlić obraz zgodnie z zawartościa pamięci. Programiści pracowali

Bardziej szczegółowo

Mapowanie sześcienne otoczenia (cubic environment mapping)

Mapowanie sześcienne otoczenia (cubic environment mapping) Mapowanie sześcienne otoczenia (cubic environment mapping) Mapowanie środowiska jest techniką pozwalającą na odwzorowanie otoczenia na powierzchni przedmiotu przy użyciu specjalnie spreparowanej tekstury.

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Notacja Denavita-Hartenberga

Notacja Denavita-Hartenberga Notacja DenavitaHartenberga Materiały do ćwiczeń z Podstaw Robotyki Artur Gmerek Umiejętność rozwiązywania prostego zagadnienia kinematycznego jest najbardziej bazową umiejętność zakresu Robotyki. Wyznaczyć

Bardziej szczegółowo

8 Przygotował: mgr inż. Maciej Lasota

8 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 8 1/6 Grafika Komputerowa Instrukcja laboratoryjna Temat: Listy wyświetlania i tablice wierzchołków 8 Przygotował: mgr inż. Maciej Lasota 1) Listy wyświetlania Listy wyświetlania (ang.

Bardziej szczegółowo

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury Obsługa za pomocą klawiatury Różnego typu interfejsy wykorzystują różne metody reagowania i wydawania poleceń przez użytkownika. W środowisku graficznym najpopularniejsza jest niewątpliwie mysz i inne

Bardziej szczegółowo

Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z

Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z Wykład 10. Wprowadzene do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. Funkcje OpenGL

Bardziej szczegółowo

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++) Wizualizacja 3D glwindowpos2d Funkcja wprowadzona w wersji 1.4 biblioteki OpenGL Funkcja pozwala na ustawienie rastra względem okna, a nie względem macierzy modelu Stosowana podczas pisania tekstów, np.:

Bardziej szczegółowo

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych autor: Robert Drab opiekun naukowy: dr inż. Paweł Rotter 1. Wstęp Zagadnienie generowania trójwymiarowego

Bardziej szczegółowo

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5 Wykład 5 p. 1/? Oprogramowanie i wykorzystanie stacji roboczych Wykład 5 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Wykład 5 p. 2/? Co

Bardziej szczegółowo

OPISY PRZESTRZENNE I PRZEKSZTAŁCENIA

OPISY PRZESTRZENNE I PRZEKSZTAŁCENIA OPISY PRZESTRZENNE I PRZEKSZTAŁCENIA Wprowadzenie W robotyce przez pojęcie manipulacji rozumiemy przemieszczanie w przestrzeni przedmiotów i narzędzi za pomocą specjalnego mechanizmu. W związku z tym pojawia

Bardziej szczegółowo

Szybkie tworzenie grafiki w GcIde

Szybkie tworzenie grafiki w GcIde Szybkie tworzenie grafiki w GcIde Opracował: Ryszard Olchawa Poniższy opis dotyczy aplikacji okienkowej w systemie Windows lub Linux bazującej na obiektowej bibliotece rofrm stworzonej w środowisku GcIde.

Bardziej szczegółowo

Odwrócimy macierz o wymiarach 4x4, znajdującą się po lewej stronie kreski:

Odwrócimy macierz o wymiarach 4x4, znajdującą się po lewej stronie kreski: Przykład 2 odwrotność macierzy 4x4 Odwrócimy macierz o wymiarach 4x4, znajdującą się po lewej stronie kreski: Będziemy dążyli do tego, aby po lewej stronie kreski pojawiła się macierz jednostkowa. Na początek

Bardziej szczegółowo

Obcinanie grafiki do prostokąta

Obcinanie grafiki do prostokąta Obcinanie grafiki do prostokąta Tworząc różnego rodzaju grafikę komputerową bardzo szybko natrafisz na sytuację, gdy rysowane obiekty "wychodzą" poza obszar ekranu. W takim przypadku kontynuowanie rysowania

Bardziej szczegółowo

Maskowanie i selekcja

Maskowanie i selekcja Maskowanie i selekcja Maska prostokątna Grafika bitmapowa - Corel PHOTO-PAINT Pozwala definiować prostokątne obszary edytowalne. Kiedy chcemy wykonać operacje nie na całym obrazku, lecz na jego części,

Bardziej szczegółowo

Dokument hipertekstowy

Dokument hipertekstowy Dokument hipertekstowy Laboratorium 5 Box model i layouty mgr inż. Krzysztof Wróbel Katedra Lingwistyki Komputerowej Wysokość i szerokość domyślna szerokość elementu inline jest związana z jego zawartością

Bardziej szczegółowo

Geometria. Hiperbola

Geometria. Hiperbola Geometria. Hiperbola Definicja 1 Dano dwa punkty na płaszczyźnie: F 1 i F 2 oraz taką liczbę d, że F 1 F 2 > d > 0. Zbiór punktów płaszczyzny będących rozwiązaniami równania: XF 1 XF 2 = ±d. nazywamy hiperbolą.

Bardziej szczegółowo

- biegunowy(kołowy) - kursor wykonuje skok w kierunku tymczasowych linii konstrukcyjnych;

- biegunowy(kołowy) - kursor wykonuje skok w kierunku tymczasowych linii konstrukcyjnych; Ćwiczenie 2 I. Rysowanie precyzyjne Podczas tworzenia rysunków często jest potrzeba wskazania dokładnego punktu na rysunku. Program AutoCad proponuje nam wiele sposobów zwiększenia precyzji rysowania.

Bardziej szczegółowo

Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007

Symulacja samochodu z kamerą stereowizyjną. Krzysztof Sykuła 15 czerwca 2007 Symulacja samochodu z kamerą stereowizyjną Krzysztof Sykuła 15 czerwca 2007 1 1 Opis wykonanego projektu Symulacja samochodu z kamerą stereowizyjną była pretekstem do napisania Engine u 3D, wykorzystującego

Bardziej szczegółowo

Edytor tekstu MS Office Word

Edytor tekstu MS Office Word Edytor tekstu program komputerowy ukierunkowany zasadniczo na samo wprowadzanie lub edycję tekstu, a nie na nadawanie mu zaawansowanych cech formatowania (do czego służy procesor tekstu). W zależności

Bardziej szczegółowo

Zasady rzutowania prostokątnego. metodą europejską. Opracował: Robert Urbanik Zespół Szkół Mechanicznych w Opolu. Zasady rzutowania prostokątnego

Zasady rzutowania prostokątnego. metodą europejską. Opracował: Robert Urbanik Zespół Szkół Mechanicznych w Opolu. Zasady rzutowania prostokątnego Zasady rzutowania prostokątnego metodą europejską Opracował: Robert Urbanik Zespół Szkół Mechanicznych w Opolu Wiadomości ogólne Rzutem nazywamy rysunkowe odwzorowanie przedmiotu lub bryły geometrycznej

Bardziej szczegółowo

Laboratorium Programowanie urządzeń mobilnych

Laboratorium Programowanie urządzeń mobilnych Laboratorium Programowanie urządzeń mobilnych Wprowadzenie Klasa Transform - Umożliwia realizację różnych zmian obiektu. Obiekt może zostać przesunięty, może być zmieniony jego rozmiar lub obrócony. Klasa

Bardziej szczegółowo

Ćwiczenie 1 Automatyczna animacja ruchu

Ćwiczenie 1 Automatyczna animacja ruchu Automatyczna animacja ruchu Celem ćwiczenia jest poznanie procesu tworzenia automatycznej animacji ruchu, która jest podstawą większości projektów we Flashu. Ze względu na swoją wszechstronność omawiana

Bardziej szczegółowo

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu Mirosław Głowacki Zagadnienia Jak rozumiemy fotorealizm w grafice komputerowej Historyczny rozwój kart graficznych Przekształcenia

Bardziej szczegółowo

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D Politechnika Białostocka Wydział Budownictwa i Inżynierii Środowiska Zakład Informacji Przestrzennej Inżynieria Środowiska INSTRUKCJA KOMPUTEROWA z Rysunku technicznego i geometrii wykreślnej RYSUNEK TECHNICZNY

Bardziej szczegółowo

Studia Podyplomowe Grafika Komputerowa i Techniki Multimedialne, 2017, semestr II Modelowanie 3D - Podstawy druku 3D. Ćwiczenie nr 4.

Studia Podyplomowe Grafika Komputerowa i Techniki Multimedialne, 2017, semestr II Modelowanie 3D - Podstawy druku 3D. Ćwiczenie nr 4. Ćwiczenie nr 4 Metaobiekty 1 Materiały ćwiczeniowe Wszelkie materiały ćwiczeniowe: wykłady, instrukcje oraz ewentualne pliki ćwiczeniowe dla potrzeb realizacji materiału dydaktycznego z przedmiotu Modelowanie

Bardziej szczegółowo

Ćwiczenie nr 9 - Tworzenie brył

Ćwiczenie nr 9 - Tworzenie brył Ćwiczenie nr 9 - Tworzenie brył Wprowadzenie Bryła jest podstawowym obiektem wykorzystywanym w czasie projektowania 3D. Etap tworzenia bryły (jednej lub kilku) jest pierwszym etapem tworzenia nowej części.

Bardziej szczegółowo

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki Ćwiczenie laboratoryjne 2 Temat: Modelowanie powierzchni swobodnych 3D przy użyciu programu Autodesk Inventor Spis treści 1.

Bardziej szczegółowo

FIGURY I PRZEKSZTAŁCENIA GEOMETRYCZNE

FIGURY I PRZEKSZTAŁCENIA GEOMETRYCZNE Umiejętności opracowanie: Maria Lampert LISTA MOICH OSIĄGNIĘĆ FIGURY I PRZEKSZTAŁCENIA GEOMETRYCZNE Co powinienem umieć Umiejętności znam podstawowe przekształcenia geometryczne: symetria osiowa i środkowa,

Bardziej szczegółowo

Rzutowanie. dr Radosław Matusik. radmat

Rzutowanie. dr Radosław Matusik.  radmat www.math.uni.lodz.pl/ radmat Warunki zaliczenia przedmiotu Na ćwiczeniach przez cały semestr będą realizowane dwa projekty w Unity (3D i 2D). Do uzyskania 3 z ćwiczeń wystarczy poprawnie zrealizować oba

Bardziej szczegółowo

Π 1 O Π 3 Π Rzutowanie prostokątne Wiadomości wstępne

Π 1 O Π 3 Π Rzutowanie prostokątne Wiadomości wstępne 2. Rzutowanie prostokątne 2.1. Wiadomości wstępne Rzutowanie prostokątne jest najczęściej stosowaną metodą rzutowania w rysunku technicznym. Reguły nim rządzące zaprezentowane są na rysunkach 2.1 i 2.2.

Bardziej szczegółowo

Moduł Grafika komputerowa i multimedia 312[01].S2. Ćwiczenia Podstawy programu Autocad 2011 Prosta

Moduł Grafika komputerowa i multimedia 312[01].S2. Ćwiczenia Podstawy programu Autocad 2011 Prosta Moduł Grafika komputerowa i multimedia 312[01].S2 Ćwiczenia Podstawy programu Autocad 2011 Prosta Opracowanie: mgr inż. Aleksandra Miętus na podstawie książki Autocad 2000 ćwiczenia praktyczne. wyd. Helion

Bardziej szczegółowo

Tekstury. Dorota Smorawa

Tekstury. Dorota Smorawa Tekstury Dorota Smorawa Definiowanie obiektów tekstur Dodawanie tekstur należy rozpocząć od zdefiniowania nazw tekstur ładowanych do bufora. Dla ułatwienia pracy z teksturami możemy przygotować obiekty

Bardziej szczegółowo