2013-03-12 6 views
1

j'étudie les projections en perspective et je suis tombé sur ce concept: enter image description herePerspective - comment convertir les coordonnées

Fondamentalement, il dit que si j'ai un point (x, y, z) je peux projeter dans mon écran en perspective (espace de la caméra) en faisant

x' = x/z 
y' = y/z 
z' = f(z-n)/z(f-n) 

Je ne comprends pas pourquoi x '= x/z ou y' = y/z

+2

Triangles congrus? –

+1

C'est parce que plus rien n'est éloigné de vous, moins le déplacement de x ou y affecte sa position apparente. Pensez à quelque chose de 10cm devant vos yeux qui se déplace d'un mètre à gauche ou à droite. Cela semblera bouger (voyager à travers une plus grande proportion de votre champ de vision) que le même objet s'il se trouvait à 3 mètres devant vos yeux et se déplaçait à travers le même déplacement de 1 mètre. – enhzflep

Répondre

1

Géométriquement, il s'agit de triangles similaires.

Dans le diagramme, car (x,y,x) est sur la même ligne en pointillés comme (x',y',z'):

triangle [(0,0,0), (0,0,z), (x,y,z)] 
    is similar to 
triangle [(0,0,0), (0,0,z'), (x',y',z')] 

Cela signifie que les côtés correspondants présentent un rapport fixe. Et, de plus, le vecteur original est proportionnel au vecteur projeté. Enfin, notez que le plan de projection fictive est à z' = 1:

(x,y,z)/z = (x',y',z')/z' 

    -> so, since z' = 1: 
     x'/z' = x' = x/z 
     y'/z' = y' = y/z 

[Attention: notez que le z' dans ma réponse est différente de sa présence dans la question. Le z' = f(z-n)/z(f-n) de la question ne correspond pas directement à un point physique: il s'agit d'une "valeur de profondeur", utilisée pour faire des choses comme le retrait de surface cachée.]

1

Une façon de regarder cela, est que ce que vous sont en train de faire, se croisent une ligne qui traverse à la fois le spectateur po sition (supposée être à l'origine: 0,0,0), et le point dans l'espace que vous souhaitez projeter (P).

Vous prenez donc l'équation de la ligne, qui est P' = P * a, où a est simplement une valeur scalaire et pour résoudre P'.Z = 1 (qui est l'endroit où votre plan de projection est). Ceci est trivialement vrai lorsque le multiple scalaire est 1/P.Z, donc le point projeté est (P.X, P.Y, P.Z) * (1/P.Z)

Questions connexes