Cel - Coders` city

advertisement
Laboratorium elementów grafiki komputerowej, ćwiczenie 3b
Wizualizacja obiektów przestrzennych w trybie
krawędziowym
Cel:
Celem ćwiczenia jest zapoznanie z podstawowymi technikami stosowanymi przy
generowaniu obrazu przestrzennego: opisem geometrii obiektów za pomocą reprezentacji
brzegowej, transformacjami w układzie jednorodnym dla 3D oraz z najprostszymi technikami
eliminacji niewidocznych fragmentów.
Podstawy teoretyczne:
Typowy algorytm wizualizacji składa się z dwóch faz:
 Wyznaczenie fragmentu powierzchni obiektu widzianego przez dany piksel obrazu,
 Wyznaczenie koloru tego fragmentu.
Realizacja pierwszej fazy wymaga wykonania projekcji (rzutowania) wybranych punktów na
powierzchniach elementów (najczęściej wierzchołków w reprezentacji brzegowej) z układu
współrzędnych świata do układu współrzędnych 2D obrazu a następnie przeprowadzenia
analizy widoczności rozpatrywanego fragmentu elementarnego powierzchni obiektu.
Realizacja drugiej fazy wymaga wyliczenia postrzeganego z aktualnej pozycji obserwatora
koloru w określonych punktach obiektu a następnie wyliczenia na tej podstawie koloru
odpowiednich fragmentów obrazu. Wyliczenie koloru określonego punktu powierzchni
zgodnie z przyjętym modelem oświetlenie jest zwykle czasochłonne i pomimo, że umożliwia
odtworzenie takich efektów zależnych od pozycji obserwatora jak połyskliwość, refleksy
świetlne czy odbicia zwierciadlane jest stosowane tylko gdy wymagany jest wysoki stopień
realizmu generowanego obrazu.
Najprostsze i najszybsze techniki wizualizacji pokazują tylko krawędzie bryły widoczne z
punktu widzenia obserwatora pozostawiając wnętrze wieloboku – elementu powierzchni
bocznej w kolorze tła lub wypełniając je jednorodnym kolorem. Taki tryb wyświetlania
nazywany jest trybem krawędziowym. Tryb krawędziowy najczęściej stosowany jest w celu
pokazania kształtu i wzajemnego położenia obiektów na scenie w takich przypadkach gdy
realizm obrazu nie jest wymagany (np. do szybkiego pokazywania zarysów tworzonych
obiektów w programach do budowy modelu sceny, w fazie ustawiania kamery do
natychmiastowego wyświetlania przybliżonego obrazu sceny o dużej złożoności
geometrycznej w czasie rzeczywistym itp.) lub stacja graficzna nie dysponuje wystarczająco
efektywnym wspomaganiem sprzętowym.
W ćwiczeniu tym zapoznamy się z elementarnymi technikami wizualizacji 3D w trybie
krawędziowym. Potok wizualizacji w tym przypadku obejmuje następujące etapy:



odczytanie opisu geometrii z pliku tekstowego w ustalonym formacie i zbudowanie
odpowiedniej struktury danych w pamięci,
odczytanie parametrów obserwatora i skonstruowanie na ich podstawie macierzy
transformacji w układzie jednorodnym realizującej złożenie przekształcenia z układu
świata do standardowego układu obserwatora,
dla każdego trójkąta w reprezentacji brzegowej:
o określenie statusu jego widoczności
o jeśli trójkąt widoczny:
o wyznaczenie położenia rzutu każdego z wierzchołków o obszarze obrazu,
o wyświetlenie odcinków łączących rzuty wierzchołków w przestrzeni obrazu z
odpowiednim przycinaniem do prostokąta obrazu (jeśli rzut któregoś z
wierzchołków leży poza obszarem tworzonego obrazu).
Transformacja z układu sceny do układu lokalnego standardowego obserwatora
Dla uproszczenia i znormalizowania dalszych operacji geometrycznych zwykle zakłada się, ze
obserwator znajduje się w standardowej pozycji tzn. obserwator znajdując się na osi OZ
patrzy w stronę początku układu współrzędnych a kierunek pionowy w obrazie jest
kierunkiem OY w układzie obserwatora. Aby umożliwić wizualizację sceny z dowolnymi
parametrami położenia kamery w układzie świata należy dokonać transformacji obiektów
sceny do układu lokalnego obserwatora.
Założymy, ze w opisie sceny pozycja obserwatora bedzie określona przez podanie :
 położenia obserwatora PO,
 punktu PC który ma znaleźć się w centrum obrazu (wektor PC – PO wyznacza kierunek
patrzenia),
 kierunku V w przestrzeni sceny, któremu ma odpowiadać kierunek pionowy (OY) w
przestrzeni obserwatora,
 kata rozwarcia stożka widzenia ,
 rozdzielczości obrazu wynikowego (xres, yres).
Transformacja z układu sceny do układu obserwatora będzie wówczas musiała zapwenić
spełnienie następujących zależności:
 punkt PO będzie odwzorowany na punkt (0, 0, -1) w układzie obserwatora,
 punkt PC będzie odwzorowany na punkt (0, 0, d-1) gdzie d jest długością wektora PC – PO
 punkt PO + Vn będzie odwzorowany na punkt (1, 0, -1) gdzie Vn jest wektorem
jednostkowym uzyskanym przez normalizację wektora V.
 punkt PO + Hn będzie odwzorowany na punkt (0, 1, -1) gdzie Hn jest wektorem
jednostkowym uzyskanym przez normalizację wektora prostopadłego do płaszczyzny
wyznaczonej przez punkty PO, PC, PC+V.
Macierz transformacji do układu obserwatora może być wyznaczone przez rozwiazanie
czterech układów równań – każdy z czterema niewiadomymi. Układy równac uzyska się przez
podstawienie do równań transformacji współrzędnych odpowiednich punktów zgodnie z
wymaganiami określonymi powyżej. Może ona być tez uzyskana przez złozenie następujacyh
przekształceń elementarnych:
 przesunięcie z punktu PC do punktu (0, 0, -1),
 obrót wokół osi OY o kąt jaki tworzy wektor PC – PO z płaszczyzną YOZ (po tym
przekształceniu kierunek patrzenia kamery jest w płaszczyźnie YOZ),
 obrót wokół osi OX o kat jaki tworzy PC – PO z płaszczyzną XOY.
Rzutowanie
Rozważamy projekcję perspektywiczną obrazu na powierzchnię znormalizowanego
prostokąta obrazu o wierzchołkach w przestrzeni świata: [-1 –1 0], [-1 1 0] [1 1 0], [1 –1 0] z
pozycji obserwatora znajdującego się w punkcie [0 0 –d] gdzie d > 0.0. Współrzędne punktu
P = [x, y, z] po przekształceniu do układu obrazu będą więc
x’ = x * d / (z + d)
y’ = y * d / (z + d)
Należy pamiętać, że ostatecznie wyznaczamy pozycję w układzie współrzędnych ekranowych.
Przy założeniu rozdzielczości xres i yres przekształcenie z układu współrzędnych obrazu do
układu współrzędnych ekranowych wygląda następująco:
xs = 0.5 * (xres – 1) * (x’ + 1.0)
ys = 0.5 * (yres – 1) * (1.0 – y’)
Eliminacja niewidocznych powierzchni
Założymy, że obrazowane będą bryły zamknięte i wypukłe o reprezentacji brzegowej takiej,
że wektor normalny dla każdej ściany skierowany jest na zewnątrz bryły. Można więc
zastosować najprostszy algorytm eliminacji niewidocznych ścian o następujacej postaci.
Niech N – wektor normalny skierowany na zewnątrz ściany a I wektor od środka
analizowanej ściany do punktu obserwatora. Jeśli NI > 0 to ściana jest widoczna i
należy ją narysować, w przeciwnym przypadku ścianę pomijamy.
Format opisu sceny
Przyjmiemy, że pełny opis sceny będzie umieszczony w pliku tekstowym zawierającym pełną
informację o scenie oraz o parametrach kamery w następującym układzie:
// Geometria sceny
liczba wierzchołków
współrzędne XYZ kolejnych wierzchołków
liczba trójkątów
trójki indeksów wierzchołków kolejnych trójkątów (indeksowanie od 0)
// Parametry kamery
xres yres
współrzędne punktu PC
współrzędne punktu PO
wektor V
Dla uproszczenia przyjmiemy, że w reprezentacji brzegowej występują tylko trójkaty.
Zadanie do wykonania
Należy zrealizować program, który wczytuje opis sceny w przedstawionym powyżej formacie
oraz generuje obraz tej sceny do pliku w formacie RGBRes albo wyświetla go na ekranie.
Obraz sceny ma być wygenerowany dla rozdzielczości i parametrów kamery zadanych w pliku
wejściowym. Postać wywołania programu ma być następująca:
texture <plik opisu sceny> [<nazwa pliku z utworzonym obrazem>]
Jeśli program wyświetla utworzony obraz na ekranie to nie ma potrzeby tworzenia pliku z
obrazem.
Do przetestowania programu należy przygotować opis sceny zawierający modele brył w
reprezentacji brzegowej o wybranych kształtach: np, prostopadłoscian, stożek, walec, kula.
Literatura:
[1] Foley, vanDamm, Feiner, Hughes - Computer Graphics - Principles and Practice, Addison
Wesley, 1993
[2] Jankowski M. - Elementy Grafiki Komputerowej, PWN, 1990
[3] Zabrodzki J. - Grafika komputerowa - metody i narzędzia, WNT, 1994
Opracował:
Jerzy Sas
Download