若該文爲原創文章,轉載請註明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115416147微信
長期持續帶來更多項目與技術分享,諮詢請加QQ:2149793六、微信:yangsir198808 網絡
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…(點擊傳送門)框架
開發基於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.可復位座標系,可清楚導入的點雲。ui
11.支持導入圖片,隨機高度進行點雲模擬。
12.支持導入cvs點雲文件(當前僅解析點)。spa
CSDN免積分下載地址:https://download.csdn.net/download/qq21497936/16388051
QQ羣下載地址:1047134658(點擊「文件」搜索「osg3D」,羣內與博文同步更新).net
#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
若該文爲原創文章,轉載請註明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/1154161473d