用Vpython显示Blender设计的3D模型

vpython(http://www.vpython.org)是python的一个实时3D开发库。它十分简单易用,用户可以抛开OpenGL那样复杂的命令,把注意力集中到模型和动画的设计上,因此用它可以快速地开发实时3D演示程序。

Blender(http://www.blender3d.org )是一个开源的3D设计软件,功能强大,短小精悍。
本文介绍如何用vpython读取用blender设计好的3D模型。

Vpython除了提供一些立方体、圆柱、球体等基本形体之外,还提供了faces函数用于建造复杂的模型。手工写模型的点、面以及颜色等信息几乎是不可能的,因此需要3D设计软件设计好模型之后,再用程序转换为vpython的faces。

Blender 可以把模型输出为许多格式,其中的directX(.x)格式最接近于vpython的faces构造,因此我决定用directX(.x)格式连接 blender和vpython。由于vpython只支持3点构成的面,而blender设计的模型可能有4点构成的面,因此在输出模型之前,应该先把 模型的所有4点面转换为3点面,blender的菜单中直接就有这个功能。

剩下的就是写个小python程序读取.x文件中的信息,转换为faces所需要的格式了。Vpython中定义的面是单向的,只能从一个方向看到它,如果需要建造双向面的话,就构造两个3点面,它们的点重合,但是点的顺序相反:p1,p2,p3和p1,p3,p2。

另外关于模型的材质颜色,由于blender输出的文件按照材质的名称排列材质,而面所使用的材质信息却是按照blender内部的材质添加顺序进行的。因此直接转换材质信息会造成材质错位,为了解决这个问题,需要手工调整材质的顺序。

采用上述办法,我用vpython实现了一个实时汽车3D演示程序。这段程序和Labview的实时计算部分之间用TCP/IP通信,获取汽车各个部分的位置信息。

loading...