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

若该文为原创文章,转载请注明原文出处
本文章博客地址:​​​​​​​产品分享:Qt+OSG教育学科工具之地理三维星球_长沙红胖子-CSDN博客
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中..

自研产品专栏:自主研发的产品和产品解决方案

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

若该文为原创文章,转载请注明原文出处
本文章博客地址:案例分享:Qt+OSG教育学科工具之地理三维星球_长沙红胖子-CSDN博客

安装QtOSGEarth可以按照以下步骤进行操作: 1. 首先,在Qt官网(https://www.qt.io/)上下载适用于您的操作系统的Qt安装包。根据您的需求选择相应的版本和组件进行安装。 2. 安装Qt时,您可以选择使用在线安装程序或离线安装包。如果有网络连接,建议选择在线安装程序,以便自动下载和安装所需的文件和组件。 3. 在安装过程中,选择合适的安装路径,并确保勾选安装所需的Qt模块。根据您项目的需求,可能需要额外安装Qt Creator等组件。 4. 完成Qt的安装后,您可以打开Qt Creator,创建新的项目,并选择合适的项目模板。 5. 接下来,下载OSGEarth的源代码。您可以在OSGEarth的GitHub页面(https://github.com/gwaldron/osgearth)上找到最新的源代码。 6. 在终端或命令行中,切换到OSGEarth源代码的目录,并执行编译和安装命令。具体命令可能因不同平台和编译选项而有所不同。 7. 编译完成后,您可以将OSGEarth集成到您的Qt项目中。在Qt Creator中,打开您的项目文件(通常是一个.pro文件),并添加OSGEarth的相关头文件和库文件。 8. 根据OSGEarth提供的示例代码和文档,编写您需要的功能和界面。 9. 最后,您可以构建和运行您的Qt项目,测试OSGEarth是否按预期工作。 以上是关于安装QtOSGEarth的一般步骤,具体操作可能因不同的操作系统和版本而有所差异。建议在安装和配置过程中参考各自的官方文档和论坛,以获得更准确和详细的信息。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值