C

main.cpp Example File

scenemanip/main.cpp
/**************************************************************************** ** ** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt 3D Studio. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/
#include <QGuiApplication> #include <QQmlContext> #include <QQuickView> #include <QTime> #include <QTimer> #include <Q3DSPresentation> #include <private/q3dsengine_p.h> #include <private/q3dsuippresentation_p.h> class SceneManipulator : public QObject { Q_OBJECT public slots: void doIt(Q3DSPresentation *pres); private: QTimer m_timer; int m_dynCount = 0; }; void SceneManipulator::doIt(Q3DSPresentation *pres) { Q3DSEngine *engine = pres->engine(); Q3DSUipPresentation *presentation = engine->presentation(); Q3DSSlide *slide1 = static_cast<Q3DSSlide *>(presentation->masterSlide()->firstChild()); Q3DSModelNode *prim = presentation->newObject<Q3DSModelNode>(QByteArrayLiteral("dynmodel") + QByteArray::number(m_dynCount)); switch (qrand() % 4) { case 0: prim->setMesh(QLatin1String("#Cube")); break; case 1: prim->setMesh(QLatin1String("#Sphere")); break; case 2: prim->setMesh(QLatin1String("#Cylinder")); break; case 3: prim->setMesh(QLatin1String("#Cone")); break; } Q3DSDefaultMaterial *primMat = presentation->newObject<Q3DSDefaultMaterial>(QByteArrayLiteral("dynmat") + QByteArray::number(m_dynCount)); prim->appendChildNode(primMat); prim->setPosition(QVector3D((qrand() % 600) - 300, (qrand() % 600) - 300, 0)); prim->setRotation(QVector3D(30, 45, 0)); const float scale = ((qrand() % 100) + 1) / 100.0f; prim->setScale(QVector3D(scale, scale, scale)); slide1->addObject(primMat); slide1->addObject(prim); ++m_dynCount; // go live presentation->objectByName<Q3DSLayerNode>(QLatin1String("Layer"))->appendChildNode(prim); // Animations cannot be managed dynamically for now. However, nothing // prevents us from changing properties as we see fit: m_timer.setInterval(30); connect(&m_timer, &QTimer::timeout, this, [prim] { QVector3D v = prim->position(); v.setX(v.x() - 1); QVector3D r = prim->rotation(); r.setY(r.y() + 1); prim->notifyPropertyChanges({ prim->setPosition(v), prim->setRotation(r) }); }); m_timer.start(); } int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); qputenv("QSG_INFO", "1"); QGuiApplication app(argc, argv); qsrand(QTime::currentTime().msec()); // Use the ideal format (i.e. OpenGL version and profile) recommended by // the Qt 3D Studio runtime. Without this the format set on the QQuickView // would be used instead. QSurfaceFormat::setDefaultFormat(Q3DS::surfaceFormat()); QQuickView viewer; SceneManipulator manip; viewer.rootContext()->setContextProperty("sceneManipulator", &manip); viewer.setSource(QUrl("qrc:/main.qml")); viewer.setTitle(QStringLiteral("Qt 3D Studio Example")); viewer.setResizeMode(QQuickView::SizeRootObjectToView); viewer.resize(1280, 720); viewer.show(); return app.exec(); } #include "main.moc"

Available under certain Qt licenses.
Find out more.