Est-ce un point de vue correct CHAMP de vision de la matrice?
J'ai un point de vue FOV, mais lors de la rotation, il n'a pas "l'air" correct - les objets les Plus éloignés de traverse plus rapidement que les plus près des objets, en les passant au milieu de l'écran.
Donc: Est-ce correct? À l'aide de la main droite coordonnées, si ce qui compte?
public static Matrix4x4 PerspectiveFOV(float fov, float aspect, float near, float far)
{
float yScale = 1.0F /(float)Math.Tan(fov /2);
float xScale = yScale /aspect;
float farmnear = far - near;
return new Matrix4x4(
xScale, 0, 0, 0,
0, yScale, 0, 0,
0, 0, far /(farmnear), 1,
0, 0, -near * (far /(farmnear)), 1
);
}
Grâce.
Voir aussi stackoverflow.com/questions/18404890/...
OriginalL'auteur Narf the Mouse | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Je vois un couple de problèmes.
Tout d'abord, l'argument de tan() doit être convertie à partir des degrés en radians.
Deuxième, la formule de projection de perspective dans OpenGL est un peu différente de la vôtre. Comme spécifié ici, il utilise "loin" dans le dénominateur, au lieu de votre "loin - près de". Le numérateur conditions sont également différentes. La modification de votre fonction, légèrement, et la conversion de Java vers C, j'ai produit une matrice de projection identique à celui donné par gluPerspective() avec les éléments suivants:
OriginalL'auteur William Knight
Pour des questions comme celle-ci, je voudrais suggérer une excellente ressources:
http://scratchapixel.com/lessons/3d-advanced-lessons/perspective-and-orthographic-projection-matrix/
Il va vraiment dans le détail de la matrice de projection. Ils sont plus de leçons sur le sujet de la caméra, la construction de la caméra rayons, etc. Vous aurez besoin de faire quelques recherches.
OriginalL'auteur user18490