产品分享:Qt+OSG教育学科工具之地理三维星球

简介: 产品分享:Qt+OSG教育学科工具之地理三维星球

产品

       三维地理学科工具。

原理

       使用Qt+Osg三维研发地理星球学科工具。

Demo v3.2.0

       在v3.1.0版本基础上:

       1.优化内存占用率。

       

下载地址

       Demo v3.2.0运行包下载地址:osgEarthPlayerv3.2.0.rar-教育文档类资源-CSDN下载

       QQ群:1047134658(点击“文件”搜索“教育学科工具”,群内与博文同步更新)

v3.1.0

       1.修复了星球纹理贴图存在缝隙的问题;

       2.修复了缩放无限制的bug;

       3.对球体、贴图、2d/3d切换、缩放、旋转增加了序列化接口(demo为启动应用后恢复之前关闭的状态)。

v2.0.0

       1.增加了地球以外的八大行星;

       2.对布局进行了调整,适配了多种分辨率

       3.并且优化了部分代码;

v1.0.0

       1.地理星球中地球的研发,包括基本操作、鼠标pick旋转、缩放等

       2.地区包含海洋分布、人口分布、气候分布、海平线等等功能;

Demo演示

关键代码

#ifndef OSGSTARWIDGET_H
#define OSGSTARWIDGET_H
/************************************************************\
 * 控件名称: OsgStarWidget(地理教学三维星球)
 * 控件描述:
 *          1.支持地球等九大行星
 *          2.支持查看海洋分部、人口分布、气候分布、海平线等等
 * 著作权信息
 *      作者:红胖子(AAA红模仿)
 *      公司:长沙红胖子网络科技有限公司
 *      网址:hpzwl.blog.csdn.net
 *      联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813)
 *       日期             版本               描述
 *      ...              ...             ...
 *   2020年05月09日      v3.0.0      优化球体边界圆滑,修复球体贴图黑色缝隙
 *   2020年06月22日      v3.1.0      增对对星球状态、位置、缩放大小,贴图等所有状态的序列化接口;修复缩放bug
 *   2020年06月29日      v3.2.0      优化内存消耗
\************************************************************/
#include <QWidget>
#include "MapWidget.h"
#include "ViewMapWidget.h"
#include "OsgViewerWidget.h"
#include "eventHandler/MyUserPickEventHandler.h"
#include <QApplication>
#include <QJsonObject>
#include <QFile>
#include <QJsonDocument>
#define TEST_SERIALIZE          (1)         // 测试序列化,打开后,关闭该demo会自动保存为1.txt的文件,直接打开则可以恢复上次的状态
#define POS_Y                   (-6.0)
#define RADIUS                  (1.0)
#define MIN_SCALE               (0.5)
#define MAX_SCALE               (2.5)
#define CONTENT_DIR             ("image")
//#define CONTENT_DIR             (":/osgStarWidget/image") // 内存直接爆掉
#define DIR                     ("image/osg")
#define BACKGROUND_IMAGE_NAME   ("background.png")
#define EARTH_IMAGE_NAME        ("earth.jpg")
#define NEPTUNE_IMAGE_NAME      ("neptune.jpg")
#define MARS_IMAGE_NAME         ("mars.jpg")
#define VENUS_IMAGE_NAME        ("venus.jpg")
#define JUPITER_IMAGE_NAME      ("jupiter.jpg")
#define MERCURY_IMAGE_NAME      ("mercury.jpg")
#define SUNLIGHT_IMAGE_NAME     ("sun.jpg")
#define URANUS_IMAGE_NAME       ("uranus.jpg")
#define SATURN_IMAGE_NAME       ("saturn.jpg")
namespace Ui {
class OsgStarWidget;
}
class OsgStarWidget : public QWidget
{
    Q_OBJECT
public:
    enum STAR_TYPE {                    // 输入星球类型
        STAR_TYPE_EARTH     = 0x00,     // 地球
        STAR_TYPE_NEPTUNE   = 0x01,     // 海王星
        STAR_TYPE_MARS      = 0x02,     // 火星
        STAR_TYPE_VENUS     = 0x03,     // 金星
        STAR_TYPE_JUPITER   = 0x04,     // 木星
        STAR_TYPE_MERCURY   = 0x05,     // 水星
        STAR_TYPE_SUNLIGHT  = 0x06,     // 太阳
        STAR_TYPE_URANUS    = 0x07,     // 天王星
        STAR_TYPE_SATURN    = 0x08      // 土星
    };
public:
    explicit OsgStarWidget(QWidget *parent = 0);    // 构造函数,默认为地球
    ~OsgStarWidget();
public:
    QString getSerialize();                         // 获取序列化
    void setSerialize(QString json);                // 设置序列化
    STAR_TYPE getStarType() const;                  // 获取星球类型
    void setStarType(const STAR_TYPE &starType);    // 设置星球类型,设置后会重置
    QString getScaleAndRotate();                    // 获取缩放和角度
    void setScaleAndRotate(QString scaleAndRotate); // 设置缩放和角度
protected:
    void updateStarType();                          // 更换星球好,需要重新更新
    void updateButtons();                           // 更新按钮
    void updateContent();                           // 更新左下角的详解
    void updateScale();                             // 更新缩放比例
protected slots:
    void slot_clearWidget();
    void slot_changle3DImage(QString imageName);
protected:
    void init3D();
    void changeCamera(float x, float y, float z);
    void change3DImage(QString imageFile);
protected:
    osg::ref_ptr<osg::Node> getBackgroundNode(QString imageFile);
    osg::ref_ptr<osg::Node> getSphereNode();
protected:
    void resizeEvent(QResizeEvent *event);
#if TEST_SERIALIZE
    void closeEvent(QCloseEvent *event);
#endif
private slots:
    void on_pushButton_map_clicked(bool checked);
    void on_pushButton_2Dor3D_clicked(bool checked);
    void on_pushButton_zoomIn_clicked();
    void on_pushButton_zoomOut_clicked();
    void on_pushButton_reset_clicked();
    void on_comboBox_starType_activated(const QString &arg1);
private:
    Ui::OsgStarWidget *ui;
    STAR_TYPE _starType;                                    // 星球类型
    float _radius;                                          // 原始半径,缩放比例为1.0f时
    MapWidget *_pMapWidget;
    ViewMapWidget *_pViewMapWidget;
    OsgViewerWidget *_pOsgViewerWidget;                     // 渲染窗口
    osg::ref_ptr<osg::Group> _pGroup;                       // 场景根节
    osg::ref_ptr<osg::MatrixTransform> _pMatrixTransform;   // 球体:用于变换
    osg::ref_ptr<osg::Geode> _pGeode;                       // 球体:用于贴纹理
    osg::ref_ptr<osg::Switch> _pSwitch;                     // 开关:用于隐藏
    MyUserPickEventHandler *_pMyUserPickEventHandler;       // 事件过滤器
    QString _dir;
    QString _imageName;
    QHash<STAR_TYPE, QString> _hashStarType2ImageName;
};
#endif // OSGSTARWIDGET_H



