Apollo 11.0
自动驾驶开放平台
abstract_camera.h
浏览该文件的文档.
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>
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};
double f
float roll(void) const
float y(void) const
void set_x(float x)
void set_near_plane_width(const float npWidth)
void SetUpProjection(float fovInDegrees, float nearPlaneWidth, float nearPlaneHeight, float near=0.1f, float far=1000.f)
void set_roll(float rInDegrees)
CameraMode camera_mode_
const QVector3D & position(void) const
float near_plane_height(void) const
QMatrix4x4 model_view_mat_
void set_yaw(float yInDegrees)
float near_plane_width(void) const
float z(void) const
void set_position(const QVector3D &pos)
static float Degrees(float radians)
const QMatrix4x4 & model_view_matrix(void) const
static QMatrix4x4 YawPitchRoll(float yawInDegrees, float picthInDegrees, float rollInDegrees)
void UpdateProjection(void)
void set_pitch(float pInDegrees)
CameraMode camera_mode(void) const
void set_position(float x, float y, float z)
void set_near_plane(float n)
float pitch(void) const
void SetAttitude(float yawInDegrees, float pitchInDegrees, float rollInDegrees)
float x(void) const
const QMatrix4x4 & projection_matrix(void) const
static const QVector3D UP
void set_y(float y)
void set_camera_mode(CameraMode cm)
void set_fov(const float fovInDegrees)
QMatrix4x4 projection_mat_
static float Radians(float degrees)
float near_plane(void) const
const QVector3D & look(void) const
virtual ~AbstractCamera()
void set_near_plane_height(const float npHeight)
float fov(void) const
const QVector3D & attitude(void) const
virtual void UpdateWorld(void)=0
void set_z(float z)
void set_far_plane(float f)
float yaw(void) const
float far_plane(void) const