如何在此库中使用透视投影

时间:2009-10-13 09:14:38

标签: python 3d vector matrix projection

我在3D数学方面找到了一个名为pyeuclid的库和seems to do what i want。 它包含一个3D矢量类和一个4X4矩阵类,能够进行旋转,平移和缩放等转换。

matrix创建很简单,只需传递参数并创建矩阵。

>>> 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])

lbrary带有一个3D矢量类,如果我想用这个矩阵翻译一个3D点,我需要先创建vector class,就像这样。

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

现在,Matrix4()类附带了一个变换坐标的方法,它就像这样使用。

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

这很好,但是,没有应用透视投影,该库附带了一个名为Matrix4.new_perspective(fov_y,aspect,near,far)的方法。 这就是问题所在,我不知道如何正确使用这个功能,(m.transform(vector3)doesent产生任何可用的东西)documentation doesent显示它如何与矢量或其他矩阵一起使用,它说的是关于“等同于OpenGL调用gluPerspective.fov_y”,但我从未使用过opengl,因此不会有帮助。

this is the module(来自euclid import Vector3,Matrix4)

我不想要的,是一些游戏引擎/可视化库的推荐,或者是一些想要在屏幕上绘制内容的东西,我只是想知道我是否可以使用这个库来将3D矢量坐标变成2D屏幕坐标,如果不是我可以使用哪个库???

所以进入那里,帮助遇难的菜鸟! :-) 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

This tutorial解释gluPerspective()的参数,并且应该转移,因为您的库是用模型编写的。

我希望new_perspective()方法像构造函数一样工作,即它返回一个设置为透视变换的Matrix。然后,您应该能够通过将矢量与该矩阵相乘来将世界空间坐标转换为透视投影坐标。

答案 1 :(得分:0)

我不知道这是否相关,因为您可能已经知道这一点,但您也需要一个视图矩阵。视图矩阵表示您的相机在世界中的变换的倒数。您可能会发现矩阵类还有用于创建视图矩阵的辅助方法,有时也称为lookAt os。或者,只需手动创建一个矩阵,定位和定位您的(假想的)相机,然后将其反转。

如果将投影矩阵应用于世界标记,则会隐含假设您的视图矩阵是标识,因此您的相机位于世界的原点并指向轴。哪个轴将取决于投影矩阵,但如果它像大多数其他系统一样,它将是z轴,因为约定沿z测量相机深度。它可能处于正向或负向,因此请再次查看文档以获取详细信息。

因此,总而言之,您需要将模型矩阵与视图矩阵相乘,然后乘以投影矩阵。投影矩阵设计用于相机坐标而不是世界坐标。