Qt+OSG三维点云引擎的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<br>
开发基于osg的三维点云引擎模块。 1.基于x,y,z坐标轴。 2.可设置原点,设置缩放比例。 3.可设置y轴和z轴单位。 4.三轴中,XY为2D图的水平、竖直方向;Z轴,对应高度图中的double型高度。 5.引擎中心可设置。 6.可设置引擎中心点,可以拽拖绕中心点旋转模型。 7.可以单独以引擎中心点绕X,Y,Z轴旋转,拽拖时旋转. 8.可以组合XY,XZ,YZ轴旋转,拽拖时旋转。 9.根据输入的bmp图片以及建模的txt高度文件,呈现点云。 10.可复位坐标系,可清楚导入的点云。
11.支持导入图片,随机高度进行点云模拟。 12.支持导入cvs点云文件(当前仅解析点)。
CSDN免积分下载地址:https://download.csdn.net/download/qq21497936/16388051 QQ群下载地址:1047134658(点击“文件”搜索“osg3D”,群内与博文同步更新)
<br>
<br>
#ifndef OSGWIDGET_H #define OSGWIDGET_H /************************************************************\ * 控件名称: osg3D点云定制 * 控件描述: * 1.基础三维框架 * 2.可设置中心点 * 3.鼠标中键按下后可移动中心点 * 4.支持导入bmp,bmp+z文件,cvs点云文件 * 5.支持清空数据,复位视角等操作 * 作者:红模仿 联系方式:QQ21497936 * 博客地址:https://blog.csdn.net/qq21497936 * 著作权信息 * 作者:红胖子(AAA红模仿) * 公司:长沙红胖子网络科技有限公司 * 博客专家地址:blog.csdn.net/qq21497936/article/details/102478062 * 联系方式:QQ(21497936) 微信(yangsir198808) * 版本信息 * 日期 版本 描述 * ... ... ... * 2021年04月02日 v2.0.0 3D点云导入,XYZ周固定旋转,复位,清空 导入文件格式支持导入bmp,定制bmp+z,cvs文件 \************************************************************/ #include <QWidget> #include "OsgViewerWidget.h" #include "MyManipulator.h" class AnimationPathCameraMainpulator; namespace Ui { class OsgWidget; } class OsgWidget : public QWidget { Q_OBJECT public: explicit OsgWidget(QWidget *parent = 0); ~OsgWidget(); public: bool getFixXAxis() const; void setFixXAxis(bool fixXAxis); bool getFixYAxis() const; void setFixYAxis(bool fixYAxis); bool getFixZAxis() const; void setFixZAxis(bool fixZAxis); public: bool loadFile(QString imageFile, int minZ, int maxZ); bool loadFile(QString imageFile, float z); bool loadFile(QString imageFile, QString cloudZFile); bool loadFile(QString cvsFile, QColor color); void clear(); void resetCoordinate(); protected: void initOsg(); // osg初始化 void loadNode(osg::ref_ptr<osg::Node> pNode); // 加载场景根节点 protected: osg::ref_ptr<osg::Node> create3DPointCloud(); // 创建总场景 osg::ref_ptr<osg::Node> createAxisAndGrid(); // 创建坐标轴和线格 osg::ref_ptr<osg::Node> createTickLabel(); // 创建坐标轴的tickLabel和单位 osg::ref_ptr<osg::Node> createCloud(std::vector<osg::Vec3> &vectorVec3Vectex, std::vector<osg::Vec4> &vectorVec4VectexColor); // 创建点云 protected: void resizeEvent(QResizeEvent *event); void keyPressEvent(QKeyEvent* event); void keyReleaseEvent(QKeyEvent* event); void mousePressEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); void mouseDoubleClickEvent(QMouseEvent* event); void mouseMoveEvent(QMouseEvent* event); void wheelEvent(QWheelEvent* event); private: Ui::OsgWidget *ui; private: OsgViewerWidget *_pViewer; // osg场景嵌入Qt核心类 osg::ref_ptr<osg::MatrixTransform> _pRoot; // osg场景根节点 private: float _xDistance; // x轴单个tick间距 int _xTickNumber; // x轴tick数(例如:5的时候,是6个,0~5) float _yDistance; // y轴单个tick间距 int _yTickNumber; // y轴tick数(例如:5的时候,是6个,0~5) float _zDistance; // z轴单个tick间距 int _zTickNumber; // z轴tick数(例如:5的时候,是6个,0~5) QString _zUnit; // z轴单位 float _zTickLabelOffset; // z轴坐标偏移 QString _yUnit; // y轴单位 float _zTickUnitLabelOffset; // z轴坐标偏移 QColor _gridColor; // 轴颜色 QColor _labelColor; // 轴tickLabel的颜色 osg::ref_ptr<osg::Node> _pNode; // 模型 osg::ref_ptr<MyManipulator> _pManipulator; // 自定义漫游器 osg::Vec3d _eyeVect3D; // 原始坐标,用于复位原始视角 osg::Vec3d _centerVect3D; // 原始坐标,用于复位原始视角 osg::Vec3d _upVect3D; // 原始坐标,用于复位原始视角 }; #endif // OSGWIDGET_H
<br>
看完上述内容,你们掌握Qt+OSG三维点云引擎的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。