0

我找到了一个名为pyeuclid的库,它似乎在 3D 数学方面做了我想要的。它包含一个 3D 矢量类和一个 4X4 矩阵类,能够进行旋转、平移和缩放等变换。

矩阵创建很简单,只需传递参数即可创建矩阵。

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

图书馆带有一个 3D 矢量类,如果我想用这个矩阵转换一个 3D 点,我需要首先创建矢量类,像这样。

>>> 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) 不会产生任何可用的东西)文档没有显示它如何与向量或其他矩阵一起使用,它说的是“相当于” OpenGL 调用 gluPerspective.fov_y',但我从未使用过 opengl,所以这无济于事。

这是模块(来自 euclid 导入 Vector3,Matrix4)

我不想要的是一些游戏引擎/可视化库的推荐,或者是那些致力于在屏幕上绘制东西的东西,我只想知道我是否可以使用这个库将 3D 矢量坐标转换为 2D 屏幕坐标,如果不是我可以使用什么库???

所以进入那里帮助遇险的菜鸟!:-) 感谢您的帮助。

4

2 回答 2

0

本教程解释了gluPerspective()的参数,并且应该转移,因为你的库是用它作为模型编写的。

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

于 2009-10-13T09:21:06.613 回答
0

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

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

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

于 2009-10-17T12:06:05.783 回答