10 Van werkelijkheid naar computerscherm. (The viewing pipeline)



Figuur 12: De viewing pipeline
PIC

In figuur 12 zie je wat er moet gebeuren om een werkelijkheid op het beeldscherm weer te geven. Stap 1: Eerst ziet het oog (kijkpunt) een werkelijkheid die wordt geprojecteerd op het kijkvlak. Alle punten in deze actie (kijkpunt, punten in werkelijkheid en punten van afbeelding in kijkvlak) hebben wereldcoördinaten. Stap 2: De punten in het kijkvlak moeten dan nog vertaald worden naar schermcooördinaten.

We zullen de volledige bewerking doen aan de hand van het voorbeeld in figuur 13. In het voorbeeld is het kijkvlak l : x + y + z = 1 het kijkpunt Z = (0, 3, 3) en de werkelijkheid P = (0, 2, 2).


Figuur 13: Voorbeeld

SVG-Viewer needed.


Stap 1: Deze stap is eigenlijk gelijk aan wat we in de 2D situatie hebben gedaan. Er is een kijkpunt Z en een werkelijkheid P die wordt afgebeeld op een punt W in het kijkvlak l gebruikmakende van homogene coördinaten (projectieve ruimte). Zonder bewijs kan deze stap worden gegeven door de volgende matrixvermenigvuldiging: W = MP waarin M =< l,Z > I4 ZlT

Voorbeeld: homogene coördinaten:

l = 1 1 1 1 ,Z = 0 3 3 1 ,P = 0 2 2 1

< l,Z >= 1 × 0 + 1 × 3 + 1 × 3 + (1) × 1 = 5

ZlT = 0 3 3 1 111 1 = 000 0 3 3 3 3 3 33 3 1 1 1 1

M = 5 1000 0 1 0 0 0 010 0 0 0 1 000 0 3 3 3 3 3 33 3 1 1 1 1 = 5 0 0 0 3 2 3 3 3 3 2 3 1 1 1 6

W = MP = 5 0 0 0 3 2 3 3 3 3 2 3 1 1 1 6 0 2 2 1 = 0 1 1 2 = 0 12 12 1

In de euclidische ruimte is dit dus het punt W = (0, 12, 12)

Opgaven:

74.
Bereken in het voorbeeld de coördinaten van het beeldpunt voor de werkelijke punten Q = (1, 2, 2) en R = (2, 1, 1)
75.
Bepaal bij het voorbeeld de projectie matrix M voor een ander kijkpunt namelijk Z = (1, 2, 2) en bereken de coördinaten van de beeldpunten voor P,Q en R.

Stap 2: Deze stap is iets lastiger. Eigenlijk moet deze in twee stukken worden gedaan: Stap 2a:Het kijkvlak moet een 2D assenstelsel krijgen zodat we het 3D beeldpunt W in 2D in het kijkvlak coördinaten stelsel weergeven. Stap 2b: Vertaal het kijkvlak coördinatenstelsel naar het beeldscherm coördinatenstelsel.

Stap 2a: Hier gaan we als volgt te werk: We zoeken een matrix K die de homogene 3D coördinaten van W omzet in homogene 2D coördinaten voor W (noem deze Wl) in het kijkvlak. Ofwel Wl = KW.
Voor het bepalen van K is bedacht dat het handiger is om eerst de matrix G die Wl in W omzet te bepalen. Ofwel W = GWl. Daarna kunnen we K op basis van G uitrekenen.
Bepalen van de matrix K: De matrix K moet een 3 × 4 matrix zijn. (waarom?)
Gegeven een kijkvlak l : ax + by + cz + w = 0. In het kijkvlak moeten we een punt en twee vectoren kiezen die, voor het assenstelsel binnen K, de oorsprong en de assen worden.

We kiezen willekeurige een oorsprong Θ in dit vlak:



algemeen

voorbeeld



Θ = 𝜃x 𝜃y 𝜃z 1

Θ= 12 12 0 1




Figuur 14: Voorbeeld assenstelsel

SVG-Viewer needed.


Kies een richtingsvector u voor de x-as in dit vlak en een richtingsvector v voor de y-as in dit vlak zodanig dat deze loodrecht op elkaar staan (twee vectoren staan loodrecht op elkaar als het inproduct < u,v >= 0 ).



algemeen

voorbeeld
2D: x-as door Θ langs de 3D snijlijn van l met (x,y) vlak.
2D: y-as door Θ en door 3D snijpunt van l met z-as



u = ux uy uz 0 ,v = vx vy vz 0

u = 0 1 0 1 12 12 0 1 = 12 12 0 0 ,v = 0 0 1 1 12 12 0 1 = 12 12 1 0



De laatste coördinaten van u en v zijn gelijk aan 0. In de projectieve ruimte willen we hier een richting en niet een punt. Eerder hebben we gemeld dat een 0 als laatste coördinaat inhield dat een punt op de horizon ligt. Een andere betekenis is dat het de richting aangeeft van alle lijnen die een zelfde snijpunt op de horizon krijgen.

Maak van u en v eenheidsvectoren eu,ev door te delen door hun lengte. (De lengte (of norm) van een vector kan worden berekend met behulp van de stelling van Pythagoras, maar handiger als lengte u = < u, u > = ux 2 + uy 2 + uz 2 + up 2 ).



algemeen

voorbeeld



eu = 1 <u,u> ux uy uz 0 = eux euy euz 0 ,ev = 1 <v,v> vx vy vz 0 = evx evy evz 0 ,

eu = 1 (12)2 +(12)2 +02 +02 12 12 0 0 = 1 22 1 22 0 0 ,ev = 1 (12)2 +(12)2 +12 +02 12 12 1 0 = 1 66 1 66 1 36 0



