candlewick 0.1.0
A renderer
Loading...
Searching...
No Matches
CameraControls.h
Go to the documentation of this file.
1#pragma once
2
3#include "Camera.h"
4
5namespace candlewick {
6
7namespace camera_util {
8
13
15 inline void localRotateXAroundOrigin(Camera &camera, Radf angle) {
16 float c, s;
17 c = std::cos(angle);
18 s = std::sin(angle);
19 Mat3f R;
20 R << 1., 0, 0, //
21 0, c, -s, //
22 0, s, +c;
23 camera.view.linear().applyOnTheLeft(R);
24 }
25
26 void rotateAroundPoint(Camera &camera, const Mat3f &R,
27 const Float3 &p = Float3::Zero());
28
30 inline void rotateZAroundPoint(Camera &camera, Radf angle, const Float3 &p) {
31 float c, s;
32 c = std::cos(angle);
33 s = std::sin(angle);
34 Mat3f R;
35 R << c, -s, 0., //
36 s, +c, 0., //
37 0., 0., 1.;
38 rotateAroundPoint(camera, R, p);
39 }
40
41 inline void localTranslate(Camera &camera, const Float3 &tr) {
42 camera.view.translation() += tr;
43 }
44
45 inline void localTranslateX(Camera &camera, float step) {
46 camera.view(0, 3) += step;
47 }
48
49 inline void localTranslateZ(Camera &camera, float step) {
50 camera.view(2, 3) += step;
51 }
52
53 inline void worldTranslate(Camera &camera, const Float3 &tr) {
54 camera.view.translate(-tr);
55 }
56
57 inline void worldTranslateZ(Camera &camera, float step) {
58 worldTranslate(camera, {0, 0, step});
59 }
60
61 inline void setWorldPosition(Camera &camera, const Float3 &pos) {
62 auto Rt = camera.view.linear();
63 camera.view.translation() = -Rt * pos;
64 }
65
66} // namespace camera_util
67
70 Float3 target{0.f, 0.f, 0.f};
71
72 static constexpr bool DEFAULT_Y_INVERT = false;
73
74 operator Camera &() { return camera; }
75
76 operator const Camera &() const { return camera; }
77
80 CylindricalCamera(const Camera &cam) : camera{cam} {}
81
82 CylindricalCamera &lookAt(const Float3 &eye, const Float3 &t) {
83 target = t;
85 return *this;
86 }
87
89 target = t;
90 camera.view = ::candlewick::lookAt(camera.position(), target);
91 return *this;
92 }
93
95 target += tr;
97 return *this;
98 }
99
101 target += camera.transformVector(tr);
103 return *this;
104 }
105
106 CylindricalCamera &dolly(float height) { return translate({0, 0, height}); }
107
110 return *this;
111 }
112
113 CylindricalCamera &viewportDrag(Float2 step, float rotSensitivity,
114 float panSensitivity,
115 bool yinvert = DEFAULT_Y_INVERT) {
116 const float rotStep = step.x() * rotSensitivity;
117 const float panStep = step.y() * panSensitivity;
118 float ystep = yinvert ? -panStep : panStep;
119 return dolly(ystep).orbit(Rad{rotStep});
120 }
121
122 CylindricalCamera &pan(Float2 step, float sensitivity);
123
124 CylindricalCamera &moveInOut(float scale, float offset);
125};
126
128
129} // namespace candlewick
Rad< float > Radf
Definition math_types.h:125
Definition CameraControls.h:7
void worldTranslateZ(Camera &camera, float step)
Definition CameraControls.h:57
void localRotateXAroundOrigin(Camera &camera, Radf angle)
Rotate around the origin in the local X-axis.
Definition CameraControls.h:15
void setWorldPosition(Camera &camera, const Float3 &pos)
Definition CameraControls.h:61
void localTranslateZ(Camera &camera, float step)
Definition CameraControls.h:49
void rotateZAroundPoint(Camera &camera, Radf angle, const Float3 &p)
Rotate the camera around the center by a given increment.
Definition CameraControls.h:30
void worldTranslate(Camera &camera, const Float3 &tr)
Definition CameraControls.h:53
void rotateAroundPoint(Camera &camera, const Mat3f &R, const Float3 &p=Float3::Zero())
void localTranslateX(Camera &camera, float step)
Definition CameraControls.h:45
void localTranslate(Camera &camera, const Float3 &tr)
Definition CameraControls.h:41
Definition Camera.h:8
Eigen::Vector3f Float3
Definition math_types.h:8
Eigen::Matrix3f Mat3f
Definition math_types.h:10
Mat4f lookAt(const Float3 &eye, const Float3 &center, const Float3 &up=Float3::UnitZ())
Eigen::Vector2f Float2
Definition math_types.h:7
The main way of using a camera to render things.
Definition Camera.h:19
Eigen::Isometry3f view
Camera view matrix
Definition Camera.h:23
CylindricalCamera()
Definition CameraControls.h:78
CylindricalCamera & moveInOut(float scale, float offset)
CylindricalCamera & lookAt(const Float3 &eye, const Float3 &t)
Definition CameraControls.h:82
CylindricalCamera & pan(Float2 step, float sensitivity)
CylindricalCamera & translate(const Float3 &tr)
Definition CameraControls.h:94
CylindricalCamera & orbit(Radf angle)
Definition CameraControls.h:108
static constexpr bool DEFAULT_Y_INVERT
Definition CameraControls.h:72
Camera camera
Definition CameraControls.h:69
CylindricalCamera & dolly(float height)
Definition CameraControls.h:106
CylindricalCamera & localTranslate(const Float3 &tr)
Definition CameraControls.h:100
Float3 target
Definition CameraControls.h:70
CylindricalCamera & lookAt1(const Float3 &t)
Definition CameraControls.h:88
CylindricalCamera(const Camera &cam)
Constructor which copies a given camera's state.
Definition CameraControls.h:80
CylindricalCamera & viewportDrag(Float2 step, float rotSensitivity, float panSensitivity, bool yinvert=DEFAULT_Y_INVERT)
Definition CameraControls.h:113
Strong type for floating-point variables representing angles (in radians).
Definition math_types.h:58