1// Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qfirstpersoncameracontroller.h"
5
6#include <Qt3DRender/QCamera>
7
8QT_BEGIN_NAMESPACE
9
10namespace Qt3DExtras {
11
12/*!
13 \class Qt3DExtras::QFirstPersonCameraController
14 \ingroup qt3d-extras-cameracontrollers
15 \brief The QFirstPersonCameraController class allows controlling the scene camera
16 from the first person perspective.
17 \inmodule Qt3DExtras
18 \since 5.7
19 \inherits Qt3DCore::QEntity
20
21 The controls are:
22 \table
23 \header
24 \li Input
25 \li Action
26 \row
27 \li Left mouse button
28 \li While the left mouse button is pressed, mouse movement along x-axis pans the camera and
29 movement along y-axis tilts it.
30 \row
31 \li Mouse scroll wheel
32 \li Zooms the camera in and out without changing the view center.
33 \row
34 \li Shift key
35 \li Turns the fine motion control active while pressed. Makes mouse pan and tilt less
36 sensitive.
37 \row
38 \li Arrow keys
39 \li Move the camera horizontally relative to camera viewport.
40 \row
41 \li Page up and page down keys
42 \li Move the camera vertically relative to camera viewport.
43 \row
44 \li Escape
45 \li Moves the camera so that entire scene is visible in the camera viewport.
46 \endtable
47*/
48
49QFirstPersonCameraController::QFirstPersonCameraController(Qt3DCore::QNode *parent)
50 : QAbstractCameraController(parent)
51{
52}
53
54QFirstPersonCameraController::~QFirstPersonCameraController()
55{
56}
57
58
59void QFirstPersonCameraController::moveCamera(const QAbstractCameraController::InputState &state, float dt)
60{
61 Qt3DRender::QCamera *theCamera = camera();
62
63 if (theCamera == nullptr)
64 return;
65
66 theCamera->translate(vLocal: QVector3D(state.txAxisValue * linearSpeed(),
67 state.tyAxisValue * linearSpeed(),
68 state.tzAxisValue * linearSpeed()) * dt);
69 if (state.leftMouseButtonActive) {
70 float theLookSpeed = lookSpeed();
71 if (state.shiftKeyActive) {
72 theLookSpeed *= 0.2f;
73 }
74
75 const QVector3D upVector(0.0f, 1.0f, 0.0f);
76
77 theCamera->pan(angle: state.rxAxisValue * theLookSpeed * dt, axis: upVector);
78 theCamera->tilt(angle: state.ryAxisValue * theLookSpeed * dt);
79 }
80}
81
82} // Qt3DExtras
83
84QT_END_NAMESPACE
85
86#include "moc_qfirstpersoncameracontroller.cpp"
87

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