GRK dr Wojciech Palubicki
Macierz wektor produkt jako Transformacja T: R n R m T Ԧx = A Ԧx
Przemieszczanie wierzchołków - Transformacje Skalowanie Rotacja Translacja
-y -y Macierz rotacji M wobec punktu P (x, y ) +y +y -x +x M -x +x
-y -y Macierz rotacji M wobec punktu P (x, y ) 1. Translacja to początku: T( x, y ) +y +y -x +x M -x +x
Macierz rotacji M wobec punktu P (x, y ) 1. Translacja to początku: T( x, y ). Rotacja o kat θ: R θ +y +y M -x +x -x +x -y -y
Macierz rotacji M wobec punktu P (x, y ) 1. Translacja to początku: T( x, y ). Rotacja o kat θ: R θ 3. Translacja do punktu P : T x, y +y +y M -x +x -x +x -y -y
Macierz rotacji M wobec punktu P (x, y ) 1. Translacja to początku: T( x, y ). Rotacja o kat θ: R θ 3. Translacja do punktu P : T x, y M = T x, y R θ T( x, y ) +y +y M -x +x -x +x -y -y
Uproszczony Potok Graficzny (Rendering) Model Matrix View Matrix Projection Matrix Viewport Transform Object Space World Space View Space Clip Space Screen Space
World space transformation WS Object Space World Space
World space D
+y -x +x
+y e -x +x
g +y e -x +x
Bryla widzenia (view frustum) g +y e -x +x
Bryla widzenia (view frustum) g +y e Płaszczyzna daleka (far plane) -x +x
g +y e near plane far plane -x +x
g FoV +y e near plane far plane -x +x
Pole widzenia (Field of View - FoV)
Pole widzenia (Field of View - FoV)
Transformacja kamery Bryla widzenia: g
Transformacja kamery Bryla widzenia: górna płaszczyzna t t g
Transformacja kamery Bryla widzenia: górna płaszczyzna t dolna płaszczyzna b g t b
Transformacja kamery Bryla widzenia: górna płaszczyzna t dolna płaszczyzna b bliska płaszczyzna n g t n b
Transformacja kamery Bryla widzenia: górna płaszczyzna t dolna płaszczyzna b bliska płaszczyzna n daleka płaszczyzna f t g n f b
Transformacja kamery Bryla widzenia: górna płaszczyzna t dolna płaszczyzna b bliska płaszczyzna n daleka płaszczyzna f lewa płaszczyzna l prawa płaszczyzna r t g n f b
Transformacja kamery g +y -x +x
Transformacja kamery +y -x g +x -y
Płaszczyzna rzutowania +y -x g +x Image/view plane -y
Płaszczyzna rzutowania +y -x g +x Image/view plane -y
Rzutowanie równolegle +y -x g +x Image/view plane -y
Rzutowanie perspektywiczne +y -x g +x Image/view plane -y
Rzutowania Perspektywicznie rzutowanie Ortograficzne rzutowanie
Rzutowanie ortograficzne +y -z g +z image plane -y
Rzutowanie nie-ortograficzne +y -z g +z image plane -y
Rzutowanie ortograficzne View frustum g Orthographic view volume g
Bryla kanoniczna +y +y -z g +z g +z -y Orthographic view volume -y Canonical view volume
Bryla kanoniczna
Viewport transformation -z +z -z +z
Viewport transformation -x +x
Viewport transformation +y -x +x -x +x -y
Viewport transformation +y -x +x -x +x -y
Potok graficzny World space Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy.
Potok graficzny Camera/view space Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy.
Potok graficzny Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy. Orthographic view volume
Potok graficzny Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy. Canonical view volume
Potok graficzny Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy. Window space
Potok graficzny D Każdy krok będziemy chcieli wyrazić za pomocy operacji macierzowej. Cały potok może być wykonany za pomocy jednej operacji macierzy. 4D
Bryla kanoniczna Bryła kanoniczna to sześcian x x ze środkiem w początku Bryła widzenia została przekształcona do postaci takiego sześcianu
Bryla kanoniczna Bryła kanoniczna to sześcian x x ze środkiem w początku Bryła widzenia została przekształcona do postaci takiego sześcianu Ucinamy współrzędną z
Przekształcenie bryły kanonicznej Musimy odwzorować kwadrat [-1, 1] na czworokąt [, n x ] x [, n y ] n y n x
Przekształcenie bryły kanonicznej Musimy odwzorować kwadrat [-1, 1] na czworokąt [, n x ] x [, n y ] Następująca macierz transformacji dokonuje skalowania: n x n y 1 n y n x
Przekształcenie bryły kanonicznej n x, n y Musimy odwzorować kwadrat [-1, 1] na czworokąt [, n x ] x [, n y ] Następująca macierz transformacji dokonuje skalowania: n x, n y n x n y 1 n y n x
Przekształcenie bryły kanonicznej n x, n y Musimy odwzorować kwadrat [-1, 1] na czworokąt [, n x ] x [, n y ] Następująca macierz transformacji dokonuje translacji: n x, n y 1 n x 1 n y 1 n y n x
n x,n y Przekształcenie bryły kanonicznej Musimy odwzorować kwadrat [-1, 1] na czworokąt [, n x ] x [, n y ] Następująca macierz transformacji tego dokonuje:, n x n x n y n y 1 n y n x
Przekształcenie bryły kanonicznej W praktyce piksele reprezentują współrzędne jednostki integer, czyli musimy przekształcać do [ 1, n x 1 ] x [ 1, n y 1 ] Wtedy: n x n x 1 n y n y 1 1 n y n x
Przekształcenie bryły kanonicznej Rzutowanie dokonaliśmy przy odrzuceniu współrzędnej z Ale chcemy nadal być wstanie konkatenować naszą macierz z innymi, czyli ostateczna postać naszej macierzy to 4D: M vp = n x n y n x 1 n y 1 1 1
Ortograficzna bryła widzenia Najpierw musimy środek do początku przenieść
Ortograficzna bryła widzenia Najpierw musimy środek do początku przenieść b + t 1 l+r l+r l+r 1 b+t 1 l+r b+t n+f 1
Ortograficzna bryła widzenia Najpierw musimy środek do początku przenieść b + t n + f 1 l+r l+r l+r 1 b+t 1 l+r b+t n+f 1
Ortograficzna bryła widzenia Najpierw musimy środek do początku przenieść b + t n + f 1 l+r l+r l+r 1 b+t 1 l+r b+t n+f 1
Ortograficzna bryła widzenia Najpierw musimy środek do początku przenieść b + t n + f 1 l+r l+r l+r 1 b+t 1 l+r b+t n+f 1
Ortograficzna bryła widzenia Potem musimy wszystko skalować do [-1, 1]: b + t n + f
Ortograficzna bryła widzenia Potem musimy wszystko skalować do [-1, 1]: b + t n + f r l l+r l+r b+t t b n f l+r b+t n f 1
Ortograficzna bryła widzenia Konkatenujemy macierze żeby uzyskać jedną macierz transformacji do ortograficznej bryły widzenia: M orth = r l l+r l+r b+t t b n f l+r b+t n f 1 1 l+r l+r l+r 1 b+t l+r b+t 1 n+f 1 = r l l+r l+r t b b+t n f l+r r l b+t t b n+f n f 1
Ortograficzna bryła widzenia Konkatenujemy macierze żeby uzyskać jedną macierz transformacji do ortograficznej bryły widzenia: M orth = r l l+r l+r b+t t b n f l+r b+t n f 1 1 l+r l+r l+r 1 b+t l+r b+t 1 n+f 1 = r l l+r l+r t b b+t n f l+r r l b+t t b n+f n f 1
Potok graficzny Czyli ostatni krok jest: x piksel y piksel z kanoniczny 1 = M vp M orth x y z 1 M ort M vp
Potok graficzny Transformacja: x piksel y piksel z kanoniczny 1 = M vp M ort x y z 1 M ort M vp
Wyrównanie systemów współrzędnych World space: Wektory, Ԧx, Ԧy, i Ԧz y e g Camera space: Wektory Ԧe, i Ԧg -z y g -z
Wyrównanie systemów współrzędnych Żeby jedną przestrzeń na drugą przestrzeń przekształcić potrzebujemy jednego systemu współrzędnych dla obydwóch przestrzeni y v u x z g Układ świata Układ kamery
Wyrównanie systemów współrzędnych Pierwszy wektor bazowy: Ԧt Ԧg = u Drugi wektor bazowy: Ԧg u = Ԧv u t v Trzeci wektor bazowy: Ԧg: = w w
Wyrównanie systemów współrzędnych Wyrównać początki naszych systemów współrzędnych Wyrównać wektory bazowe v e +y w +z -z -y
Wyrównanie systemów współrzędnych Wyrównanie początków przez translacje: v 1 1 e x e y 1 e z 1 e +y w +y v +z -z +z w -z -y -y
Wyrównanie systemów współrzędnych Rotacja w przeciwnym kierunku jest trywialna: u x v x w x u y v y w y u z v z w z 1 +y v +z w -z -y
Wyrównanie systemów współrzędnych Macierz odwrotna w przypadku ortonormalnej bazy to transpozycja tej macierzy (wektory u,v,w muszą być znormalizowane): u x u y u z v x v y v z w x w y w z 1 u u w w
Wyrównanie systemów współrzędnych Macierz transformacji z world space na view space jest wtedy: M cam = u x u y u z v x v y v z w y w z 1 w x 1 1 e x e y 1 e z 1
Rzutowanie ortograficzne x piksel y piksel z kanoniczny 1 = M vp M orth M cam x y z 1
Rzutowanie równoległe The Simpons Tapped Out
Rzutowanie równoległe y g -z
Rzutowanie perspektywiczne Co jest perspektywa? Wielkość obiektu jest proporcjonalna do dystansu.
Potok graficzny
Potok graficzny Dodać perspektywę
Transformacja bryły widzenia Bryla widzenia Ortograficzna bryła widzenia
Transformacja bryły widzenia Bryla widzenia Ortograficzna bryła widzenia
e view plane far plane
e view plane far plane
e view plane far plane
Rzutowanie na płaszczyznę y y p e g View plane
Rzutowanie na płaszczyznę y y p e g d z View plane
Rzutowanie na płaszczyznę y y p y = d z czyli y p e g d z View plane
Rzutowanie na płaszczyznę y y p y = d z czyli y p y p = d z y e g d z View plane
Założenia Przyjmujemy ze: Patrzymy w kierunku negatywnej osi z Rzutujemy na powierzchnie bliską (near plane) Czyli dystans d = -n, co znaczy: x p = d z x = n z x y p = d z y = n z y
Założenia Przyjmujemy ze: Patrzymy w kierunku negatywnej osi z Rzutujemy na powierzchnie bliską (near plane) Czyli dystans d = -n, co znaczy: x p = d z x = n z x y p = d z y = n z y
Założenia Przyjmujemy ze: Patrzymy w kierunku negatywnej osi z Rzutujemy na powierzchnie bliską (near plane) Czyli dystans d = -n, co znaczy: x p = d z x = n z x y p = d z y = n z y M x y z 1 = nx z ny z z 1
System współrzędnych jednorodnych Nasze multiplikacje macierzami to liniowe transformacje, tzn. tylko mogą wygenerować wartości jak np.: x = a 1 x + b 1 y + c 1 z Wprowadzenie współrzędnych jednorodnych umożliwia reprezentacje punktów (x, y, z) jako (x, y, z, 1) i umożliwia nam skorzystanie z afinicznych transformacji, np.: x = a 1 x + b 1 y + c 1 z + d 1
System współrzędnych jednorodnych Nasze multiplikacje macierzami to liniowe transformacje, tzn. tylko mogą wygenerować wartości jak np.: x = a 1 x + b 1 y + c 1 z Wprowadzenie współrzędnych jednorodnych umożliwia reprezentacje punktów (x, y, z) jako (x, y, z, 1) i umożliwia nam skorzystanie z afinicznych transformacji, np.: x = a 1 x + b 1 y + c 1 z + d 1
System współrzędnych jednorodnych We współrzędnych jednorodnych wektor (x, y, z, 1) reprezentuje punkt (x, y, z) Teraz wprowadzamy możliwość reprezentacji punktów za pomocy (x, y, z, w) co daje nam punkt ( x w, y w, z w ) jednorodny kartezjański
System współrzędnych jednorodnych Wtedy transformacja macierzowa staje się: x y z 1 = a 1 b 1 c 1 T x a b c T y a 3 b 3 c 3 T z a 4 b 4 w c 4 x y z 1 = a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w homogenizacja a 1 x+b 1 y+c 1 z+t x a 4 x+b 4 y+c 4 z+w a x+b y+c z+t y a 4 x+b 4 y+c 4 z+w a 3 x+b 3 y+c 3 z+t z a 4 x+b 4 y+c 4 z+w 1
System współrzędnych jednorodnych Wtedy transformacja macierzowa staje się: x y z 1 = a 1 b 1 c 1 T x a b c T y a 3 b 3 c 3 T z a 4 b 4 w c 4 x y z 1 = a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w homogenizacja a 1 x+b 1 y+c 1 z+t x a 4 x+b 4 y+c 4 z+w a x+b y+c z+t y a 4 x+b 4 y+c 4 z+w a 3 x+b 3 y+c 3 z+t z a 4 x+b 4 y+c 4 z+w 1
System współrzędnych jednorodnych Wtedy transformacja macierzowa staje się: x y z 1 = a 1 b 1 c 1 T x a b c T y a 3 b 3 c 3 T z a 4 b 4 w c 4 x y z 1 = a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w homogenizacja a 1 x+b 1 y+c 1 z+t x a 4 x+b 4 y+c 4 z+w a x+b y+c z+t y a 4 x+b 4 y+c 4 z+w a 3 x+b 3 y+c 3 z+t z a 4 x+b 4 y+c 4 z+w 1
System współrzędnych jednorodnych Wtedy transformacja macierzowa staje się: x y z 1 = a 1 b 1 c 1 T x a b c T y a 3 b 3 c 3 T z a 4 b 4 w c 4 x y z 1 = a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w homogenizacja a 1 x+b 1 y+c 1 z+t x a 4 x+b 4 y+c 4 z+w a x+b y+c z+t y a 4 x+b 4 y+c 4 z+w a 3 x+b 3 y+c 3 z+t z a 4 x+b 4 y+c 4 z+w 1
System współrzędnych jednorodnych Wtedy transformacja macierzowa staje się: x y z 1 = a 1 b 1 c 1 T x a b c T y a 3 b 3 c 3 T z a 4 b 4 w c 4 x y z 1 = a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w a 1 x + b 1 y + c 1 z + T x a x + b y + c z + T y a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w Układ współrzędnych jednorodnych homogenizacja a 1 x+b 1 y+c 1 z+t x a 4 x+b 4 y+c 4 z+w a x+b y+c z+t y a 4 x+b 4 y+c 4 z+w a 3 x+b 3 y+c 3 z+t z a 4 x+b 4 y+c 4 z+w 1 Układ współrzędnych kartezjańskich
System współrzędnych jednorodnych Wprowadzenie transformacji rzutowania (homografia) umożliwia nam stworzyć wartości jak np.: x = a 1x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w
System współrzędnych jednorodnych Wprowadzenie transformacji rzutowania (homografia) umożliwia nam stworzyć wartości jak np.: x = a 1x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w nx z ny z z 1
Transformacja bryły widzenia Kalkulacja: a 1 x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w a x + b y + c z + T y a 4 x + b 4 y + c 4 z + w a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w 1 Cel: nx z ny z z 1
Transformacja bryły widzenia Kalkulacja: a 1 x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w a x + b y + c z + T y a 4 x + b 4 y + c 4 z + w a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w 1 Cel: nx z ny z z 1......... 1 x y z 1 Czwarty wiersz
Transformacja bryły widzenia Kalkulacja: a 1 x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w a x + b y + c z + T y a 4 x + b 4 y + c 4 z + w a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w 1 Cel: nx z ny z z 1......... 1 x y z 1 Czwarty wiersz
Transformacja bryły widzenia Kalkulacja: a 1 x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w a x + b y + c z + T y a 4 x + b 4 y + c 4 z + w a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w 1 Cel: nx z ny z z 1......... 1 x y z 1 n. n... 1 x y z 1 Czwarty wiersz Pierwszy i drugi wiersz
Transformacja bryły widzenia Kalkulacja: a 1 x + b 1 y + c 1 z + T x a 4 x + b 4 y + c 4 z + w a x + b y + c z + T y a 4 x + b 4 y + c 4 z + w a 3 x + b 3 y + c 3 z + T z a 4 x + b 4 y + c 4 z + w 1 Cel: nx z ny z z 1......... 1 x y z 1 n. n... 1 x y z 1 Czwarty wiersz Pierwszy i drugi wiersz
Co z trzecim wierszem? nx n n x y z ny???? 1 z 1 z z 1
Transformacja bryły widzenia e near plane n far plane f
Transformacja bryły widzenia z p = f z e z p near plane n far plane f
Transformacja bryły widzenia z p = n e z z p near plane n far plane f
Transformacja bryły widzenia z p [n, f] z e z p near plane n far plane f
Transformacja bryły widzenia z p [n, f] z e z p near plane n far plane f
Transformacja bryły widzenia z p ma zachowac porzadek wierzcholkow z e z p near plane n far plane f
Transformacja bryły widzenia z p = nf z [n, f] e z z p near plane n far plane f
Transformacja bryły widzenia z p = n + f nf z e z z p near plane n far plane f
Zachowanie porządku wierzchołków z p = n + f fn z Porządek wzdłuż osi z jest zachowany gdy > n z 1 > z f to z 1p > z p z 1p z p = fn z fn z 1 = (z 1 z )fn z 1 z Bo f, z 1, z, n < mamy fn z 1 z > i bo z 1 > z mamy z 1 z > Czyli z 1p > z p
Zachowanie porządku wierzchołków z p = n + f fn z Porządek wzdłuż osi z jest zachowany gdy > n z 1 > z f to z 1p > z p z 1p z p = fn z fn z 1 = (z 1 z )fn z 1 z Bo f, z 1, z, n < mamy fn z 1 z > i bo z 1 > z mamy z 1 z > Czyli z 1p > z p
Zachowanie porządku wierzchołków z p = n + f fn z Porządek wzdłuż osi z jest zachowany gdy > n z 1 > z f to z 1p > z p z 1p z p = fn z fn z 1 = (z 1 z )fn z 1 z Bo f, z 1, z, n < mamy fn z 1 z > i bo z 1 > z mamy z 1 z > Czyli z 1p > z p
Zachowanie porządku wierzchołków z p = n + f fn z Porządek wzdłuż osi z jest zachowany gdy > n z 1 > z f to z 1p > z p z 1p z p = fn z fn z 1 = (z 1 z )fn z 1 z Bo f, z 1, z, n < mamy fn z 1 z > i bo z 1 > z mamy z 1 z > Czyli z 1p > z p
Zachowanie porządku wierzchołków z p = n + f fn z Porządek wzdłuż osi z jest zachowany gdy > n z 1 > z f to z 1p > z p z 1p z p = fn z fn z 1 = (z 1 z )fn z 1 z Bo f, z 1, z, n < mamy fn z 1 z > i bo z 1 > z mamy z 1 z > Czyli z 1p > z p
Transformacja bryły widzenia z p = n + f fn z z p ~ 1 z
Transformacja bryły widzenia z p = n + f fn z z p ~ 1 z z p z
Macierz P n n n + f nf 1 x y z 1 = nx z ny z n f + nf z 1
Macierz P n n n + f nf 1 x y z 1 = nx z ny z n + f nf z 1
Macierz transformacji perspektywicznej Czyli nasza końcowa macierz transformacji perspektywicznej M pers jest wtedy: n M per = M orth P = M n orth n f nf 1 = n r l n t b l+r l r b+t b t f+n n f 1 fn f n
Macierz transformacji perspektywicznej Czyli nasza końcowa macierz transformacji perspektywicznej M pers jest wtedy: n M per = M orth P = M n orth n + f nf 1 = n r l n t b l+r l r b+t b t f+n n f 1 fn f n
Macierz transformacji perspektywicznej Czyli nasza końcowa macierz transformacji perspektywicznej M pers jest wtedy: n M per = M orth P = M n orth n + f nf 1 = n r l n t b l+r l r b+t b t f+n n f 1 fn f n
Potok graficzny Potok graficzny z ortograficznym rzutem: x y M vp M ort M cam z 1 Potok graficzny z perspektywicznym rzutem: x y M vp M per M cam z 1
Współrzędne jednorodne D
Współrzędne jednorodne Współrzędne jednorodne 3D
Współrzędne jednorodne Ścięcie
Współrzędne jednorodne Translacja w D
Współrzędne jednorodne D: w 1 (x)
Współrzędne jednorodne w 1 (x, 1) (x)
Współrzędne jednorodne w 1 (x, 1) (x+d, 1) (x)
Współrzędne jednorodne w 1 (x, 1) (x+d, 1) (x) (x+d)
Współrzędne jednorodne w 1 (x, 1) (x+d, 1) (ẋ/w, 1) (x) (x+d) (x)
Współrzędne jednorodne w 1 (x, 1) (x+d, 1) (ẋ/w, 1) (x) (x+d) (x)
Współrzędne jednorodne w 1 (ẋ, w) (x, 1) (x+d, 1) (ẋ/w, 1) (x) (x+d) (x) (x)
Współrzędne jednorodne w 1 (ẋ, w) (ẋ+ḋ, w) (x, 1) (x+d, 1) (ẋ/w, 1) (x) (x+d) (x) (x)
Współrzędne jednorodne w 1 (ẋ, w) (ẋ+ḋ, w) (x, 1) (x+d, 1) (ẋ/w, 1) ((ẋ+ḋ)/w, 1) (x) (x+d) (x) (x)
Współrzędne jednorodne w 1 (ẋ, w) (ẋ+ḋ, w) (x, 1) (x+d, 1) (ẋ/w, 1) ((ẋ+ḋ)/w, 1) (x) (x+d) (x) (x) (x+d)
August Möbius https://en.wikipedia.org/wiki/homogeneous_coordinates
Rysowanie na ekranie Żeby narysować linie na ekranie możemy się wtedy posługiwać następującym pseudokodem: compute M vp compute M per compute M cam M = M vp M per M cam for each line segment (a, b) do p = M a q = M b drawline(p x /p w, p y /p w, q x /q w, q y /q w )