Apollo  6.0
Open source self driving car software
abstract_camera.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2018 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 #pragma once
18 
19 #include <QtGui/QMatrix4x4>
20 
22  public:
24 
25  static const QVector3D UP;
26  static float Radians(float degrees) {
27  return degrees * static_cast<float>(0.01745329251994329576923690768489);
28  }
29 
30  static float Degrees(float radians) {
31  return radians * static_cast<float>(57.295779513082320876798154814105);
32  }
33 
34  static QMatrix4x4 YawPitchRoll(float yawInDegrees, float picthInDegrees,
35  float rollInDegrees);
36 
37  AbstractCamera(void);
38  virtual ~AbstractCamera() {}
39 
40  virtual void UpdateWorld(void) = 0; // update modelview
41 
42  CameraMode camera_mode(void) const { return camera_mode_; }
44 
45  const QMatrix4x4& projection_matrix(void) const { return projection_mat_; }
46  const QMatrix4x4& model_view_matrix(void) const { return model_view_mat_; }
47 
48  float near_plane_height(void) const { return near_plane_height_; }
49  float near_plane_width(void) const { return near_plane_width_; }
50  void set_near_plane_height(const float npHeight) {
51  near_plane_height_ = npHeight;
52  }
53  void set_near_plane_width(const float npWidth) {
54  near_plane_width_ = npWidth;
55  }
56 
57  float fov(void) const { return fov_; }
58  void set_fov(const float fovInDegrees) { fov_ = fovInDegrees; }
59 
60  float near_plane(void) const { return near_plane_; }
61  void set_near_plane(float n) { near_plane_ = n; }
62 
63  float far_plane(void) const { return far_plane_; }
64  void set_far_plane(float f) { far_plane_ = f; }
65 
66  void SetUpProjection(float fovInDegrees, float nearPlaneWidth,
67  float nearPlaneHeight, float near = 0.1f,
68  float far = 1000.f) {
69  fov_ = fovInDegrees;
70  near_plane_width_ = nearPlaneWidth;
71  near_plane_height_ = nearPlaneHeight;
72  near_plane_ = near;
73  far_plane_ = far;
74  }
75 
76  float x(void) const { return position_[0]; }
77  float y(void) const { return position_[1]; }
78  float z(void) const { return position_[2]; }
79 
80  void set_x(float x) { position_[0] = x; }
81  void set_y(float y) { position_[1] = y; }
82  void set_z(float z) { position_[2] = z; }
83 
84  const QVector3D& position(void) const { return position_; }
85  void set_position(const QVector3D& pos) { position_ = pos; }
86  void set_position(float x, float y, float z) {
87  position_.setX(x);
88  position_.setY(y);
89  position_.setZ(z);
90  }
91 
92  float yaw(void) const { return attitude_[0]; }
93  void set_yaw(float yInDegrees) { attitude_[0] = yInDegrees; }
94 
95  float pitch(void) const { return attitude_[1]; }
96  void set_pitch(float pInDegrees) { attitude_[1] = pInDegrees; }
97 
98  float roll(void) const { return attitude_[2]; }
99  void set_roll(float rInDegrees) { attitude_[2] = rInDegrees; }
100 
101  const QVector3D& attitude(void) const { return attitude_; }
102 
103  void SetAttitude(float yawInDegrees, float pitchInDegrees,
104  float rollInDegrees) {
105  attitude_[0] = yawInDegrees;
106  attitude_[1] = pitchInDegrees;
107  attitude_[2] = rollInDegrees;
108  }
109 
110  const QVector3D& look(void) const { return look_; }
111 
112  void UpdateProjection(void) {
113  projection_mat_.setToIdentity();
117  } else {
119  -near_plane_height_ / 2.0f,
120  near_plane_height_ / 2.0f, 0.0f, 0.0f);
121  }
122  }
123 
124  void Update(void) {
125  UpdateWorld();
127  }
128 
129  protected:
131 
132  float fov_; // in degrees
133 
136 
137  float near_plane_; // in look direction
138  float far_plane_; // in look direction
139 
140  QVector3D position_; // x, y, z
141  QVector3D attitude_; // 0:yaw, 1:pitch, 2:roll , in degrees
142 
143  QVector3D look_;
144  QVector3D up_;
145  QVector3D right_;
146 
147  QMatrix4x4 projection_mat_;
148  QMatrix4x4 model_view_mat_;
149 };
float near_plane_
Definition: abstract_camera.h:137
static float Degrees(float radians)
Definition: abstract_camera.h:30
float near_plane_height_
Definition: abstract_camera.h:135
void set_near_plane(float n)
Definition: abstract_camera.h:61
float pitch(void) const
Definition: abstract_camera.h:95
float x(void) const
Definition: abstract_camera.h:76
float far_plane(void) const
Definition: abstract_camera.h:63
const QMatrix4x4 & model_view_matrix(void) const
Definition: abstract_camera.h:46
float roll(void) const
Definition: abstract_camera.h:98
static const QVector3D UP
Definition: abstract_camera.h:25
QMatrix4x4 projection_mat_
Definition: abstract_camera.h:147
const QVector3D & position(void) const
Definition: abstract_camera.h:84
void set_x(float x)
Definition: abstract_camera.h:80
Definition: abstract_camera.h:21
void set_position(const QVector3D &pos)
Definition: abstract_camera.h:85
QVector3D look_
Definition: abstract_camera.h:143
void set_pitch(float pInDegrees)
Definition: abstract_camera.h:96
void set_camera_mode(CameraMode cm)
Definition: abstract_camera.h:43
CameraMode camera_mode_
Definition: abstract_camera.h:130
float fov(void) const
Definition: abstract_camera.h:57
float fov_
Definition: abstract_camera.h:132
float near_plane(void) const
Definition: abstract_camera.h:60
const QVector3D & look(void) const
Definition: abstract_camera.h:110
const QMatrix4x4 & projection_matrix(void) const
Definition: abstract_camera.h:45
void UpdateProjection(void)
Definition: abstract_camera.h:112
float near_plane_height(void) const
Definition: abstract_camera.h:48
QMatrix4x4 model_view_mat_
Definition: abstract_camera.h:148
static QMatrix4x4 YawPitchRoll(float yawInDegrees, float picthInDegrees, float rollInDegrees)
AbstractCamera(void)
QVector3D up_
Definition: abstract_camera.h:144
CameraMode
Definition: abstract_camera.h:23
CameraMode camera_mode(void) const
Definition: abstract_camera.h:42
void set_z(float z)
Definition: abstract_camera.h:82
void set_position(float x, float y, float z)
Definition: abstract_camera.h:86
static float Radians(float degrees)
Definition: abstract_camera.h:26
QVector3D right_
Definition: abstract_camera.h:145
void set_near_plane_height(const float npHeight)
Definition: abstract_camera.h:50
float near_plane_width(void) const
Definition: abstract_camera.h:49
float far_plane_
Definition: abstract_camera.h:138
float near_plane_width_
Definition: abstract_camera.h:134
void set_far_plane(float f)
Definition: abstract_camera.h:64
void Update(void)
Definition: abstract_camera.h:124
QVector3D attitude_
Definition: abstract_camera.h:141
const QVector3D & attitude(void) const
Definition: abstract_camera.h:101
virtual void UpdateWorld(void)=0
QVector3D position_
Definition: abstract_camera.h:140
void set_y(float y)
Definition: abstract_camera.h:81
void set_fov(const float fovInDegrees)
Definition: abstract_camera.h:58
void SetAttitude(float yawInDegrees, float pitchInDegrees, float rollInDegrees)
Definition: abstract_camera.h:103
float z(void) const
Definition: abstract_camera.h:78
void set_near_plane_width(const float npWidth)
Definition: abstract_camera.h:53
float yaw(void) const
Definition: abstract_camera.h:92
float y(void) const
Definition: abstract_camera.h:77
void SetUpProjection(float fovInDegrees, float nearPlaneWidth, float nearPlaneHeight, float near=0.1f, float far=1000.f)
Definition: abstract_camera.h:66
void set_yaw(float yInDegrees)
Definition: abstract_camera.h:93
virtual ~AbstractCamera()
Definition: abstract_camera.h:38
void set_roll(float rInDegrees)
Definition: abstract_camera.h:99