summaryrefslogtreecommitdiffstats
path: root/examples/qt3d/simple-cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/qt3d/simple-cpp')
-rw-r--r--examples/qt3d/simple-cpp/main.cpp108
-rw-r--r--examples/qt3d/simple-cpp/orbittransformcontroller.cpp102
-rw-r--r--examples/qt3d/simple-cpp/orbittransformcontroller.h86
-rw-r--r--examples/qt3d/simple-cpp/simple-cpp.pro6
4 files changed, 212 insertions, 90 deletions
diff --git a/examples/qt3d/simple-cpp/main.cpp b/examples/qt3d/simple-cpp/main.cpp
index ac4525b02..990fd36bb 100644
--- a/examples/qt3d/simple-cpp/main.cpp
+++ b/examples/qt3d/simple-cpp/main.cpp
@@ -51,98 +51,16 @@
#include <Qt3DRender/QCylinderMesh>
#include <Qt3DRender/QSphereMesh>
#include <Qt3DRender/QTorusMesh>
-#include <Qt3DRender/QWindow>
#include <QPropertyAnimation>
-class OrbitTransformController : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(Qt3DCore::QTransform* target READ target WRITE setTarget NOTIFY targetChanged)
- Q_PROPERTY(float radius READ radius WRITE setRadius NOTIFY radiusChanged)
- Q_PROPERTY(float angle READ angle WRITE setAngle NOTIFY angleChanged)
-
-public:
- OrbitTransformController(QObject *parent = 0)
- : QObject(parent)
- , m_target(Q_NULLPTR)
- , m_matrix()
- , m_radius(1.0f)
- , m_angle(0.0f)
- {
- }
-
- void setTarget(Qt3DCore::QTransform *target)
- {
- if (m_target != target) {
- m_target = target;
- emit targetChanged();
- }
- }
-
- Qt3DCore::QTransform *target() const { return m_target; }
-
- void setRadius(float radius)
- {
- if (!qFuzzyCompare(radius, m_radius)) {
- m_radius = radius;
- updateMatrix();
- emit radiusChanged();
- }
- }
-
- float radius() const { return m_radius; }
-
- void setAngle(float angle)
- {
- if (!qFuzzyCompare(angle, m_angle)) {
- m_angle = angle;
- updateMatrix();
- emit angleChanged();
- }
- }
-
- float angle() const { return m_angle; }
-
-signals:
- void targetChanged();
- void radiusChanged();
- void angleChanged();
-
-protected:
- void updateMatrix()
- {
- m_matrix.setToIdentity();
- m_matrix.rotate(m_angle, QVector3D(0.0f, 1.0f, 0.0f));
- m_matrix.translate(m_radius, 0.0f, 0.0f);
- m_target->setMatrix(m_matrix);
- }
-
-private:
- Qt3DCore::QTransform *m_target;
- QMatrix4x4 m_matrix;
- float m_radius;
- float m_angle;
-};
+#include "qt3dwindow.h"
+#include "orbittransformcontroller.h"
-int main(int argc, char* argv[])
+Qt3DCore::QEntity *createScene()
{
- QGuiApplication app(argc, argv);
- Qt3DRender::QWindow view;
- Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect;
- view.registerAspect(input);
-
// Root entity
- Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();
-
- // Camera
- Qt3DCore::QCamera *cameraEntity = view.defaultCamera();
-
- cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
- cameraEntity->setPosition(QVector3D(0, 0, 40.0f));
- cameraEntity->setUpVector(QVector3D(0, 1, 0));
- cameraEntity->setViewCenter(QVector3D(0, 0, 0));
- input->setCamera(cameraEntity);
+ Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity;
// Material
Qt3DRender::QMaterial *material = new Qt3DRender::QPhongMaterial(rootEntity);
@@ -186,10 +104,22 @@ int main(int argc, char* argv[])
sphereEntity->addComponent(sphereTransform);
sphereEntity->addComponent(material);
- view.setRootEntity(rootEntity);
+ return rootEntity;
+}
+
+int main(int argc, char* argv[])
+{
+ QGuiApplication app(argc, argv);
+ Qt3DWindow view;
+
+ // Camera
+ Qt3DCore::QCamera *camera = view.camera();
+ camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
+ camera->setPosition(QVector3D(0, 0, 40.0f));
+
+ Qt3DCore::QEntity *scene = createScene();
+ view.setRootEntity(scene);
view.show();
return app.exec();
}
-
-#include "main.moc"
diff --git a/examples/qt3d/simple-cpp/orbittransformcontroller.cpp b/examples/qt3d/simple-cpp/orbittransformcontroller.cpp
new file mode 100644
index 000000000..a7d66837b
--- /dev/null
+++ b/examples/qt3d/simple-cpp/orbittransformcontroller.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
+** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "orbittransformcontroller.h"
+
+#include <Qt3DCore/qtransform.h>
+
+QT_BEGIN_NAMESPACE
+
+OrbitTransformController::OrbitTransformController(QObject *parent)
+ : QObject(parent)
+ , m_target(Q_NULLPTR)
+ , m_matrix()
+ , m_radius(1.0f)
+ , m_angle(0.0f)
+{
+}
+
+void OrbitTransformController::setTarget(Qt3DCore::QTransform *target)
+{
+ if (m_target != target) {
+ m_target = target;
+ emit targetChanged();
+ }
+}
+
+Qt3DCore::QTransform *OrbitTransformController::target() const
+{
+ return m_target;
+}
+
+void OrbitTransformController::setRadius(float radius)
+{
+ if (!qFuzzyCompare(radius, m_radius)) {
+ m_radius = radius;
+ updateMatrix();
+ emit radiusChanged();
+ }
+}
+
+float OrbitTransformController::radius() const
+{
+ return m_radius;
+}
+
+void OrbitTransformController::setAngle(float angle)
+{
+ if (!qFuzzyCompare(angle, m_angle)) {
+ m_angle = angle;
+ updateMatrix();
+ emit angleChanged();
+ }
+}
+
+float OrbitTransformController::angle() const
+{
+ return m_angle;
+}
+
+void OrbitTransformController::updateMatrix()
+{
+ m_matrix.setToIdentity();
+ m_matrix.rotate(m_angle, QVector3D(0.0f, 1.0f, 0.0f));
+ m_matrix.translate(m_radius, 0.0f, 0.0f);
+ m_target->setMatrix(m_matrix);
+}
+
+QT_END_NAMESPACE
diff --git a/examples/qt3d/simple-cpp/orbittransformcontroller.h b/examples/qt3d/simple-cpp/orbittransformcontroller.h
new file mode 100644
index 000000000..87171c8ed
--- /dev/null
+++ b/examples/qt3d/simple-cpp/orbittransformcontroller.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
+** Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ORBITTRANSFORMCONTROLLER_H
+#define ORBITTRANSFORMCONTROLLER_H
+
+#include <QObject>
+#include <QMatrix4x4>
+
+QT_BEGIN_NAMESPACE
+
+namespace Qt3DCore {
+class QTransform;
+}
+
+class OrbitTransformController : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(Qt3DCore::QTransform* target READ target WRITE setTarget NOTIFY targetChanged)
+ Q_PROPERTY(float radius READ radius WRITE setRadius NOTIFY radiusChanged)
+ Q_PROPERTY(float angle READ angle WRITE setAngle NOTIFY angleChanged)
+
+public:
+ OrbitTransformController(QObject *parent = 0);
+
+ void setTarget(Qt3DCore::QTransform *target);
+ Qt3DCore::QTransform *target() const;
+
+ void setRadius(float radius);
+ float radius() const;
+
+ void setAngle(float angle);
+ float angle() const;
+
+signals:
+ void targetChanged();
+ void radiusChanged();
+ void angleChanged();
+
+protected:
+ void updateMatrix();
+
+private:
+ Qt3DCore::QTransform *m_target;
+ QMatrix4x4 m_matrix;
+ float m_radius;
+ float m_angle;
+};
+
+QT_END_NAMESPACE
+
+#endif // ORBITTRANSFORMCONTROLLER_H
diff --git a/examples/qt3d/simple-cpp/simple-cpp.pro b/examples/qt3d/simple-cpp/simple-cpp.pro
index e562663bd..db0d0d972 100644
--- a/examples/qt3d/simple-cpp/simple-cpp.pro
+++ b/examples/qt3d/simple-cpp/simple-cpp.pro
@@ -5,4 +5,8 @@
QT += 3dcore 3drender 3dinput
SOURCES += \
- main.cpp
+ main.cpp \
+ orbittransformcontroller.cpp
+
+HEADERS += \
+ orbittransformcontroller.h