Qt 3D: Einfaches C++ Beispiel
Eine C++-Anwendung, die demonstriert, wie man eine Szene in Qt 3D rendert.
Simple demonstriert, wie eine Szene in Qt 3D gerendert wird.
Ausführen des Beispiels
Zum Ausführen des Beispiels von Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
Einrichten der Szene
Wir richten die Szene in der Datei main.cpp ein.
Um die Klassen und Funktionen in den Modulen Q3D Core, Q3D Render, Qt 3D Input und Qt 3D Extras verwenden zu können, müssen wir die Klassen einbinden:
#include <Qt3DCore/QEntity> #include <Qt3DRender/QCamera> #include <Qt3DRender/QCameraLens> #include <Qt3DCore/QTransform> #include <Qt3DCore/QAspectEngine> #include <Qt3DInput/QInputAspect> #include <Qt3DRender/QRenderAspect> #include <Qt3DRender/QGeometryRenderer> #include <Qt3DExtras/QForwardRenderer> #include <Qt3DExtras/QPhongMaterial> #include <Qt3DExtras/QSphereMesh> #include <Qt3DExtras/QTorusMesh>
Zunächst richten wir die Szene ein und geben ihre Root-Entität an:
Wir geben das Material an, das für das Phong-Rendering verwendet werden soll:
Qt3DRender::QMaterial *material = new Qt3DExtras::QPhongMaterial(rootEntity);
Die Root-Entität ist nur eine leere Hülle und ihr Verhalten wird durch die Komponenten definiert, die sie referenziert. Wir spezifizieren die Torus-Entität und ihre Mesh-, Transform- und Materialkomponenten:
Qt3DCore::QEntity *torusEntity = new Qt3DCore::QEntity(rootEntity); Qt3DExtras::QTorusMesh *torusMesh = new Qt3DExtras::QTorusMesh; torusMesh->setRadius(5); torusMesh->setMinorRadius(1); torusMesh->setRings(100); torusMesh->setSlices(20); Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform; torusTransform->setScale3D(QVector3D(1.5, 1, 0.5)); torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 45.0f)); torusEntity->addComponent(torusMesh); torusEntity->addComponent(torusTransform); torusEntity->addComponent(material);
Wir geben auch eine Kugel-Entität und ihre Komponenten an:
Qt3DCore::QEntity *sphereEntity = new Qt3DCore::QEntity(rootEntity); Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh; sphereMesh->setRadius(3); sphereMesh->setGenerateTangents(true); Qt3DCore::QTransform *sphereTransform = new Qt3DCore::QTransform; OrbitTransformController *controller = new OrbitTransformController(sphereTransform); controller->setTarget(sphereTransform); controller->setRadius(20.0f); QPropertyAnimation *sphereRotateTransformAnimation = new QPropertyAnimation(sphereTransform); sphereRotateTransformAnimation->setTargetObject(controller); sphereRotateTransformAnimation->setPropertyName("angle"); sphereRotateTransformAnimation->setStartValue(QVariant::fromValue(0)); sphereRotateTransformAnimation->setEndValue(QVariant::fromValue(360)); sphereRotateTransformAnimation->setDuration(10000); sphereRotateTransformAnimation->setLoopCount(-1); sphereRotateTransformAnimation->start(); sphereEntity->addComponent(sphereMesh); sphereEntity->addComponent(sphereTransform); sphereEntity->addComponent(material);
Wir verwenden eine Eigenschaftsanimation, um die Kugeltransformation zu animieren.
Schließlich initialisieren wir eine Qt GUI Anwendung, die ein Qt 3D Fenster verwendet:
int main(int argc, char* argv[]) { QGuiApplication app(argc, argv); Qt3DExtras::Qt3DWindow view; Qt3DCore::QEntity *scene = createScene(); // Camera Qt3DRender::QCamera *camera = view.camera(); camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f); camera->setPosition(QVector3D(0, 0, 40.0f)); camera->setViewCenter(QVector3D(0, 0, 0)); // For camera controls Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(scene); camController->setLinearSpeed( 50.0f ); camController->setLookSpeed( 180.0f ); camController->setCamera(camera); view.setRootEntity(scene); view.show(); return app.exec(); }
© 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.