溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Qt+OSG三維點(diǎn)云引擎的示例分析

發(fā)布時(shí)間:2021-09-18 14:06:46 來源:億速云 閱讀:200 作者:柒染 欄目:編程語言

Qt+OSG三維點(diǎn)云引擎的示例分析,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

OSG與OsgEarth三維開發(fā)專欄

<br>

需求

??開發(fā)基于osg的三維點(diǎn)云引擎模塊。 ??1.基于x,y,z坐標(biāo)軸。 ??2.可設(shè)置原點(diǎn),設(shè)置縮放比例。 ??3.可設(shè)置y軸和z軸單位。 ??4.三軸中,XY為2D圖的水平、豎直方向;Z軸,對應(yīng)高度圖中的double型高度。 ??5.引擎中心可設(shè)置。 ??6.可設(shè)置引擎中心點(diǎn),可以拽拖繞中心點(diǎn)旋轉(zhuǎn)模型。 ??7.可以單獨(dú)以引擎中心點(diǎn)繞X,Y,Z軸旋轉(zhuǎn),拽拖時(shí)旋轉(zhuǎn). ??8.可以組合XY,XZ,YZ軸旋轉(zhuǎn),拽拖時(shí)旋轉(zhuǎn)。 ??9.根據(jù)輸入的bmp圖片以及建模的txt高度文件,呈現(xiàn)點(diǎn)云。 ??10.可復(fù)位坐標(biāo)系,可清楚導(dǎo)入的點(diǎn)云。

附贈(zèng)功能:

??11.支持導(dǎo)入圖片,隨機(jī)高度進(jìn)行點(diǎn)云模擬。 ??12.支持導(dǎo)入cvs點(diǎn)云文件(當(dāng)前僅解析點(diǎn))。

體驗(yàn)下載地址

??CSDN免積分下載地址:https://download.csdn.net/download/qq21497936/16388051 ??QQ群下載地址:1047134658(點(diǎn)擊“文件”搜索“osg3D”,群內(nèi)與博文同步更新)

<br>

Demo

??Qt+OSG三維點(diǎn)云引擎的示例分析 ??Qt+OSG三維點(diǎn)云引擎的示例分析 ??Qt+OSG三維點(diǎn)云引擎的示例分析 ??Qt+OSG三維點(diǎn)云引擎的示例分析 ??Qt+OSG三維點(diǎn)云引擎的示例分析 ??Qt+OSG三維點(diǎn)云引擎的示例分析

<br>

Demo部分源碼

#ifndef OSGWIDGET_H
#define OSGWIDGET_H

/************************************************************\
 * 控件名稱: osg3D點(diǎn)云定制
 * 控件描述:
 *          1.基礎(chǔ)三維框架
 *          2.可設(shè)置中心點(diǎn)
 *          3.鼠標(biāo)中鍵按下后可移動(dòng)中心點(diǎn)
 *          4.支持導(dǎo)入bmp,bmp+z文件,cvs點(diǎn)云文件
 *          5.支持清空數(shù)據(jù),復(fù)位視角等操作
 * 作者:紅模仿    聯(lián)系方式:QQ21497936
 * 博客地址:https://blog.csdn.net/qq21497936
 * 著作權(quán)信息
 *      作者:紅胖子(AAA紅模仿)
 *      公司:長沙紅胖子網(wǎng)絡(luò)科技有限公司
 *      博客專家地址:blog.csdn.net/qq21497936/article/details/102478062
 *      聯(lián)系方式:QQ(21497936) 微信(yangsir198808)
 * 版本信息
 *       日期             版本         描述
 *       ...             ...          ...
 *   2021年04月02日     v2.0.0     3D點(diǎn)云導(dǎo)入,XYZ周固定旋轉(zhuǎn),復(fù)位,清空
                                  導(dǎo)入文件格式支持導(dǎo)入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);
                                    // 加載場景根節(jié)點(diǎn)
protected:
    osg::ref_ptr<osg::Node> create3DPointCloud();   // 創(chuàng)建總場景
    osg::ref_ptr<osg::Node> createAxisAndGrid();    // 創(chuàng)建坐標(biāo)軸和線格
    osg::ref_ptr<osg::Node> createTickLabel();      // 創(chuàng)建坐標(biāo)軸的tickLabel和單位
    osg::ref_ptr<osg::Node> createCloud(std::vector<osg::Vec3> &vectorVec3Vectex,
                                        std::vector<osg::Vec4> &vectorVec4VectexColor);
                                                    // 創(chuàng)建點(diǎn)云

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場景根節(jié)點(diǎn)

private:
    float _xDistance;                           // x軸單個(gè)tick間距
    int _xTickNumber;                           // x軸tick數(shù)(例如:5的時(shí)候,是6個(gè),0~5)

    float _yDistance;                           // y軸單個(gè)tick間距
    int _yTickNumber;                           // y軸tick數(shù)(例如:5的時(shí)候,是6個(gè),0~5)

    float _zDistance;                           // z軸單個(gè)tick間距
    int _zTickNumber;                           // z軸tick數(shù)(例如:5的時(shí)候,是6個(gè),0~5)

    QString _zUnit;                             // z軸單位
    float _zTickLabelOffset;                    // z軸坐標(biāo)偏移
    QString _yUnit;                             // y軸單位
    float _zTickUnitLabelOffset;                // z軸坐標(biāo)偏移

    QColor _gridColor;                          // 軸顏色
    QColor _labelColor;                         // 軸tickLabel的顏色
    osg::ref_ptr<osg::Node> _pNode;             // 模型

    osg::ref_ptr<MyManipulator> _pManipulator;  // 自定義漫游器

    osg::Vec3d _eyeVect3D;                      // 原始坐標(biāo),用于復(fù)位原始視角
    osg::Vec3d _centerVect3D;                   // 原始坐標(biāo),用于復(fù)位原始視角
    osg::Vec3d _upVect3D;                       // 原始坐標(biāo),用于復(fù)位原始視角
};

#endif // OSGWIDGET_H

<br>

看完上述內(nèi)容,你們掌握Qt+OSG三維點(diǎn)云引擎的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI