2009-10-13 5 views
0

J'ai trouvé une bibliothèque appelée pyeuclid et seems to do what i want en ce qui concerne les mathématiques 3D. il contins une classe de vecteur 3D et une classe de matrice 4X4 capable de transformations comme rotation, traduire et échelle.Comment puis-je utiliser la projection de perspective dans cette bibliothèque

matrix la création est simple, il suffit de passer le long des arguments et la matrice est créée.

>>> m = Matrix4() 
>>> m.translate(50,50,50) 
Matrix4([ 1.00  0.00  0.00 50.00 
      0.00  1.00  0.00 50.00 
      0.00  0.00  1.00 50.00 
      0.00  0.00  0.00  1.00]) 

le lbrary est livré avec une classe de vecteur 3D, si je voulais traduire un point 3D avec cette matrice je aurais besoin d'abord créer le vector class, comme celui-ci.

>>> v = Vector3(100,200,300) 
>>> v 
Vector3(100.00, 200.00, 300.00) 
>>> v.x 
100 
>>> v.y 
200 
>>> v.z 
300 

Maintenant, la classe Matrix4() est livrée avec une méthode pour transformer les coordonnées, et son utilisation est similaire.

>>> m.transform(v) 
Point3(150.00, 250.00, 350.00) 

Cela tombe bien, cependant, il n'y a pas de projection en perspective appliquée, la bibliothèque est livré avec une méthode appelée Matrix4.new_perspective (fov_y, aspect, près, loin). Cest où le problème réside, je n'ai aucune idée de comment utiliser cette fonction correctement, (m.transform (vector3) ne produisent quelque chose de utilisable) le documentation dident montrent comment il est utilisé avec des vecteurs ou d'autres matrices, il dit quelque chose à propos d'être 'équivalent à l'appel OpenGL gluPerspective.fov_y ', mais ive n'a jamais utilisé opengl pour ne pas aider.

this is the module (d'importation Euclide Vector3, Matrix4)

ce que je ne veux pas, est recomendtions pour une bibliothèque moteur de jeu/visulization, ou quelque chose des thats plié sur le dessin quelque chose à l'écran, je veux juste savoir si je pouvez utiliser cette bibliothèque pour transformer les coordonnées vectorielles 3D en coordonnées d'écran 2D, et si non, quelle bibliothèque puis-je utiliser ???

alors allez-y et aidez noob en détresse! :-) merci pour votre aide.

Répondre

0

This tutorial explique les arguments à gluPerspective(), et devrait être transféré car votre bibliothèque est écrite avec comme modèle.

Je m'attendrais à ce que la méthode new_perspective() fonctionne comme un constructeur, c'est-à-dire qu'elle renvoie une matrice mise en place en tant que transformation de perspective. Vous devriez alors pouvoir transformer les coordonnées de l'espace du monde en coordonnées projetées en multipliant les vecteurs avec cette matrice.

0

Je ne sais pas si cela est pertinent car vous le savez peut-être déjà mais vous aurez besoin d'une matrice de vue. La matrice de vue représente l'inverse de la transformation de votre caméra dans le monde. Vous trouverez peut-être que la classe matrix a aussi des méthodes auxiliaires pour créer des matrices de vues, parfois appelées lookAt os similar. Vous pouvez également créer manuellement une matrice qui positionne et oriente votre caméra (imaginaire), puis l'inverse. Si vous appliquez la matrice de projection aux coordonnées du monde, vous faites l'hypothèse implicite que votre matrice de vue est l'identité et que votre caméra est à l'origine du monde et pointe vers le bas d'un axe. L'axe dépendra de la matrice de projection, mais si c'est comme la plupart des autres systèmes, ce sera l'axe z, car la profondeur de la caméra est mesurée en z le long de la convention. Il peut s'agir d'une direction positive ou négative, vérifiez donc à nouveau la documentation pour plus de détails.Donc, pour récapituler, vous devez multiplier la matrice de votre modèle avec la matrice de vue et puis par la matrice de projection. La matrice de projection est conçue pour fonctionner en coordonnées de caméra plutôt qu'en coordonnées mondiales.

+0

J'ai utilisé ce code à la place focal_length/(focal_length + z), son 100% parfait, pas besoin du calcul coûteux de la matrice que vous avez exprimé, fonctionne un charme. merci pour vos efforts de toute façon. :) – spearfire

+0

Je n'ai aucune idée de quoi vous parlez ... mais bon de savoir que vous l'avez trié de toute façon :) – Troubadour

+0

BTW, en ce qui concerne le calcul coûteux de la matrice, il était seulement un pointeur pour vous aider à démarrer avec des matrices de vue . Vous ne le faites pas de cette façon en pratique. – Troubadour

Questions connexes