欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt5.11 Qt 3D入门(二)

程序员文章站 2022-07-13 08:28:20
...

前面我们使用Qt 3D框架创建了一个最基本的3D程序,蓝色的背景,里面什么也没有。

现在,我们要在此基础上把3D模型放进去。3D建模的工具有很多,Auto CAD, 3DS Max,Rhino, Blender等等,有收费,有免费,不一而足,总有一款你会喜欢。 在学校不同的专业学的软件可能不同,笔者是电子专业的,十几年前在学校只学过工程制图,使用的是AutoCAD。但没关系,我们要做的是编写3D程序,建模有时间再学吧。

Qt 3D内置了obj的模型解析器,能够导入的是obj格式的3D模型,其它格式就需要转换一下了。如果手头没有现成的模型,我们就直接使用Qt自带的几个模型做为例子。Qt的示例程序里面带了几个模型,存放在下面这个目录,我们把它拷出来,放到自己的工作目录即可。

Examples\Qt-5.11.1\qt3d\exampleresources\assets\obj

接下来,把toyplane.obj添加到我们的工程里面,先在qml.qrc下添加一个prefix,/assets/obj,然后把toyplane.obj添加到此路径下。

Qt5.11 Qt 3D入门(二)

编辑main.qml文件,添加以下内容:

    Entity {
        id: topplane

        PhongMaterial {
            id: material
        }

        Mesh {
            id: toyplaneMesh
            source: "qrc:/assets/obj/toyplane.obj"
        }

        components: [toyplaneMesh, material]
    }

我们添加一个新的Entity来表示我们飞机模型实体,id为toyplane。然后这个实体中包含了一个Mesh对象。其中这个Mesh由"qrc:/assets/obj/toyplane.obj"这个路径载入。还定义了一个PhongMaterial材质,Qt 3D没有默认的材质,如果不定义材质的话,模型就显示不出来。最后创建components为[ toyplaneMesh, material ],表示让Entity拥有的组件是名为toyplaneMesh,材质为material的Mesh component。

点击运行,效果如下:

Qt5.11 Qt 3D入门(二)

因为我们在第(一)篇里定义了Camera和InputSettings{},那么我们可以使用鼠标将camera的参数进行相应的改变,从而可以从不同的角度来观察模型。程序可以通过鼠标进行交互:左键可以平移,右键可以旋转,中键可以放大缩小等。