1/****************************************************************************
2**
3** Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the Qt3D module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#include "qfirstpersoncameracontroller.h"
38
39#include <Qt3DRender/QCamera>
40
41QT_BEGIN_NAMESPACE
42
43namespace Qt3DExtras {
44
45/*!
46 \class Qt3DExtras::QFirstPersonCameraController
47 \ingroup qt3d-extras-cameracontrollers
48 \brief The QFirstPersonCameraController class allows controlling the scene camera
49 from the first person perspective.
50 \inmodule Qt3DExtras
51 \since 5.7
52 \inherits Qt3DCore::QEntity
53
54 The controls are:
55 \table
56 \header
57 \li Input
58 \li Action
59 \row
60 \li Left mouse button
61 \li While the left mouse button is pressed, mouse movement along x-axis pans the camera and
62 movement along y-axis tilts it.
63 \row
64 \li Mouse scroll wheel
65 \li Zooms the camera in and out without changing the view center.
66 \row
67 \li Shift key
68 \li Turns the fine motion control active while pressed. Makes mouse pan and tilt less
69 sensitive.
70 \row
71 \li Arrow keys
72 \li Move the camera horizontally relative to camera viewport.
73 \row
74 \li Page up and page down keys
75 \li Move the camera vertically relative to camera viewport.
76 \row
77 \li Escape
78 \li Moves the camera so that entire scene is visible in the camera viewport.
79 \endtable
80*/
81
82QFirstPersonCameraController::QFirstPersonCameraController(Qt3DCore::QNode *parent)
83 : QAbstractCameraController(parent)
84{
85}
86
87QFirstPersonCameraController::~QFirstPersonCameraController()
88{
89}
90
91
92void QFirstPersonCameraController::moveCamera(const QAbstractCameraController::InputState &state, float dt)
93{
94 Qt3DRender::QCamera *theCamera = camera();
95
96 if (theCamera == nullptr)
97 return;
98
99 theCamera->translate(vLocal: QVector3D(state.txAxisValue * linearSpeed(),
100 state.tyAxisValue * linearSpeed(),
101 state.tzAxisValue * linearSpeed()) * dt);
102 if (state.leftMouseButtonActive) {
103 float theLookSpeed = lookSpeed();
104 if (state.shiftKeyActive) {
105 theLookSpeed *= 0.2f;
106 }
107
108 const QVector3D upVector(0.0f, 1.0f, 0.0f);
109
110 theCamera->pan(angle: state.rxAxisValue * theLookSpeed * dt, axis: upVector);
111 theCamera->tilt(angle: state.ryAxisValue * theLookSpeed * dt);
112 }
113}
114
115} // Qt3DExtras
116
117QT_END_NAMESPACE
118
119#include "moc_qfirstpersoncameracontroller.cpp"
120

source code of qt3d/src/extras/defaults/qfirstpersoncameracontroller.cpp