Apollo 11.0
自动驾驶开放平台
scene_viewer.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 <QtWidgets/QOpenGLWidget>
20#include <map>
21#include <memory>
22#include <string>
23
27
28class QTimer;
30
31class SceneViewer : public QOpenGLWidget, protected QOpenGLFunctions {
32 Q_OBJECT
33
34 public:
39
40 explicit SceneViewer(QWidget* parent = nullptr);
42
43 bool is_init(void) const { return is_init_; }
44 bool IsFreeCamera(void) const { return current_cameraPtr_ == &free_camera_; }
45
46 bool AddTempRenderableObj(const std::string& tmpObjGroupName,
47 RenderableObject* renderObj);
49 if (obj && obj->haveShaderProgram() && is_init_) {
50 permanent_renderable_obj_list_.append(obj);
51 return true;
52 } else {
53 return false;
54 }
55 }
56
57 void setTempObjGroupEnabled(const std::string& tmpObjGroupName, bool b);
58
59 const QVector3D& CameraPos(void) const {
60 return current_cameraPtr_->position();
61 }
62 const QVector3D& CamerAttitude(void) const {
63 return current_cameraPtr_->attitude();
64 }
65
66 float sensitivity(void) const { return sensitivity_; }
67
69 const std::string& shaderProgName,
70 const std::shared_ptr<QOpenGLShaderProgram>& newShaderProg);
71
72 std::shared_ptr<QOpenGLShaderProgram> FindShaderProg(
73 const std::string& shaderProgName) {
74 if (managed_shader_prog_.find(shaderProgName) !=
75 managed_shader_prog_.end()) {
76 return managed_shader_prog_[shaderProgName];
77 } else {
78 return std::shared_ptr<QOpenGLShaderProgram>();
79 }
80 }
81
82 signals: // NOLINT
83 void CameraPosChanged(const QVector3D& pos);
84 void CameraAttitudeChanged(const QVector3D& attitude);
85
86 public slots: // NOLINT
87 void ChangeCameraType(int index);
88 // void ChangeCameraMode(int index);
89
90 void ResetCameraPosAttitude(void);
91
92 void UpdateCameraX(double x);
93 void UpdateCameraY(double Y);
94 void UpdateCameraZ(double Z);
95
96 void UpdateCameraYaw(double yawInDegrees);
97 void UpdateCameraPitch(double pitchInDegrees);
98 void UpdateCameraRoll(double rollInDegrees);
99
100 void set_sensitivity(float s) { sensitivity_ = s; }
101
102 protected:
103 void initializeGL() override;
104 void resizeGL(int w, int h) override;
105 void paintGL() override;
106
107 void enterEvent(QEvent* event) override;
108 void leaveEvent(QEvent* event) override;
109
110 void mousePressEvent(QMouseEvent* mouseEvent) override;
111 void mouseMoveEvent(QMouseEvent* mouseEvent) override;
112 void mouseReleaseEvent(QMouseEvent* event) override;
113 void wheelEvent(QWheelEvent* event) override;
114
115 private:
116 void UpdateCameraWorld(void);
117 void UpdateAllShaderProgMVP(const QMatrix4x4& mvp);
118
119 bool is_init_;
120 bool right_key_is_moved_;
121
122 float sensitivity_;
123 QTimer* refreshTimer_;
124
125 QPoint left_key_last_pos_;
126 float right_key_last_y_;
127
128 SceneCameraDialog* camera_dialog_;
129 AbstractCamera* current_cameraPtr_;
130
131 FreeCamera free_camera_;
132 TargetCamera target_camera_;
133
134 std::map<const std::string, std::shared_ptr<QOpenGLShaderProgram>>
135 managed_shader_prog_;
136
137 struct TempRenderableObjGroup;
138
139 std::map<const std::string, TempRenderableObjGroup*> tmp_renderable_obj_list_;
140 QList<RenderableObject*> permanent_renderable_obj_list_;
141};
const QVector3D & position(void) const
const QVector3D & attitude(void) const
bool haveShaderProgram(void)
bool IsFreeCamera(void) const
void resizeGL(int w, int h) override
void mouseMoveEvent(QMouseEvent *mouseEvent) override
bool AddPermanentRenderObj(RenderableObject *obj)
void enterEvent(QEvent *event) override
void mouseReleaseEvent(QMouseEvent *event) override
void leaveEvent(QEvent *event) override
const QVector3D & CameraPos(void) const
void CameraAttitudeChanged(const QVector3D &attitude)
void mousePressEvent(QMouseEvent *mouseEvent) override
void ChangeCameraType(int index)
void UpdateCameraY(double Y)
void UpdateCameraRoll(double rollInDegrees)
void AddNewShaderProg(const std::string &shaderProgName, const std::shared_ptr< QOpenGLShaderProgram > &newShaderProg)
const QVector3D & CamerAttitude(void) const
void initializeGL() override
void UpdateCameraPitch(double pitchInDegrees)
bool AddTempRenderableObj(const std::string &tmpObjGroupName, RenderableObject *renderObj)
void paintGL() override
void ResetCameraPosAttitude(void)
void set_sensitivity(float s)
float sensitivity(void) const
std::shared_ptr< QOpenGLShaderProgram > FindShaderProg(const std::string &shaderProgName)
void setTempObjGroupEnabled(const std::string &tmpObjGroupName, bool b)
bool is_init(void) const
void UpdateCameraYaw(double yawInDegrees)
void wheelEvent(QWheelEvent *event) override
void CameraPosChanged(const QVector3D &pos)
void UpdateCameraX(double x)
void UpdateCameraZ(double Z)