共计 3353 个字符,预计需要花费 9 分钟才能阅读完成。
若该文为原创文章,转载请注明原文出处
本文章博客地址: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