// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // Copyright (C) 2018 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Qt3DRender; int main(int argc, char **argv) { QGuiApplication app(argc, argv); Qt3DExtras::Qt3DWindow view; // Root entity Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity(); // Camera Qt3DRender::QCamera *camera = view.camera(); camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f); camera->setPosition(QVector3D(0, 0, 20.0f)); camera->setUpVector(QVector3D(0, 1, 0)); camera->setViewCenter(QVector3D(0, 0, 0)); // For camera controls Qt3DExtras::QOrbitCameraController *cameraController = new Qt3DExtras::QOrbitCameraController(rootEntity); cameraController->setCamera(camera); // Cylinder shape data Qt3DExtras::QCylinderMesh *mesh = new Qt3DExtras::QCylinderMesh(); mesh->setRadius(1); mesh->setLength(3); mesh->setRings(100); mesh->setSlices(20); // Transform for cylinder Qt3DCore::QTransform *transform = new Qt3DCore::QTransform; transform->setScale(1.5f); transform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), 45.0f)); // Material Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial(rootEntity); material->setDiffuse(Qt::red); // Cylinder Qt3DCore::QEntity *cylinder = new Qt3DCore::QEntity(rootEntity); cylinder->addComponent(mesh); cylinder->addComponent(transform); cylinder->addComponent(material); QTimer *timer = new QTimer(rootEntity); QObject::connect(timer, &QTimer::timeout, [=](){ for (int i = 0; i < 2; i++) { auto *dummy = new Qt3DCore::QNode(rootEntity); auto *dummy2 = new Qt3DCore::QNode(dummy); auto *layerFilter = new QLayerFilter(dummy2); auto *layer = new QLayer(); layerFilter->addLayer(layer); cylinder->addComponent(layer); } }); timer->start(1000); QTimer *timer2 = new QTimer(rootEntity); QObject::connect(timer2, &QTimer::timeout, [](){ QThread::msleep(100); }); timer2->start(100); // Set root object of the scene view.setRootEntity(rootEntity); view.show(); return app.exec(); }