In de projectieve ruimte is de het euclidische vlak een driedimensionale structuur. Je weet dat een lijn door twee punten wordt bepaald, voor een vlak heb je drie punten nodig. Het is dus niet verwonderlijk dat we voor een driedimensionale structuur nog een vierde punt nodig hebben. We kiezen daartoe het punt T dat gelijk is aan T = Θ + eu + ev.

In de projectieve vlak versie van het kijkvlak moeten de 2D homogene coördinaten van Θ,eu,ev en T in het assenstelsel in het kijkvlak Θl,eul,evl,Tl gelijk zijn aan:

Θl = 0 0 1 ,eul = 1 0 0 ,evl 0 1 0 ,Tl = 1 1 1

Voor de terugweg W = GW moet nu gelden dat Θl,eul,evl en Tl door G worden afgebeeld op Θ,eu,ev en T, ofwel

G 0101 0 0 1 1 1 001 = 𝜃xeuxevx𝜃x + eux + eux 𝜃y euyevy𝜃y + euy + evy 𝜃z euzevz𝜃z + euz + evz 1 0 0 1

Het is eenvoudig in te zien dat G er als volgt uit ziet:

G = euxevx𝜃x euy evy𝜃y euz evz𝜃z 0 0 1

Zonder een bewijs te geven dat dit echt zo is, kan de matrix K voor Wl = KW als volgt worden berekend:

K = (GT G)1GT

Terug naar het voorbeeld: De matrix G wordt:

G = 1 22 1 661 2 1 22 1 661 2 0 1 36 0 0 0 1

GT G = 1 22 1 22 0 0 1 66 1 661 360 1 2 1 2 0 1 1 22 1 661 2 1 22 1 661 2 0 1 36 0 0 0 1 = 1 0 0 0 1 1 66 0 1 66 3 2

(GT G)1 = 1 0 0 0 1 1 66 0 1 66 3 2 1 = 1 det(GT G)adj(GT G) = 1 4 3 4 3 0 0 0 3 2 1 66 0 1 66 1 = 1 0 0 0 9 8 1 86 0 1 86 3 4

K = 1 0 0 0 9 8 1 86 0 1 86 3 4 1 22 1 22 0 0 1 66 1 661 360 1 2 1 2 0 1 = 1 22 1 22 0 0 1 86 1 863 861 86 1 4 1 4 1 4 3 4

Dus in het assenstelsel dat we in het kijkvlak hebben gekozen zijn de coördinaten (Wl) voor het beeldpunt W gelijk aan Wl = KW ofwel

Wl = 1 22 1 22 0 0 1 86 1 863 861 86 1 4 1 4 1 4 3 4 0 1 2 1 2 1 = 1 42 1 46 1

Stap 2b: Wat rest is Wl om te zetten in schermcoördinaten. Dit hebben we al gedaan in voorbeeld 1 t/m 3(opgaven 33 t/m 42). Stel dat het venster op ons scherm de afmetingen 600 × 400 (600 pixels breed en 400 hoog) heeft en dat we in ons kijkvenster Θ in het midden willen hebben ( dus op (300, 200) en dat één eenheid in het kijkvenster overeenkomt met 100 pixels op het scherm. We moeten dus schalen met en factor 100, gevolgd door een verschuiving van (0, 0) naar (300, 200) ofwel translatie over de vector (300, 200). Dan moeten we nog spiegelen in de x-as en als laatste nog een verschuiving over (0, 400) om alles weer in beeld te krijgen. We gebruiken weer homogene coördinaten om uit te komen op een matrixvermenigvuldiging Ws = BWl.

Schalen met 100 S = 100 0 0 0 100 0 0 0 1

Translatie over (300, 200) T1 = 10300 0 1 200 0 0 1

Spiegelen in de x-as D = 1 0 0 0 1 0 0 0 1

Translatie over (0,ymax) T2 = 10 0 0 1 400 0 0 1

Al deze bewerkingen samenvoegen levert de matrix B.

B = T2DT1S = 10 0 0 1 400 0 0 1 1 0 0 0 1 0 0 0 1 10300 0 1 200 0 0 1 100 0 0 0 100 0 0 0 1 = 1 0 0 0 1 400 0 0 1 100 0 300 0 100 200 0 0 1 = 100 0 300 0 100 200 0 0 1

De schermcoördinaten Ws van het beeldpunt zijn dan

Ws = BWl = 100 0 300 0 100 200 0 0 1 1 42 1 46 1 = 252 + 300 256 + 200 1 = 335 139 1

Alles in één stap

De stappen die we hebben gedaan komen neer op de volgende serie veranderingen:P W Wl Ws met behulp van de volgende berekeningen: W = MP, Wl = KW en Ws = BWl. Dit kunnen we ook weer als een bewerking A schrijven:Ws = BKMP = AP waarin,

A = 100 0 300 0 100 200 0 0 1 1 22 1 22 0 0 1 86 1 863 861 86 1 4 1 4 1 4 3 4 5 0 0 0 3 2 3 3 3 3 2 3 1 1 1 6 = 100 0 300 0 100 200 0 0 1 52 2 3 223 22 3 46 3 26 6 3 26 1 1 1 6 = 5002 3001002 300 1502 300 1502 + 1800 756 200 1506 200 1006 200 1506 + 1200 1 1 1 6

Ws = AP = 5002 3001002 300 1502 300 1502 + 1800 756 200 1506 200 1006 200 1506 + 1200 1 1 1 6 0 2 2 1 = 502 + 600 506 + 200 2 = 252 + 300 256 + 200 1 = 335 139 1

Opgaven:

75.
Bereken in het voorbeeld de schermcoördinaten voor de werkelijke punten Q = (1, 2, 2) en R = (2, 1, 1) .