Qt文档阅读笔记-Qt Quick 3D - Simple Example解析

583 篇文章 127 订阅
196 篇文章 13 订阅

程序运行截图如下:

还是动的。

官方出这篇博文的目的是如何教我们使用Qt Quick 3D去渲染简单的场景。

 

首先是设置其场景。

在main.qml文件中设置整个场景,导入QtQuick3D组建,用于使用各种3D数据类型:

  import QtQuick3D 1.14

  Window {
      id: window
      width: 1280
      height: 720
      visible: true

      View3D {
          id: view
          anchors.fill: parent

          //! [environment]
          environment: SceneEnvironment {
              clearColor: "skyblue"
              backgroundMode: SceneEnvironment.Color
          }
          //! [environment]

          //! [camera]
          PerspectiveCamera {
              position: Qt.vector3d(0, 200, -300)
              rotation: Qt.vector3d(30, 0, 0)
          }
          //! [camera]

          //! [light]
          DirectionalLight {
              rotation: Qt.vector3d(30, 70, 0)
          }
          //! [light]

          //! [objects]
          Model {
              position: Qt.vector3d(0, -200, 0)
              source: "#Cylinder"
              scale: Qt.vector3d(2, 0.2, 1)
              materials: [ DefaultMaterial {
                      diffuseColor: "red"
                  }
              ]
          }

          Model {
              position: Qt.vector3d(0, 150, 0)
              source: "#Sphere"

              materials: [ DefaultMaterial {
                      diffuseColor: "blue"
                  }
              ]

              SequentialAnimation on y {
                  loops: Animation.Infinite
                  NumberAnimation {
                      duration: 3000
                      to: -150
                      from: 150
                      easing.type:Easing.InQuad
                  }
                  NumberAnimation {
                      duration: 3000
                      to: 150
                      from: -150
                      easing.type:Easing.OutQuad
                  }
              }
          }
          //! [objects]
      }
  }

定义了场景所处的环境。在这个例子中将background的颜色改成了‘skyblue’。

  environment: SceneEnvironment {
      clearColor: "skyblue"
      backgroundMode: SceneEnvironment.Color
  }

随后定义了场景中的相机。在此官方实例中使用了PerspectiveCamera充当相机,将相机向后移,这个后是指人倒退向后这个,并且给一个看的角度

  PerspectiveCamera {
      position: Qt.vector3d(0, 200, -300)
      rotation: Qt.vector3d(30, 0, 0)
  }

在画物体前,还需要一个光源去照,在物理里面,只有光照到物体上,反射的光进入眼睛才会有颜色,没有光就是一坨黑。

  DirectionalLight {
      rotation: Qt.vector3d(30, 70, 0)
  }

其次是画简单的物体。

画一个用红色圆柱弄的圆盘,并且画一个球,这个球有一些动态效果

  Model {

      position: Qt.vector3d(0, -200, 0)
      source: "#Cylinder"
      scale: Qt.vector3d(2, 0.2, 1)
      materials: [ DefaultMaterial {
              diffuseColor: "red"
          }
      ]
  }

  Model {
      position: Qt.vector3d(0, 150, 0)
      source: "#Sphere"

      materials: [ DefaultMaterial {
              diffuseColor: "blue"
          }
      ]

      SequentialAnimation on y {
          loops: Animation.Infinite
          NumberAnimation {
              duration: 3000
              to: -150
              from: 150
              easing.type:Easing.InQuad
          }
          NumberAnimation {
              duration: 3000
              to: 150
              from: -150
              easing.type:Easing.OutQuad
          }
      }
  }

源码如下:

simple.pro

QT += quick quick3d-private

target.path = $$[QT_INSTALL_EXAMPLES]/quick3d/simple
INSTALLS += target

SOURCES += \
    main.cpp

RESOURCES += \
    qml.qrc

OTHER_FILES += \
    doc/src/*.*

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include <QtGui>
#include <QtQuick3D/private/qquick3dviewport_p.h>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QSurfaceFormat::setDefaultFormat(QQuick3DViewport::idealSurfaceFormat(4));

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

main.qml

import QtQuick 2.14
import QtQuick.Window 2.14
import QtQuick3D 1.14

Window {
    id: window
    width: 1280
    height: 720
    visible: true

    View3D {
        id: view
        anchors.fill: parent

        //! [environment]
        environment: SceneEnvironment {
            clearColor: "skyblue"
            backgroundMode: SceneEnvironment.Color
        }
        //! [environment]

        //! [camera]
        PerspectiveCamera {
            position: Qt.vector3d(0, 200, -300)
            rotation: Qt.vector3d(30, 0, 0)
        }
        //! [camera]

        //! [light]
        DirectionalLight {
            rotation: Qt.vector3d(30, 70, 0)
        }
        //! [light]

        //! [objects]
        Model {
            position: Qt.vector3d(0, -200, 0)
            source: "#Cylinder"
            scale: Qt.vector3d(2, 0.2, 1)
            materials: [ DefaultMaterial {
                    diffuseColor: "red"
                }
            ]
        }

        Model {
            position: Qt.vector3d(0, 150, 0)
            source: "#Sphere"

            materials: [ DefaultMaterial {
                    diffuseColor: "blue"
                }
            ]

            SequentialAnimation on y {
                loops: Animation.Infinite
                NumberAnimation {
                    duration: 3000
                    to: -150
                    from: 150
                    easing.type:Easing.InQuad
                }
                NumberAnimation {
                    duration: 3000
                    to: 150
                    from: -150
                    easing.type:Easing.OutQuad
                }
            }
        }
        //! [objects]
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值