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.
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
Je n'ai aucune idée de quoi vous parlez ... mais bon de savoir que vous l'avez trié de toute façon :) – Troubadour
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