Qt Quick 3D - イントロダクション

Qt Quick 3Dでシーンをレンダリングする方法を説明します。

この例では、簡単な例のコードを通して、Quick 3Dの基本的な機能の概要を紹介します。

シーンのセットアップ

シーン全体をmain.qmlファイルでセットアップします。

QtQuick3D モジュールの型を使用できるようにするには、インポートする必要があります:

import QtQuick
import QtQuick3D

3Dシーンを描くには、Qt Quick シーン内に3Dビューポートが必要です。これはView3D クラスによって提供され、ここでシーンを定義します。また、1つのアプリケーションで複数のビューを持つことも可能です。Qt Quick 3D - View3Dの例を参照してください。

まず、シーンの環境を定義します。この例では、skyblue で背景色をクリアします。SceneEnvironment で、ビューのenvironment プロパティに指定します。SceneEnvironment には、トーンマッピング設定、イメージベースライティングのライトプローブ設定、背景モード、アンビエントオクルージョンパラメータなど、シーンの環境に関連するさまざまなプロパティが記述されています。また、アンチエイリアスも制御できます。Qt Quick 3D - Antialiasing Exampleを参照してください。この例では、clearColorbackgroundMode プロパティを設定し、青い背景を取得します。

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

メッシュ

シーンをもう少し面白くするために、メッシュを追加します。クイック3Dには、球、立方体、円錐、円柱など、便利なメッシュがいくつか組み込まれています。これらは、Model ノードの source プロパティで、#Sphere#Cube#Rectangle などの特別な識別子を使って参照します。組み込みプリミティブの他に、.mesh ファイルを指定することもできます。FBX または glTF2 アセットから.mesh ファイルを生成するには、アセットをBalsam Asset Import Tool を使用して処理する必要があります。下図は、青い球体と赤い扁平な円柱を追加するコードです:

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
        }
    }
}

メッシュを追加するために、2つのModelノードを使用します。#Sphere#Cylindersource として、組み込みメッシュをロードします。モデルに色を与えるには、まずマテリアルを指定する必要があります。この場合、赤と青の拡散色を持つDefaultMaterial 。デフォルトマテリアル(DefaultMaterial)、PrincipledMaterialCustomMaterialQt Quick 3D - Principled Material ExampleおよびProgrammable Materials、Effects、Geometry、Texture dataを参照してください。Model によってロードされたメッシュは複数のサブメッシュを持つことができ、各サブメッシュはマテリアルを指定する必要があります。この例ではビルトインメッシュのみが使用され、それらはそれぞれ1つのサブメッシュしか持たないため、materials リストで1つのDefaultMaterialを指定するだけで十分です。

ModelNode ですので、関連するトランスフォーメーションを持ちます。平行移動を適用するには、position プロパティを使用します。また、eulerRotation プロパティを設定することで、モデルを回転させることもできます。円柱をプレートのように見せるには、scale プロパティを設定します。

カメラ

3Dシーンのコンテンツを2Dサーフェスに投影する方法を指定します。この例では、透視投影を行うPerspectiveCameraOrthographicCamera 。正射投影も可能です。カメラのデフォルトの向きは、前方ベクトルが負のZ軸、上方ベクトルが正のY軸を向いています。この例では、カメラをZ軸上で300まで戻します。さらに、Y軸を少し上に動かし、X軸を中心に少し回転させて少し下向きにします。

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

ライト

シーン内のモデルを見るためには、シーンにも光源が必要です。DirectionalLight 、これはある方向から照らす遠くの太陽のようなものと考えることができ、シーンに追加します。他にも、SpotLightPointLight という2つの光源があります。Qt Quick 3D - Lights Example をご覧ください。

DirectionalLight {
    eulerRotation.x: -30
    eulerRotation.y: -70
}

アニメーション

最後に、球体をアニメーションさせます。y コンポーネントにSequentialAnimation を適用し、球体を上下に無限に動かします。

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
    }
}

これらのパーツを組み合わせて、3Dシーンをレンダリングします。この例では、Qt Quick 3Dの基本的な機能の一部にしか触れていません。さらなる例については、例のページをご覧ください。

サンプルプロジェクト @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.