Qt 3 D学習の応用アーキテクチャ
3054 ワード
Qt 3 D自体はQWindow以外のモジュールに依存しないが,完全な機能を持つアプリケーションを開発するためには,C++実装はwidgetやQtQuick実装なしでQQQQuickkiewなしでは達成しにくい.QtQuickアプリケーションに基づいて,アプリケーションアーキテクチャは通常のqmlプログラムと同様に,qmlにScene 3 D要素を用いて3 dコンテンツを加えるだけでよい.Widgetアプリケーションでは、widget内にQWindowを作成し、QWindow内に図を描く必要があります.
main.cpp
main.qml
main.cpp
#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
QQuickView view;
view.resize(500, 500);
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:/main.qml"));
view.show();
return app.exec();
}
main.qml
import QtQuick 2.0
import QtQuick.Scene3D 2.0
Rectangle {
id: scene
anchors.fill: parent
color: "darkRed"
Scene3D {
id: scene3d
anchors.fill: parent
focus: true
aspects: "input"
AnimatedEntity {}
}
}
import Qt3D.Core 2.0
import Qt3D.Render 2.0
import QtQuick 2.0 as QQ2
Entity {
id: sceneRoot
Camera {
id: camera
projectionType: CameraLens.PerspectiveProjection
fieldOfView: 45
aspectRatio: 16/9
nearPlane : 0.1
farPlane : 1000.0
position: Qt.vector3d( 0.0, 0.0, -40.0 )
upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 )
}
Configuration {
controlledCamera: camera
}
components: [
FrameGraph {
activeFrameGraph: Viewport {
id: viewport
rect: Qt.rect(0.0, 0.0, 1.0, 1.0) // From Top Left
clearColor: "transparent"
CameraSelector {
id : cameraSelector
camera: camera
ClearBuffer {
buffers : ClearBuffer.ColorDepthBuffer
}
}
}
}
]
PhongMaterial {
id: material
}
TorusMesh {
id: torusMesh
radius: 5
minorRadius: 1
rings: 100
slices: 20
}
Transform {
id: torusTransform
Scale { scale3D: Qt.vector3d(1.5, 1, 0.5) }
Rotate {
angle: 45
axis: Qt.vector3d(1, 0, 0)
}
}
Entity {
id: torusEntity
components: [ torusMesh, material, torusTransform ]
}
SphereMesh {
id: sphereMesh
radius: 3
}
Transform {
id: sphereTransform
Translate {
translation: Qt.vector3d(20, 0, 0)
}
Rotate {
id: sphereRotation
axis: Qt.vector3d(0, 1, 0)
}
}
QQ2.NumberAnimation {
target: sphereRotation
property: "angle"
duration: 10000
from: 0
to: 360
loops: QQ2.Animation.Infinite
running: true
}
Entity {
id: sphereEntity
components: [ sphereMesh, material, sphereTransform ]
}
}