Qt Quick 3D - はじめに

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

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

シーンのセットアップ

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

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

import QtQuick
import QtQuick3D

3Dシーンを描くには、Qt Quickシーン内に3Dビューポートが必要です。これはView3D クラスによって提供され、ここでシーンを定義します。Qt Quick 3D - View3D Exampleを参照してください。

まず、シーンの環境を定義します。この例では、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 として、組み込みメッシュをロードします。モデルに色を与えるには、まずマテリアルを指定する必要があります。この場合、赤と青の拡散色を持つDefaultMaterialPrincipledMaterial CustomMaterialQt 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

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。