美文网首页
项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组

项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组

作者: 红模仿_红胖子 | 来源:发表于2021-04-06 22:55 被阅读0次

需求

开发基于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

相关文章

  • 项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组

    需求 开发基于osg的三维点云引擎模块。 1.基于x,y,z坐标轴。 2.可设置原点,设置缩放比例。 3.可设置y...

  • 三维变换

    三维平移、三维坐标轴旋转 三维任意轴旋转 三维旋转的四元数法 三维缩放、三维反射、三维错切 三维错切: x、y 方...

  • canvas小技巧

    canvas中将y轴方向反转的一种方法 先将原点移动到左下,然后利用坐标缩放,缩放y轴倍数为-1 注意如果画的是文...

  • ios layer 动画(x/y/z轴 旋转)

    x轴旋转: y轴旋转: z轴旋转: 以上缩放是以view的中心点为中心缩放的,如果需要自定义缩放点,可以设置卯点:...

  • 使用View的setPivotX(float pivotX)、s

    当我们对一个View设置缩放动画时,缩放轴点默认是该View的中心点。如果我们想改变缩放轴点位置,可以通过setP...

  • transform-origin 的起点问题

    transform-origin属性:默认情况,变形的原点在元素的中心点,或者是元素X轴和Y轴的50%处,我们没有...

  • IDW

    Python三维图 空间数据散点图 因为坐标轴没用从零点开始,所以绘制蓝色的点表示(0,0,0)坐标原点 1.ht...

  • Dynamo处理点云数据

    Hello大家好!我是九哥~ 随着三维激光点云扫描技术的推广,越来越多的项目中应用到了三维激光点云扫描。基于三维点...

  • z-index

    平面图形x轴、y轴,三维有z轴,盒模型处于三维时自然也有三维,故此z-index就是z轴坐标,值越大,“离你越近”...

  • 从零开始nodejs系列文章笔记

    从零开始 – 入门篇 Express初始化项目默认支持jade引擎, 可通过-e参数创建支持模板引擎ejs的项目。...

网友评论

      本文标题:项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组

      本文链接:https://www.haomeiwen.com/subject/jjtykltx.html