前面我们使用Qt 3D框架创建了一个最基本的3D程序,蓝色的背景,里面什么也没有。
现在,我们要在此基础上把3D模型放进去。3D建模的工具有很多,Auto CAD, 3DS Max,Rhino, Blender等等,有收费,有免费,不一而足,总有一款你会喜欢。 在学校不同的专业学的软件可能不同,笔者是电子专业的,十几年前在学校只学过工程制图,使用的是AutoCAD。但没关系,我们要做的是编写3D程序,建模有时间再学吧。
Qt 3D内置了obj的模型解析器,能够导入的是obj格式的3D模型,其它格式就需要转换一下了。如果手头没有现成的模型,我们就直接使用Qt自带的几个模型做为例子。Qt的示例程序里面带了几个模型,存放在下面这个目录,我们把它拷出来,放到自己的工作目录即可。
ExamplesQt-5.11.1qt3dexampleresourcesassetsobj
接下来,把toyplane.obj添加到我们的工程里面,先在qml.qrc下添加一个prefix,/assets/obj,然后把toyplane.obj添加到此路径下。
编辑main.qml文件,添加以下内容:
1 Entity {
2 id: topplane
3
4 PhongMaterial {
5 id: material
6 }
7
8 Mesh {
9 id: toyplaneMesh
10 source: "qrc:/assets/obj/toyplane.obj"
11 }
12
13 components: [toyplaneMesh, material]
14 }
我们添加一个新的Entity来表示我们飞机模型实体,id为toyplane。然后这个实体中包含了一个Mesh对象。其中这个Mesh由"qrc:/assets/obj/toyplane.obj"这个路径载入。还定义了一个PhongMaterial材质,Qt 3D没有默认的材质,如果不定义材质的话,模型就显示不出来。最后创建components为[ toyplaneMesh, material ],表示让Entity拥有的组件是名为toyplaneMesh,材质为material的Mesh component。
点击运行,效果如下:
因为我们在第(一)篇里定义了Camera和InputSettings{},那么我们可以使用鼠标将camera的参数进行相应的改变,从而可以从不同的角度来观察模型。程序可以通过鼠标进行交互:左键可以平移,右键可以旋转,中键可以放大缩小等。