相关文章
|
2月前
|
数据可视化 API vr&ar
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
134 2
|
2月前
|
机器学习/深度学习 API vr&ar
Qt, OpenCV与OpenGL协同作战:图像处理与三维图形界面的完美结合
Qt, OpenCV与OpenGL协同作战:图像处理与三维图形界面的完美结合
118 4
|
8月前
|
C++ Python
Python+QT美颜工具源码
Python+QT美颜工具源码
122 0
Python+QT美颜工具源码
|
数据可视化
Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解
qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的。其中就包括华丽绚烂的三维图表,数据量不大的时候是可以使用的。前面介绍了基础的q3d散点图、柱状图,本篇介绍基础的三维曲面图。Q3DSurface类提供了渲染3D曲面图的方法。该类使开发人员能够渲染3D表面图,并通过自由旋转场景来查看它们。可以通过QSurface3DSeries控制曲面的视觉财产,例如绘制模式和着色。
|
Python Windows
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
633 0
|
数据可视化
Qt开发技术:Q3D图表开发笔记(二):Q3DBar三维柱状图介绍、Demo以及代码详解
qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的。   其中就包括华丽绚烂的三维图表,数据量不大的时候是可以使用的。   上一篇介绍了基础的q3d散点图,本篇介绍基础的柱状图。
Qt开发技术:Q3D图表开发笔记(二):Q3DBar三维柱状图介绍、Demo以及代码详解
|
算法 Ubuntu Linux
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...
|
数据可视化
Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解
qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的。
Qt开发技术:Q3D图表开发笔记(一):Q3DScatter三维散点图介绍、Demo以及代码详解
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0