若該文為原創文章,轉載請注明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115416147
長期持續帶來更多專案與技術分享,咨詢請加QQ:21497936、微信:yangsir198808
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…(點擊傳送門)
開發專欄:商業專案實戰
OSG與OsgEarth三維開發專欄
需求
??開發基于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”,群內與博文同步更新)
Demo
??
??
??
??
??
??
Demo部分原始碼
#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/115416147
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273212.html
標籤:其他
上一篇:全方位深入高并發系統設計
下一篇:MySQL中的鎖
