.oisyn schreef op 05 maart 2003 @ 16:20:
jona: dat geldt alleen als de hoogte en breedte van je view gelijk zijn, anders krijg je een vertekening in perspectief. Overigens is berekening wel krom. Normaal is dit:
x' = f * x / z
y' = f * y / z
Waarbij f de field of view factor is. Deze waarde is gelijk aan tan (FOV/2), waarbij FOV natuurlijk de hoek van de field of view is. Bij een fov van 90 graden is f dus 0.5
Let wel dat dit view space coordinaten oplevert die tussen -1 en 1 liggen. Die moet je dus nog vermenigvuldigen met de helft van de breedte of hoogte van je view in pixels.
nee, die +p in (z+p) hoort er wel degelijk bij (ook al zie je het verschiel niet echt), en wel hierdoor
--------------|----------------------Vy
--------------|----------------------
--------------q---------------------
--------------|----------------------
c-------------s---------------------vZ
c=je oog
s=scherm (stel hier even een vertikale lijn voor)
Vy=Y coord van de vertex
Vz=Z coord van de vertex
q=snijpunt lijn c-Vy (en is de 2d coordinaat)
afstand tussen c en s is p
c-vy-vz en c-q-s zijn 2 3hoeken met gelijke verhoudingen dus kun je dit stellen:
q/Vy=p/(vZ+p)
and aangezien je q wilt weten schrijf je em om naar
q=(P*Vy)/(vZ+p)
en aangezien het midden van je scherm als middelpunt wilt hebben ipv 0,0 zul je er de helft van je schermhoogte/breedte bij de x en y moeten optellen.
En die waarde ligt helemaal niet tussen 1 en -1 (wel in Open Gl maar niet als je de formule zo los gebruikt)
En nog iets, die vertekening waar je het over hebt treed zo niet op, wel als je hem zou vermenigvuldigen met de schermbreedte/hoogte zoals jij voorstelt.
[
Voor 14% gewijzigd door
Verwijderd op 05-03-2003 17:07
]