Qt 3D教程(四)结合Qt Quick来实现动画的效果

来源:互联网 发布:2015各省医药行业数据 编辑:程序博客网 时间:2024/04/25 09:31

Qt 3D教程(四)结合Qt Quick来实现动画的效果

       上篇教程已经给大家带来较为实用的效果了,这回我们尝试载入两个模型,并且让PhongMaterial成为它们的共享材质,此外,我们通过借助Qt Quick的动画框架来让我们的三维场景动起来!

蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/47132099。欢迎同行前来探讨。

       这次的改动没有上次那么多,只需要修改main.qml即可满足效果。main.qml文件如下所示:

import Qt3D 2.0import Qt3D.Renderer 2.0import QtQuick 2.5 as QuickEntity{    id: root    Camera    {        id: camera        position: Qt.vector3d( 0.0, 20.0, 100.0 )        projectionType: CameraLens.PerspectiveProjection        fieldOfView: 45        aspectRatio: 16.0 / 9.0        nearPlane : 0.1        farPlane : 1000.0        upVector: Qt.vector3d( 0.0, 1.0, 0.0 )        viewCenter: Qt.vector3d( 0.0, 20.0, 0.0 )    }    components: FrameGraph    {        ForwardRenderer        {            clearColor: Qt.rgba( 0.2, 0, 0, 1 )            camera: camera        }    }    PhongMaterial    {        id: phongMaterial        ambient: _settings.ambient        diffuse: _settings.diffuse        specular: _settings.specular        shininess: _settings.shininess    }    Entity    {        Mesh        {            id: chestMesh            source: "qrc:/assets/Chest.obj"            enabled: _settings.showModel        }        components: [ chestMesh, phongMaterial ]    }    Entity    {        Mesh        {            id: trefoilMesh            source: "qrc:/assets/trefoil.obj"            enabled: _settings.showModel        }        Transform        {            id: transform            Translate            {                translation: Qt.vector3d( 0, 30, 50 )            }            Rotate            {                axis: Qt.vector3d( 0, 1, 0 )                Quick.NumberAnimation on angle                {                    from: 0                    to: 360                    loops: Quick.Animation.Infinite                    duration: 2000                    running: true                }            }        }        components: [ trefoilMesh, phongMaterial, transform ]    }    Configuration    {        controlledCamera: camera    }}

       这里我们将PhongMaterial单独提出来,让它成为一个共享的材质,另外,我们再添加一个模型——三叶草环状模型,并且我们给它做了一系列转换。我想要是让这个模型绕着宝箱模型旋转该多好啊。于是我们将Qt Quick引入,我们将旋转的部分做了动画,从0度到360度,并且做了无限循环。就是这么简单,我已经迫不及待地想要看到动态的效果了:

       我们看到,这个环状模型绕着宝箱模型旋转了,这个效果非常带感!

       本次教程的代码均在我的github中,感兴趣的同行们可以通过git clone或者是直接下载我的git项目来获取到本套教程的所有源代码。

1 0