DamX a écrit:Bonjour,
La perspective conique avec le point de fuite au centre ce n'est jamais qu'une projection classique de type "camera", alors autant modéliser ça par une camera où le plan focal serait l'écran 500x500.
la camera est centre en (0,0,-f) avec f la focale. Pour trouver un point, il suffit de relier ce point avec le centre de la camera et de regarder l'intersection avec le plan focal en z=0, qui correspondra aux coordonnées que tu recherches.
donc si tu disposes d'un point (x,y,z), tu veux l'intersection entre la droite d'équation (250,250,-f)+t(x-250,y-250,z+f) et le plan z=0.
Ce qui donne donc -f+t(z+f)=0 => t=f/(z+f), et les coordonnées du point sur l'écran sont donc (250+t(x-250), 250+t(y-250)), à savoir (250+(x-250)f/(z+f),250+(y-250)f/(z+f)).
Une petite image trouvée sur le net illustrant le concept :
C'est tout simple. La chose amusante si tu programmes ça en te permettant de changer la valeur de la focale rapidement voire run-time c'est que tu te rends bien compte de son rôle : plus la focale est grande, moins la perspective est forte et le point de fuite visible, à la limite f infinie tu retrouves une perspective isométrique/cavalière (tu obtiens (x,y) en faisant tendre f vers l'infini). A l'opposé plus la focale est faible et plus tout semble rapidement "aspiré" vers le point de fuite (tu obtiens (250,250) en faisant tendre f vers 0).
Tu peux même ensuite t'amuser à déplacer le point de fuite en prenant (x0,y0,-f) comme centre de la caméra (sans rien changer au reste).
Damien
Cliffe a écrit:Essaye avec ça : lien
vous remarquerez que l'objet à tendance à se deformer au fur et à mesure qu'il se rapproche du point de fuite...
j'ai pas lu les msg
Mais il veux projeter un cube sur plan, donc matrice oui.
Je suis un fervent partisan du "avant d'utiliser un truc tout fait, cherches à le comprendre"
Pourquoi vouloir refaire des choses qui ont déjà faites ?
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :