Warsztat - Programowanie gier komputerowych :: Trójwymiarowe modelowanie powierzchni
Strona główna Forum Szukaj Lista użytkowników
Grupy
Zarejestruj Zaloguj
Artykuły
Kliknij na kategorię żeby dodać artykuł Szukaj
Programowanie gier » Artykuły » Grafika 3D [Wersja do
drukowania]
Trójwymiarowe modelowanie powierzchni
Opis Wymodelowana powierzchnia. Użycie interpolacji.
Wyjaśnienie wzorów.
Autor Michał Faber Data Nie 07 Lis, 2004 12:14 am Typ
***
Słowa klucze
Kategoria Grafika 3D
Odsłony 363
Trójwymiarowe modelowanie powierzchni
Wymodelowana powierzchnia. Użycie interpolacji.
Wyjaśnienie wzorów.
Wiele programów graficznych służących do modelowania
obiektów ma opcję, którą najogólniej można by określić
słowem "Smooth" (wygładzanie). Obiekt poddany operacji
wygładzania staje się bardziej efektowny, gdyż wszelkie
kanty zostają zaokrąglone, nierówności powierzchni
wyrównane. Często wygładzanie polega na wstawieniu
nowych punktów między punkty obiektu (interpolacja),
które tworzą łagodne zakrzywienia i zaokrąglenia (rys.
1).
W tym celu stosuje się tzw. krzywe składane typu
Catmull-Rom. Krzywę składaną tworzą połączone ze sobą
segmenty. Każdy z nich to fragment krzywej między dwoma
kolejnymi punktami interpolacyjnymi (rys. 1). Do
utworzenia segmentu potrzebne są cztery punkty, gdyż dwa
z nich mają istotny wpływ na jego kształt, dlatego też
każde dwa sąsiadujące segmenty mają trzy punkty wspólne.
Przykład:
segment 1 : 5,5,12,23 - krzywa między punktami 5 i 12
segment 2 : 5,12,23,30 - krzywa między punktami 12 i 23
segment 3 : 12,23,30,41 - krzywa między punktami 23 i 30
segment 4 : 23,30,41,41 - krzywa między punktami 30 i 41
Jak widać w pierwszym segmencie został powtórzony
pierwszy punkt : 5,5,... a w ostatnim : ...,41,41. Jest
to konieczne, aby punkty te włączyć do sekwencji
interpolacji. Pora teraz przytoczyć wzór do tworzenia
segmentu krzywej składanej :
P = t^3*(-0.5*P1) + t^3*(1.5*P2) + t^3*(-1.5*P3) +
t^3*(0.5*P4)
+ t^2*P1 + t^2*(-2.5*P2) + t^2*(2*P3) + t^2*(-0.5*P4) +
t*(-0.5*P1) +
t*(0.5*P3) + P2
gdzie P jest interpolowanym punktem dla danej wartości t
(0<=t<=1) (patrz procedura MakeSpline), P1,P2,P3,P4 to
kolejne punkty segmentu.
Zaprezentowany program tworzy za pomocą krzywych
składanych trójwymiarową powierzchnię na podstawie
kilkunastu określonych w przestrzeni punktów, po czym
wyświetla ją na ekranie oraz zapisuje do pliku SURF.DXF,
który można przetwarzać w wielu "renderach" lub
programach typu CAD.
Owa powierzchnia nazywana jest dalej siatką
interpolacyjną, a punkty przecięcia jej lini - węzłami.
Siatkę tę w programie reprezentuje dwuwymiarowa tablica
"Grid", której liczba kolumn i wierszy (liczba węzłów
wzdłuż osi X i osi Y) określona jest w stałych GridNumX
i GridNumY. Każdy element tej tablicy (węzeł siatki)
zawiera informację o wysokości Z w przestrzeni i
pomocniczą zmienną ID przyjmującą wartości od 1 do
GridNumX lub od 1 do GridNumY.
W pierwszym kroku program przypisuje współrzędną Z
każdego punktu użytkownika (z tablicy "Points")
odpowiednim węzłom siatki interpolacyjnej. Węzły te
otrzymują również (w zmiennej ID) numer wiersza, w
którym się znajdują. Jest to konieczne, aby później
można było określić, z którego miejsca w siatce pochodzi
dany węzeł, a także odróżnić go od tych, którym
współrzędnej Z nie przypisano (ich zmienna ID równa się
0).
W kolejnym kroku siatka zostaje podzielona na sektory
(stała Section). Wszystkie węzły, których ID w ramach
danego sektora (rys. 2) jest mniejsze lub większe od 0,
zostają przesunięte na środkową jego kolumnę (rys. 3).
Pozostaje teraz tylko wyznaczyć drogą interpolacji
krzywymi składanymi wysokość Z pozostałych węzłów. W
pierwszej kolejności sprawdzana jest każda kolumna
siatki. Jeśli zostanie znaleziony w niej co najmniej
jeden węzeł, któremu przypisano współrzędną Z, to
obliczana jest krzywa składana wzdłuż całej kolumny,
przy czym interpolowane zostają znalezione węzły.
Uzyskane nowe punkty są przypisywane kolejnym wierszom
siatki interpolacyjnej (w ramach bieżącej kolumny). W
przypadku gdy kolumna nie będzie zawierała żadnego węzła
z określoną współrzędną Z, program przechodzi do
przeszukiwania następnej. W identyczny sposób sprawdzane
są wiersze. W każdym znajduje się co najmniej jeden
węzeł z przypisaną w poprzednim kroku (kiedy powstały
krzywe składane wzdłuż całych kolumn) współrzędną Z. W
ten sposób każdy węzeł otrzymuje współrzędną Z -
powierzchnia zostaje utworzona. Trzeba zauważyć, że w
powyższych obliczeniach nie pojawiają się nader ważne
współrzędne X i Y. Jest to spowodowane tym, że można je
wyliczyć mając dane: numer kolumny,wiersza i odległość
między węzłami (DistanceX,DistanceY).
Po wyświetleniu siatki na ekranie można zapisać jako
zbiór SURF.DXF. Format DXF (Drawing eXchange Format)
jest akceptowany przez programy do renderingu, np.
3Dstudio, oraz typu CAD. Format ten jest bardzo
przejrzysty - dane zapisane są w kodzie ASCII. Na
początku znajduje się nagłówek zawierający informacje
dotyczące np. rodzaju linii, ekstremalnych wartości,
punktu obserwatora itp. Dalej znajduje się już właściwy
opis obiektów. Program tworzy zbiór SURF.DXF z
pominięciem nagłówka, co i tak zapewnia poprawność
pliku. Na początku znajduje się tzw. sekcja obiektów:
0
SECTION
2
ENTITIES
Następnie jest opis obiektów. Powierzchnia zapisana jest
w formie serii czworoboków. Każdy z nich określony jest
przez cztery punkty (wierzchołki) w następujący sposób:
0
3DFACE
8
W
10
x1
20
y1
30
z1
drugi wierzchołek :
11
x2
21
y2
31
z2
i tak dalej...
"W" to numer warstwy, do której należy obiekt,
"x1,y1,z1,x2,y2,..." to współrzędne kolejnych
wierzchołków czworoboku. Na końcu musi się znaleźć
sekcja końca danych:
0
ENDSEC
0
EOF
Zaprezentowana przeze mnie metoda nie jest precyzyjna,
chociażby ze względu na przybliżenia powstałe przez
podział na sektory, dlatego też nie powinna być
stosowana do geodezyjnego modelowania powierzchni
terenu, gdzie ważna jest dokładność, natomiast z
powodzeniem można ją stosować w tworzeniu abstrakcyjnych
obrazów np. w 3DStudio. Oczywiście, aby uzyskać jak
największą precyzję, początkowe punkty muszą być w miarę
równo od siebie oddalone. Warto też poeksperymentować z
liczbą sektorów (stała Section), pamiętając, że im
będzie ona mniejsza, tym większa stanie się
niedokładność interpolacji, a za duża spowoduje
powstanie nieciekawych rowów. Na koniec przedstawię
jeszcze równanie potrzebne do utworzenia krzywej
składanej typu B, która nigdy nie przechodzi przez
punkty początkowe, przez co jest krzywą przybliżoną.
P = (-P1*t^3 + 3*P2*t^3 - 3*P3*t^3 + P4*t^3 +
3*P1*t^2 - 6*P2*t^2 + 3*P3*t^2 + -3*P1*t + 3*P3*t + P1 +
4*P2 + P3) / 6
Literatura:
[1] "Grafika PC bez tajemnic", Intersoftland 1995
Skocz do: Wybierz forumWarsztat - Programowanie
gier komputerowych|--Szkółka| |--Szkółka -
języki| |--Szkółka - grafika| |--Szkółka -
inne|--Programowanie gier| |--Ogólnie|
|--Dźwięk| |--Sztuczna Inteligencja|
|--Inne|--Programowanie grafiki|
|--Programowanie grafiki| |--OpenGL|
|--DirectX|--Produkcja| |--Pomysły|
|--Projektowanie| |--Projekty| |--Grafika|
|--Ogłoszenia|--O czym innym| |--Konferencje,
spotkania| |--Warsztat| |--Aktualności|
|--Artykuły| |--Wykłady| |--Compo|
|--Lepperlandia|--Śmietnik| |--Z odrzutu
Powered by Knowledge Base, wGEric (C) 2002 PHPBB.com MOD
This script (Knowledge Base - MX Addon v. 1.03e) is modified
by Haplo
W1.5b (C) 2004
[admin: ayufan, g[R]eK, Goliatus, mikael_, Regedit]
Wszystkie czasy w strefie CET (Europa)
Powered by phpBB2 Plus 1.52 based on phpBB 2.0.10 © 2001, 2002 phpBB
Group :: FI Theme :: Mody i Podziękowania
Wyszukiwarka
Podobne podstrony:
Modelowanie powierzchnioweCATIA Podstawy modelowania powierzchniowego i hybrydowego?tmphElementarz modelowania powierzchniowego (cz I)Elementarz modelowania powierzchniowego cz IIGK 8 Modelowanie krzywych i powierzchni(1)Modelowanie brylowo powierzchnioweKrytyczna temperatura wewnętrznej powierzchni,Modelowanie i symulacja systemów, Model dynamicznyBaum Wajszczuk Wawrzynowicz Modelowe rozwiazanie logistyczneMetody modelowania procesow 12 cz I (1)06 Metody wyznaczania pol powierzchniElementy modelowania matematycznegoTUTORIALE Modelowanie Poprawianie błędów funkcji BOOLEAN w 3ds maxwięcej podobnych podstron