Je tente de projeter une série de points 3D sur l'écran à l'aide d'une matrice de caméra en perspective. Je n'ai pas d'espace du monde (ou je considère que c'est une matrice d'identité) et ma caméra n'a pas d'espace de caméra (ou la considère comme une matrice d'identité), j'ai une matrice 4x4 pour mon espace objet.Projection d'un point 3D vers un espace d'écran 2D à l'aide d'une matrice de caméra en perspective
Je prends la matrice de l'objet et en le multipliant par la matrice de point de vue de la caméra, générée avec la méthode suivante:
Matrix4 createPerspectiveMatrix(Float fov, Float aspect, Float near, Float far)
{
Float fov2 = (fov/2) * (Math.PI/180);
Float tan = Math.tan(fov2);
Float f = 1/tan;
return new Matrix4 (
f/aspect, 0, 0, 0,
0, f, 0, 0,
0, 0, -((near+far)/(near-far)), (2*far*near)/(near-far),
0, 0, 1, 0
);
}
Je puis en prenant mon point [x, y, z, 1] et en multipliant ce par la multiplication résultante de la matrice perspective et de la matrice objet. La partie suivante est l'endroit où je suis confuzzled, je suis assez sûr que je dois obtenir ces points dans les plages de -1 et 1, ou 0 et 1, et, dans le cas d'avoir le premier ensemble de valeurs, je multiplierais alors les points par la largeur et la hauteur de l'écran pour les coordonnées d'écran x et y respectivement ou multiplier les valeurs par la hauteur d'écran/2 et largeur/2 et ajouter les mêmes valeurs aux points respectifs.
Toute étape par étape en me disant comment cela pourrait être réalisé ou où je pourrais me tromper avec tout cela serait massivement apprécié !! : D
Cordialement à tous!
P.S. Dans l'exemple d'une matrice identité/traduction, mon format de matrice dans mon modèle est:
[1, 0, 0, tx,
0, 1, 0, ty,
0, 0, 1, tz,
0, 0, 0, 1 ]
Alors? Est-ce que cela fonctionne? :) – Stringer
Désolé de ramener les morts et tout ... Mais dans votre code 'createPerspectiveMatrix', ne devrait pas' matrix.m32 = 1.0' et 'matrix.m33 = 0.0'? Si cela devait initialement être une matrice d'identité «remplie», ces valeurs semblent être permutées dans votre code. – RectangleEquals
Merci, puisque j'ai posé cette question, j'ai écrit Zest3D http://www.zest3d.com donc je l'ai compris. :) –