若该文为原创文章,转载请注明原文出处
本文章博客地址: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_OBJECTpublic: 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