Wzory stosowane w generowaniu powierzchni podziałowych
Transkrypt
Wzory stosowane w generowaniu powierzchni podziałowych
Open GL – powierzchnie podziałowe Catmulla-Clarka W grafice komputerowej modelując kształty obiektów często pragniemy uzyskać gładkie bryły o zaokrąglonych krawędziach. Możemy wtedy skorzystać z tzw. powierzchni podziałowych. Jednym z rodzajów tych powierzchni są powierzchnie podziałowe Catmulla-Clarka. Edwin Catmull, współzałożyciel studia Pixar i obecnie prezes połączonych firm Pixar i Disney Animation Studios opracował ten algorytm w 1978 roku razem z Jimem Clarkiem. Technika modelowanie powierzchni za pomocą powierzchni podziałowych polega na zaprojektowaniu przybliżonego zarysu kształtu obiektu, dla którego następnie stosowany jest algorytm dzielący powierzchnie w sposób rekursywny. W ten sposób uzyskuje się gładkie, obłe kształty brył, oraz w wygodny sposób kontroluje się ich kształt. Na poniższych rysunkach przedstawiono przykładowe siatki dla modeli ręki i ucha oraz powierzchnie podziałowe wygenerowane dla tych siatek. Metoda wyznaczania powierzchni podziałowych Catmulla-Clarka 1. Dla każdej ze ścian bryły tworzymy punkty F położone w ich środkach ciężkości. 2. Dla każdej krawędzi bryły tworzymy punkt E będący średnią czterech punktów: dwóch (V) stanowiących końce rozważanej krawędzi i dwóch (F) stanowiących środki ciężkości ścian przylegających do tej krawędzi. 3. Dla każdego wierzchołka bryły tworzymy punkt P będący średnią ważoną dla następujących punktów: rozważanego wierzchołka V, punktów środkowych F ścian przylegających do tego wierzchołka oraz punktów środkowych K krawędzi dochodzących do tego wierzchołka. Średnią ważoną wyznacza się według następującej zależności: P 1 n 3 V F 2K n gdzie n jest ilością ścian przylegających do danego wierzchołka 4. Następnie w oparciu o wygenerowane w punktach 1, 2 i 3 algorytmu punkty F, E, P tworzona jest nowa bryła. Powyższy algorytm można powtórzyć kilkukrotnie otrzymując bryłę o coraz to bardziej wygładzonej powierzchni, lecz także oczywiście o coraz to gęstszej siatce składającej się z coraz większej ilości wierzchołków i ścian. Wyznaczanie powierzchni podziałowych dla istniejących już powierzchni podziałowych, określane jest jako generowanie powierzchni podziałowych na poziomie 1, 2, 3 lub wyższym. 1 2 3 Zadanie Korzystając z funkcji graficznych biblioteki OpenGL opracować w środowisku Visual C++ aplikację pozwalającą dla prostej bryły, ewentualnie kilku jej wariantów na wyliczenie i reprezentację graficzną powierzchni podziałowych Catmulla-Clarka. Aplikacja powinna umożliwiać włączanie i wyłączanie powierzchni podziałowych oraz zmianę poziomu zagęszczenia siatki. Wektory normalne niezbędne do poprawnego cieniowania powierzchni wyznacza się z iloczynu wektorowego.