#ifndef POINTCLOUDGLWIDGET_H #define POINTCLOUDGLWIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include class PointCloudGLWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: explicit PointCloudGLWidget(QWidget *parent = nullptr); ~PointCloudGLWidget(); void updatePointCloud(pcl::PointCloud::Ptr cloud); protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; // 鼠标交互 void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; private: void setupShaders(); void updateBuffers(); private: // OpenGL资源 QOpenGLShaderProgram *m_program; QOpenGLBuffer *m_vertexBuffer; QOpenGLVertexArrayObject *m_vao; // 点云数据 std::vector m_vertices; int m_pointCount; // 相机参数 QMatrix4x4 m_projection; QMatrix4x4 m_view; QMatrix4x4 m_model; float m_orthoSize; // 正交投影视野大小(控制缩放) float m_rotationX; // X轴旋转角度 float m_rotationY; // Y轴旋转角度 QVector3D m_translation; // 平移 // 鼠标交互状态 QPoint m_lastMousePos; bool m_leftButtonPressed; bool m_rightButtonPressed; }; #endif // POINTCLOUDGLWIDGET_H