项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
需求
开发基于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三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)的更多相关文章
- Python+Django+ansible playbook自动化运维项目实战☝☝☝
Python+Django+ansible playbook自动化运维项目实战☝☝☝ 一.入门引导 DevOPSDevOps(英文Development和Operations的组合)是一组过程.方法 ...
- 项目实战:Qt手机模拟器拉伸旋转框架
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 项目实战:Qt+Ffmpeg+OpenCV相机程序(打开摄像头、支持多种摄像头、分辨率调整、翻转、旋转、亮度调整、拍照、录像、回放图片、回放录像)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
- 【阿里云产品公测】云引擎ACE新手实战基于Wordpress
[阿里云产品公测]云引擎ACE新手实战基于Wordpress 作者:阿里云用户imnpc ACE(Aliyun Cloud Engine) 是一款弹性.分布式的应用托管环境,支持Java.php多种语 ...
- Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)
Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码) 转 https://blog.csdn.net/lhl1124281072/article/details/800 ...
- 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战
"使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...
- 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐
本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...
- 项目实战:Qt+C#轨道交通行业高性能高流畅度模拟火车移动图像控件
需求 高清线阵相机扫描火车并自动切割单节车厢完成图像合成.通过视频图像处理组件流畅模拟火车行驶整个过程的视频图像: 1.模拟火车通过时的滚动图像,图像主要以两侧和顶部图像的预览为主; 2.模拟 ...
- Unity3D项目实战笔记(5):延时功能的几种实现
我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...
随机推荐
- FIO的再学习-不同Raid,不同磁盘性能验证
FIO的再学习-不同Raid性能验证 背景 发现自己对iodepth的和num_jobs的理解存在偏差 找了一些资料才发现自己很多地方做的不对. 这里找到一个新资料可以进行模拟数据库的测试 测试配置文 ...
- [转帖]Linux命令拾遗-硬件资源观测
https://www.cnblogs.com/codelogs/p/16060455.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 这是Linux ...
- VM PowerCli的简单安装和使用学习
1. Win10 上面安装 下载 zip包并且进行安装 win10 已经带了powershell 安装比较简单, 只不过安装时会提示 powershell的权限有问题需要打开powershell 执行 ...
- Redis 菜鸟进阶
Redis 菜鸟进阶 背景 最近产品一直要优化性能,加强高可用. 有一个课题是Redis高可用与性能调优. 我这边其实获取到的内容很有限. 最近济南疫情严重,自己锁骨骨折. 然后通勤时间基本上都用来查 ...
- dmidecode 查看内存以及硬件信息
安装工具dmidecode 使用 1.查看内存槽及内存条 $ sudo dmidecode -t memory 2.查看内存的插槽数,已经使用多少插槽.每条内存多大 $ sudo dmidecode ...
- 手把手带你开发starter,点对点带你讲解原理
京东物流 孔祥东 _____ _ ____ _ / ____| (_) | _ \ | | | (___ _ __ _ __ _ _ __ __ _| |_) | ___ ___ | |_ \___ ...
- vue/cli3.0相对路径打包
在项目下新增vue.config.js文件 module.exports={ productionSourceMap: false, publicPath: process.env.NODE_ENV ...
- 玩一玩 golang 汇编(二)
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 上次玩 golang 汇编是使用了一个 python 的 ...
- 微信小程序-组件生命周期方法
官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Component.html 正如官方显示组件的生命周期中常用的 ...
- LyScript 插件实现自定义反汇编
LyScript 插件默认提供了一个get_disasm_code()方法可以直接获取到指定行数的反汇编代码,但如果需要自定义获取或者是需要自己封装一个反汇编方法,则你可以用如下两种方式来得到. 插件 ...