Dlaczego w grafice komputerowej stosowane są jednorodne współrzędne?
Jaki byłby problem, gdyby homogeniczne współrzędne nie były używane w transformacjach macierzy?
Dlaczego w grafice komputerowej stosowane są jednorodne współrzędne?
Jaki byłby problem, gdyby homogeniczne współrzędne nie były używane w transformacjach macierzy?
Odpowiedzi:
Upraszczają i ujednolicają matematykę stosowaną w grafice:
Pozwalają reprezentować tłumaczenia za pomocą macierzy.
Pozwalają reprezentować podział według głębokości w rzutach perspektywicznych.
Pierwszy dotyczy geometrii afinicznej. Drugi dotyczy geometrii rzutowej.
To nazwa: jednorodne współrzędne są dobrze ... jednorodne. Bycie jednorodnym oznacza jednolitą reprezentację rotacji, translacji, skalowania i innych przekształceń.
Jednolita reprezentacja pozwala na optymalizacje. Sprzęt do grafiki 3D można wyspecjalizować w wykonywaniu mnożenia macierzy na matrycach 4x4. Można nawet specjalizować się w rozpoznawaniu i zapisywaniu mnożeń przez 0 lub 1, ponieważ są one często używane.
Nieużywanie jednorodnych współrzędnych może utrudniać korzystanie ze zoptymalizowanego sprzętu w jego pełnym zakresie. Jakikolwiek program rozpozna, że można użyć zoptymalizowanych instrukcji sprzętu (zwykle kompilatora, ale czasem rzeczy są bardziej skomplikowane) dla jednorodnych współrzędnych, będzie miał trudności z optymalizacją dla innych reprezentacji. Wybierze mniej zoptymalizowane instrukcje i tym samym nie wykorzysta potencjału sprzętu.
Ponieważ pojawiły się wezwania do przykładów: PS4 Sony może wykonywać ogromne multiplikacje macierzy. Jest w tym tak dobry, że został wyprzedany przez pewien czas, ponieważ zamiast droższych superkomputerów użyto ich klastrów. Sony zażądało następnie, aby ich sprzęt nie był wykorzystywany do celów wojskowych. Tak, superkomputery to sprzęt wojskowy.
Dość powszechne stało się, że naukowcy używają kart graficznych do obliczania mnożenia macierzy, nawet jeśli nie ma w tym żadnej grafiki. Po prostu dlatego, że są w tym wielkości o wiele lepsze niż procesory ogólnego przeznaczenia. Dla porównania nowoczesne wielordzeniowe procesory mają rzędu 16 potoków (x0.5 lub x2 nie ma tak wielkiego znaczenia), a procesory graficzne mają rzędu 1024 potoków.
To nie tyle rdzenie, co rurociągi umożliwiają faktyczne równoległe przetwarzanie. Rdzenie działają na wątkach. Wątki muszą być programowane jawnie. Rurociągi działają na poziomie instrukcji. Układ może samodzielnie zrównoważyć instrukcje mniej więcej samodzielnie.
komplement:
W przypadku transformacji perspektywicznej pozwala nawet poprawnie interpolować bez zniekształceń perspektywy (w przeciwieństwie do wczesnego sprzętu graficznego na PC).
Jako osobisty gust zawsze powstrzymywałem się (jeśli to możliwe) od stosowania jednorodnych współrzędnych i wolałem proste sformułowanie kartezjańskie.
Głównym powodem jest fakt, że jednorodne współrzędne używają 4 trywialnych wpisów w macierzach transformacji (0, 0, 0, 1), obejmujących bezużyteczne przechowywanie i obliczenia (także narzut procedur obliczeniowych macierzy ogólnego przeznaczenia, które są „domyślnie” używane w ta sprawa).
Minusem jest to, że potrzebujesz więcej uwagi przy pisaniu równań i tracę poparcie teorii macierzy, ale jak dotąd przeżyłem.
plain Cartesian formulation
lub link do zasobu, który opisuje jego wykorzystanie w grafice 3D?
w
?
Niech R i S będą macierzami obrotu i skalowania, a T będzie wektorem translacji. W grafice komputerowej może być konieczne wykonanie szeregu tłumaczeń. Można sobie wyobrazić, jak trudne może być.
Obliczenia współrzędnych afinicznych często wymagają podziałów, które są drogie w porównaniu do uzupełnień lub mnożenia. Zwykle nie trzeba dzielić, gdy używa się współrzędnych rzutowych.
Używanie współrzędnych rzutowych (a bardziej ogólnie geometrii rzutowej) zwykle eliminuje przypadki specjalne, czyniąc wszystko prostszym i bardziej jednolitym.