Dlaczego w grafice komputerowej stosowane są jednorodne współrzędne?


Odpowiedzi:


12

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.


Jakich przykładów szukasz? Macierze tłumaczeń i cokolwiek związanego z rzutami perspektywicznymi powinny być wystarczająco łatwe do wyszukiwania?
Bart.

@ Bart, potrzebna analogia.

2
Przepraszam @anonimowy, ale tak naprawdę nic mi to nie mówi. Będziesz musiał użyć więcej słów, aby wyjaśnić, czego dokładnie szukasz.
Bart.

Myślę, że ta odpowiedź nie jest tak wysoko oceniana, ponieważ jest zbyt techniczna dla nas początkujących. Być może prosty przykład z prostym sformułowaniem lepiej zilustruje zasady
Nathan

5

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.


„PS4 Sony może wykonywać ogromne multiplikacje macierzy”. Masz na myśli procesor komórkowy PS3, prawda? PS4 ma raczej zwykły procesor x86.
Wumpf

Chociaż jest to dobra odpowiedź, nie sądzę, aby odpowiadała na pytanie PO i sugeruje, że używane są homogeniczne kable, ponieważ sprzęt jest dla niego zoptymalizowany, raczej homogeniczne kable są bardziej przydatne i ostatecznie opracowano sprzęt. Kolejnym argumentem przemawiającym za vec4s jest ich 128-bitowe wyrównanie, co sprawia, że ​​czytanie na
szynach szerokopasmowych

4

komplement:

(x,y,z,0)=x,y,z0x,y,z

W przypadku transformacji perspektywicznej pozwala nawet poprawnie interpolować bez zniekształceń perspektywy (w przeciwieństwie do wczesnego sprzętu graficznego na PC).


2

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.


1
Zasadniczo można wdrożyć typy danych, które tak naprawdę nie przechowują tych wpisów, mimo że zachowują się tak jak one.

1
@Hurkyl Oczywiście. Jest to rzadko wykonywane, ponieważ dostępne są zestawy narzędzi do matryc ogólnego zastosowania.
Yves Daoust,

@YvesDaoust Czy możesz podać przykład plain Cartesian formulationlub link do zasobu, który opisuje jego wykorzystanie w grafice 3D?
Dan

@ Dan: użyj y = Ax + b, gdzie A jest macierzą 3x3, a ba 3x1, zamiast y '= Ax' gdzie y ', x' są wektorami rozszerzonymi, a A macierzą 4x4.
Yves Daoust,

@YvesDaoust Więc przekazujesz macierzom 3x3 i wektorowi 3x1 zamiast matrycy 4x4? Gdzie obliczasz i przechowujesz w?
Dan

2

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]

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ć.

p=SR(Sp+T)+T

M=TSRTS
p=Mp

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]

p=[xyw]
Q=[1000010000100010]

1

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.


„Obliczenia współrzędnych afinicznych często wymagają podziałów”: Nie rozumiem dlaczego. W rzeczywistości obliczasz dokładnie te same wyrażenia.
Yves Daoust,

@Yves: Odpowiadam na bardziej ogólny temat „wykorzystanie w grafice komputerowej”, a nie na pytanie „transformacje macierzy obliczeniowych”.

@Hurkyl: podobnie jak ja. Podczas renderowania sceny obliczasz dokładnie te same wyrażenia, z tą samą ilością podziałów (różnica polega na fikcyjnym wyrażeniu o współczynniku 0).
Yves Daoust,

@Yves: Hrm. Jestem przyzwyczajony do wykonywania obliczeń, w których konwersję z powrotem do afinii można do pewnego stopnia odroczyć; Oddaję się twojej wiedzy, jeśli powiesz, że to nie pojawia się często.

-1
  • prostsze formuły
  • Mniej specjalnych przypadków
  • Zjednoczenie i
  • Dwoistość

2
Odpowiedź jest bardzo niejasna. Powinieneś rozwinąć każdy punkt.
Rotem,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.