Komputerowa reprezentacja oraz prezentacja i graficzna
Transkrypt
Komputerowa reprezentacja oraz prezentacja i graficzna
Komputerowa reprezentacja oraz prezentacja i graficzna edycja krzywoliniowych obiektów 3d Jan Prusakowski1), Ryszard Winiarczyk1,2), Krzysztof Skabek2) 1) 2) Politechnika Śląska w Gliwicach, Instytut Informatyki Teoretycznej i Stosowanej PAN w Gliwicach E-mail: [email protected], [email protected], [email protected] Streszczenie. Niniejszy referat przedstawia program służący do tworzenia i edycji krzywych i powierzchni Nurbs, a także aproksymację powierzchni zadanych przy pomocy chmury punktów pochodzącej np. ze skanera przestrzennego. Z utworzonych obiektów można tworzyć sceny, a te oglądać z wybranego punktu. Przestawiono ideę reprezentacji b-sklejanej. 1. Wstęp. Rosnące możliwości współczesnych kart graficznych (wyrażające się w liczbie przetwarzanych wielokątów i liczbie rysowanych pikseli na sekundę) oraz rozwój API 3D (takich jak OpenGL czy DirectX) sprawiają, że prezentacja wysokiej jakości grafik 3D jest osiągalna nawet na niedrogim sprzęcie. Postęp ten sprawia, że można prezentować sceny i obiekty o coraz większej złożoności. Konstruowanie złożonych obiektów z przybliżających je prostych odcinków lub płaszczyzn jest możliwe, lecz niepraktyczne z powodu dużej liczby punktów, które trzeba kontrolować. W takim przypadku warto użyć reprezentacji krzywoliniowej umożliwiającej tworzenie skomplikowanych kształtów przy pomocy niewielkiej liczby parametrów. Dodatkową zaletą tej reprezentacji jest także możliwość dostosowywania dokładności rysowania obiektów do warunków, w jakich ma być przedstawiony lub dostępnego sprzętu. Szczególnie przydatne jest to w grafice interaktywnej (np. w grach), gdzie ważne jest utrzymanie odpowiedniej szybkości animacji. Regulując dokładność wyświetlania takich figur można bezpośrednio wpływać na wydajność (np. obiekty bliskie rysujemy z większą dokładnością, a dalekie z mniejszą). 2. Założenia i przeznaczenie projektu. Celem powstania systemu jest modelowanie rzeczywistych obiektów przestrzennych. Opracowane oprogramowanie służy do edycji oraz prezentacji graficznej tych obiektów. System umożliwia także edycję i wizualizację scen będących wynikiem działania systemu stereowizyjnego stosowanego w Zespole Komputerowych Systemów Wizyjnych IITIS PAN w Gliwicach, gdzie jest on używany do obróbki i prezentacji wyników. Prezentowany system charakteryzuje się interakcyjnym interfejsem użytkownika, możliwością prezentacji różnych widoków sceny w zależności od położenia obserwatora. Ponadto umożliwia ustalenie oświetlenia sceny (położenie i liczba źródeł światła). Wybrano następujące typy reprezentacji: - powierzchnie (ściany) płaskie i wypukłe, - bryły podstawowe takie jak prostopadłościan, ostrosłup, elipsoida, - bryły powstałe z obrotu figur płaskich dookoła zadanej osi. Przy określaniu wstępnych założeń uznano także konieczność graficznej prezentacji oraz przetwarzania powierzchni opisanych chmurą punktów za pomocą powierzchni krzywoliniowych. Chmury punktów pochodzić mogą np. ze skanerów przestrzennych. Istnieje możliwość zapisu utworzonych scen w opracowanym na potrzeby tego systemu formacie. Format ten oparty jest o standard XML i ma otwarty charakter. 3. Wykorzystane reprezentacje. Istnieje wiele różnych reprezentacji krzywoliniowych. W prezentowanym systemie wykorzystano głównie reprezentację parametryczną w postaci krzywych i powierzchni Nurbs (ang. Non-uniform rational b-spline – niejednorodne wymierne krzywe b-sklejane) będących odmianą reprezentacji b-sklejanej. Reprezentację tę wybrano z powodu takich zalet jak niezależność stopnia krzywych i powierzchni od liczby punktów kontrolnych, lokalnego wpływu tych punktów na daną figurę czy też możliwości reprezentowania kwadryk. Między innymi z tych powodów z tej reprezentacji korzysta się w komercyjnych programach typu CAD. Reprezentacja ta stanowi de facto standard we wszelkim modelowaniu – zarówno dla potrzeb projektowania CAD jak i w różnorodnych zastosowaniach grafiki komputerowej. W omawianym systemie można tworzyć i edytować następujące rodzaje obiektów: - obiekty zbudowane ze ścian płaskich (prostopadłościan, sfera), - krzywe Nurbs o zadanych punktach kontrolnych, - powierzchnie Nurbs w postaci prostokątnej płaszczyzny o zadanej liczbie punktów kontrolnych, - powierzchnie obrotowe – figury powstałe poprzez obrót krzywej dookoła zadanej osi, - produkt sferyczny dwóch krzywych Nurbs, - powierzchnie powstałe poprzez przesunięcie wybranej krzywej wzdłuż prostej, - powierzchnie aproksymujące zadaną chmurę punktów. 3.1. Krzywe Nurbs. W programie krzywe i powierzchnie Nurbs reprezentowane są poprzez swoje punkty kontrolne. Mając n+1 punktów kontrolnych Pi określonych na płaszczyźnie lub w przestrzeni, krzywą Nurbs można opisać następująco: n P(t ) = ∑ N i ,k (t )Pi , i =0 t min ≤ t < t max Mamy n+1 punktów kontrolnych. Funkcje Ni,k są funkcjami interpolującymi, które określają wpływ punktów kontrolnych na krzywą. Funkcje te są stopnia k-1. Ważną sprawą jest tutaj fakt, że stopień krzywej (stopień funkcji interpolujących) nie zależy od liczby punktów kontrolnych (inaczej niż np. w przypadku krzywych Béziera, gdzie k=n). Stopień ten można wybrać dowolnie, a ograniczeniem jest liczba punktów kontrolnych. Dodatkowo potrzebny jest tzw. wektor węzłów w postaci: (t 0 , t1 ,..., t m −1 ), t i ≤ t i +1 Określa on dziedzinę krzywej (przedział <tmin, tmax)) oraz wartości t, w których łączą się segmenty krzywej. Wektor ten stanowi ciąg niemalejących liczb. Relację pomiędzy stopniem krzywej (k), liczbą punktów kontrolnych (n) i długością wektora węzłów (m) można opisać następująco: k = m − n −1 Funkcje Ni,k zależą tylko od k i od wartości w wektorze węzłów. N jest zdefiniowana rekurencyjnie: ⎧1, t ≤ t < t i +1 N i ,1 (t ) = ⎨ i 0 ⎩ t − ti t −t N i , k −1 (t ) + i + k N i +1, k −1 (t ) t i + k −1 − t i ti + k − t i +1 Każda z funkcji Ni,k zależy tylko od k+1 węzłów (od ti do ti+k). Ni,k przyjmuje wartość „0” dla t < ti i t ≥ ti+k. Wynika stąd, że punkt Pi ma wpływ na krzywą tylko w przedziale ti ≤ t < ti+k. Ze względu na wartości zawarte w wektorze węzłów krzywe można podzielić na: - jednorodne (ang. uniform): N i , k (t ) = t i − t i + 1 = const - otwarte jednorodne (ang. open uniform) – k - 1 takich samych wartości na każdym z końców, a pozostałe tak jak powyżej, np. (0, 0, 0, 1, 2, 3, 3, 3), - niejednorodne (ang. non-uniform) – jedynym ograniczeniem jest by ciąg wartości był niemalejący. W ogólnym przypadku krzywa b-sklejana nie przechodzi przez pierwszy i ostatni punkt kontrolny. Aby to uzyskać należy użyć otwartego, jednorodnego wektora węzłów. W przypadku reprezentacji Nurbs punkty określające figurę powinny być podane w jednorodnym układzie współrzędnych. Oznacza to, że w przypadku krzywej lub powierzchni w przestrzeni 3d, należy dla każdego punktu kontrolnego określić 4 współrzędne: x, y, z i w. Ostatnia współrzędna (w) pełni tutaj funkcję wagi punktu kontrolnego. Wartość 1 określa normalny wpływ, wartości większe od 1 zwiększają wpływ punktu, a mniejsze od 1 zmniejszają. W przypadku gdy waga przyjmie wartość 0, położenie punktu nie wpływa na kształt. Rys. 1 - Okrąg jako krzywa Nurbs (liczby przy punktach kontrolnych oznaczają wagę). Na Rys. 1 przedstawiono konstrukcję okręgu przy użyciu krzywej Nurbs. Użyto 9 punktów kontrolnych tworzących kwadrat oraz następującego wektora węzłów: (0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4). 3.2. Powierzchnie Nurbs. Najprostszym sposobem uzyskania powierzchni b-sklejanej jest wykorzystanie iloczynu tensorowego krzywych b-sklejanych. Wynikowa powierzchnia określona jest przez siatkę (n+1) na (m+1) punktów kontrolnych Pi,j: S (u , v ) = m n ∑∑P i=0 j=0 i, j N i , k (u ) N j ,l (v ) u min ≤ u < u max , v min ≤ v < v max Można przy tym zauważyć, że powierzchnia może mieć różny stopień w kierunkach u i v, a także różne wektory węzłów w różnych kierunkach. 4. Możliwości systemu w zakresie edycji i wizualizacji. Program pozwala na interaktywną edycję i tworzenie obiektów. Tak utworzone obiekty można poddać następującym operacjom: - przesuwanie, skalowanie i obracanie, - zmianę parametrów obiektów – np. kąt obrotu figur obrotowych, promień sfery, - edycję punktów kontrolnych figur krzywoliniowych (w przypadku figur Nurbs można także zmieniać wagi punktów) lub wierzchołków figur zbudowanych ze ścian płaskich. W systemie zaimplementowano także mechanizm modyfikatorów umożliwiających szybką modyfikację kształtu obiektu w sposób kontrolowany przy pomocy pewnej liczby parametrów. Aktualnie zaimplementowano następujące modyfikatory: - mapa głębi – pozwala na zniekształcenie obiektu w wybranym kierunku na podstawie zadanej bitmapy, traktując jasność punktu jako wielkość przesunięcia, - wygięcie – pozwala wygiąć wybraną figurę o zadany kąt, - szum – wprowadza losowe przesunięcia punktów kontrolnych (lub wierzchołków) o kontrolowanej sile. W zakresie wizualizacji edytowanych obiektów i scen system umożliwia: - ustawienie materiału obiektu – kolor, połyskliwość, - ustawienie kamery – położenie, obserwowany punkt, kąt widzenia, - źródła światła – położenie, jasność, barwa, 5. Opis implementacji. Przestawiana aplikacja działa w systemie Windows. Do jej napisania zostały wykorzystane biblioteki OpenGL (grafika 3d) oraz MFC (interakcja z użytkownikiem). Aplikacja ma strukturę obiektową. Każdemu rodzajowi obiektów prezentowanych w programie odpowiada klasa, która zawiera kod oraz dane używane do jego prezentacji i edycji. Dzięki zastosowaniu polimorfizmu i metod wirtualnych możliwe stało się ujednolicenie interfejsu, którym posługują się klasy reprezentujące obiekty. Do rysowania krzywych Nurbs i powierzchni Nurbs w postaci siatki wykorzystano własne procedury stworzone w tym celu, natomiast do rysowania wypełnionych powierzchni z cieniowaniem wykorzystano procedury zawarte w bibliotece narzędziowej OpenGL – GLU. Wykorzystano także architekturę dokumentwidok oferowaną przez bibliotekę MFC. Umożliwiła ona stworzenie w łatwy sposób takiej właśnie aplikacji, w której dane przedstawiane są w kilku ujęciach (widokach) i na różne sposoby. 6. Opis aplikacji. Rys. 2 - Główne okno aplikacji. Program posiada standardowy dla tego typu programów interfejs użytkownika. Główną część okna zajmują widoki edytowanej sceny. Trzy z nich – „Przód”, „Bok” i „Góra” są rzutami równoległymi odpowiednio na płaszczyzny XY, YZ i XZ. Te widoki można powiększać, pomniejszać i przesuwać. W tych widokach użytkownik może zaznaczać obiekty, przesuwać, skalować i obracać. Czwarty widok – „Perspektywa” – jest widokiem perspektywicznym na początek układu współrzędnych i służy tylko do prezentacji sceny (nie można w nim dokonywać edycji). Użytkownik może przybliżać i oddalać widok, a także zmieniać za pomocą myszy kierunek, z którego ogląda scenę. Widok ten może także wyświetlać obraz z jednej z kamer umieszczonych w scenie. Aby skorzystać z takiej kamery należy kliknąć prawym klawiszem myszy w widok „Perspektywa”, a następnie wybrać podmenu „Widok” i w nim wybrać odpowiednią kamerę lub też standardowy widok perspektywiczny. W przypadku widoku z kamery nie można go zmieniać przy pomocy myszy, a jedynie poprzez manipulację samą kamerą w innych widokach. - Następnie należy wybrać z paska narzędzi tworzenie powierzchni aproksymującej. Pojawi się okno dialogowe, w którym należy w nim wybrać żądaną gęstość siatki (liczbę punktów w kierunkach u – w poziomie i v – w pionie). - W widoku „Góra” określić położenie powierzchni i jej wymiary poprzez kliknięcie dwóch przeciwległych narożników. Rys. 4 - Nakładanie siatki punktów kontrolnych na chmurę punktów. Po określeniu położenia powierzchni rozpocznie się właściwa aproksymacja. Po wykonaniu operacji tak jak w tym przykładzie, otrzymujemy następującą powierzchnię: 7. Przykłady modeli utworzonych w programie. 7.1. Powierzchnia aproksymująca. Jak wspomniano wcześniej program umożliwia tworzenie krzywoliniowych powierzchni aproksymujących zadaną chmurę punktów. Aby utworzyć taki obiekt należy: - Wczytać chmurę punktów. - Zorientować ją tak, aby była zwrócona przodem w widoku „Góra” (podobnie jak to jest na Rys. 3). Rys. 5 - Wynikowa powierzchnia aproksymująca. 7.2 Parasol. Rys. 3 - Chmura punktów przygotowana do aproksymacji. Rys. 6 - Przykładowa scena - parasol. Parasol z Rys. 6 powstał w następujący sposób: narysowano łuk (przekrój) w postaci krzywej Nurbs: Rys. 8 - Powierzchnia powstała poprzez obrót przekroju. Zaznaczono część punktów w miejscach gdzie powierzchnia parasola powinna się wgłębiać (zaznaczone na rysunku poniżej): Rys. 7 – Łuk – podstawa do utworzenia czaszy parasola. Na podstawie przekroju wykonano powierzchnię obrotową, a następnie przekształcono tę powierzchnię do postaci, która pozwala na edycję punktów kontrolnych: Rys. 9 - Wybrane do skalowania punkty. Następnie wybrane punkty przeskalowano: Rys. 10 - Siatka powierzchni po przeskalowaniu punktów. Na końcu zmniejszono wagę zaznaczonych punktów (efekt jest taki sam jak zwiększenie wagi pozostałych) przez co uzyskano efekt napięcia powierzchni: Rys. 11 – Siatka wynikowej powierzchni. Na tak powstałą powierzchnię nałożono ciemnoszary materiał, aby uzyskać wygląd zbliżony do ortalionu. Pozostałe obiekty są bryłami ze ścian płaskich – ostrosłup ścięty (czub), prostopadłościan i bryła obrotowa (rączka). 7.3. Import scen. Rys. 12 - Przykład zaimportowanej sceny. Na Rys. 12 przedstawiono przykładową scenę z obiektami zbudowanymi z wielościanów. Scena ta jest wynikiem działania systemu stereowizji wykorzystywanego w Zespole Komputerowych Systemów Wizyjnych IITIS PAN w Gliwicach. 8. Sugestie dalszego rozwoju programu. W trakcie pisania i testowania aplikacji okazało się, że przydatne byłoby dodanie do niego różnych dodatkowych funkcji, które zwiększyłyby możliwości programu i uczyniłyby korzystanie z niego łatwiejszym: - Obcinanie powierzchni Nurbs – pozwoliłoby na obcinanie rogów prostokątnych płatów lub wycinanie otworów. - Tworzenie powierzchni wyciąganych (loft) wzdłuż wybranej krzywej, a nie tylko wzdłuż osi. - Możliwość nakładania tekstur na obiekty. - Przyciąganie punktów do siatki przy przesuwaniu i innych operacjach umożliwiłoby bardziej precyzyjną edycję. - Możliwość wykonania operacji „cofnij”. - Możliwość grupowania obiektów – pozwoliłoby na tworzenie bardziej skomplikowanych obiektów (np. złożonych z kilku powierzchni) i późniejsze wygodne ich ustawianie w scenie. - Możliwość ograniczenia edycji do wybranej osi (np. przesuwanie tylko wzdłuż osi x) lub płaszczyzny (np. skalowanie tylko w płaszczyźnie ZX). - Wzbogacenie formatu pliku o możliwość zapisu parametrów widoku (np. kamery, z której pokazywany jest obraz). - Możliwość eksportu obiektów lub scen do formatów akceptowanych przez inne programy – dałoby to możliwość dalszej edycji lub prezentacji z wyższą jakością. 9. Wnioski końcowe. Powstała aplikacja umożliwia edycję i prezentację obiektów trójwymiarowych, zarówno tych opartych na reprezentacji krzywoliniowej (krzywe i powierzchnie Nurbs), jak i zbudowanych ze ścian płaskich. Edycja obiektów i scen odbywa się w sposób interakcyjny. Zastosowanie modyfikatorów pozwala uprościć niektóre zadania wykonywane przez użytkownika. Możliwości prezentacji i edycji krzywoliniowych obiektów przestrzennych czynią z tego programu przydatne narzędzie do wizualizacji złożonych brył przestrzennych. Możliwości w zakresie modelowania brył krzywoliniowych są dosyć duże. Program umożliwia tworzenie i późniejszą edycję powierzchni w postaci prostokątnego płata, powierzchni powstałych poprzez obrót krzywej dookoła osi, powierzchni wyciąganej oraz produktu sferycznego dwóch krzywych. Dodatkowo możliwe jest aproksymowanie powierzchni zadanej chmurą punktów przy pomocy powierzchni krzywoliniowej. Oczywiście przedstawione powyżej opcje nie stanowią wszystkich możliwych w tej dziedzinie. Program posiada dość duże możliwości, jeśli chodzi o prezentację edytowanych scen. Można ustalić pozycję obserwatora, punkt w scenie, na który patrzy oraz orientację kamery (kierunek wskazujący górę). Dodatkowo możliwość zmiany właściwości materiału obiektów (sposobu interakcji z oświetleniem) i ustawienia oświetlenia zwiększa realizm i jakość prezentowanych scen. Pod względem wyglądu aplikacji, interfejsu użytkownika oraz możliwości prezentacji wyników działania program ten przypomina profesjonalne programy typu CAD. Jest to niewątpliwie zaletą tej aplikacji, gdyż dzięki temu jej obsługa nie powinna nastręczać problemów nawet niedoświadczonym użytkownikom. Dzięki zastosowaniu modularnej (obiektowej) budowy powstała aplikacja może być w dość łatwy sposób rozbudowana o nowe reprezentacje, metody edycji czy modyfikatory. Literatura: [1] Przemysław Kiciak: „Podstawy modelowania krzywych i powierzchni”, WNT 2000. [2] James D. Foley, Andries van Dam, Steven K. Feiner, John F. Hughes, Richard L. Phillips: „Wstęp do grafiki komputerowej”, WNT 2001. [3] Richard Wright jr., Michael Sweet: „OpenGL, Księga eksperta”, HELION 1999. [4] Przemysław Kowalski, Krzysztof Skabek: „Przetwarzanie informacji wizyjnej w komputerowym systemie z mobilną głowicą stereowidzącą”, Studia Informatica nr 3/2001.