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.

Podobne dokumenty