osgEarth学习笔记4-第一个OsgEarth QT程序

原文链接

使用QT Creator新建一个窗口项目。

编辑pro文件

cpp 复制代码
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui
#osg osgQt
INCLUDEPATH += "D:\coding\osgearth\osgearth-vcpkg-installed\installed\x86-windows\include"
INCLUDEPATH += "D:\coding\osgearth\osgQt-master\include"
INCLUDEPATH += "D:\coding\osgearth\osgQt-master\build-win32\src"
INCLUDEPATH += "D:\coding\osgearth\osgQt-master\build-win32\include"
INCLUDEPATH += "D:\coding\osgearth\osgQt-master\build-win32\include"
LIBS += -L"D:\coding\osgearth\osgearth-vcpkg-installed\installed\x86-windows\lib" -losg -losgUtil -losgViewer  -losgGA  -losgDB  -lOpenThreads -lopengl32
LIBS += -L"D:\coding\osgearth\osgQt-master\build-win32\lib" -losgQOpenGL
#osgEarth
INCLUDEPATH += "D:\coding\osgearth\osgearth-vcpkg-installed\installed\x86-windows\include"
LIBS += -L"D:\coding\osgearth\osgearth-vcpkg-installed\installed\x86-windows\lib" -losgEarth
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

编辑main.cpp

cpp 复制代码
#include "mainwindow.h"
#include <QApplication>
#include <osgQOpenGL/osgQOpenGLWidget>
#include <osgDB/ReadFile>
#include <osgUtil/Optimizer>
#include <osg/CoordinateSystemNode>
#include <osg/Switch>
#include <osg/Types>
#include <osgText/Text>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/TrackballManipulator>
#include <osgGA/FlightManipulator>
#include <osgGA/DriveManipulator>
#include <osgGA/KeySwitchMatrixManipulator>
#include <osgGA/StateSetManipulator>
#include <osgGA/AnimationPathManipulator>
#include <osgGA/TerrainManipulator>
#include <osgGA/SphericalManipulator>
#include <osgGA/Device>
#include <QSurfaceFormat>
#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

//osgEarth
#include <osgViewer/Viewer>
#include <osgEarth/Notify>
#include <osgEarth/EarthManipulator>
#include <osgEarth/ExampleResources>
#include <osgEarth/MapNode>
#include <osgEarth/Threading>
#include <osgEarth/GDAL>
#include <osgEarth/ImageLayer>
using namespace osgEarth;
using namespace osgEarth::Util;

#include <osgEarth/Metrics>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    osgEarth::initialize();
    osg::ArgumentParser arguments(&argc, argv);
        osgQOpenGLWidget widget(&arguments);
        QObject::connect(&widget, &osgQOpenGLWidget::initialized,[&arguments,&widget]
            {
                widget.getOsgViewer()->setCameraManipulator( new EarthManipulator(arguments) );
                widget.getOsgViewer()->getCamera()->setSmallFeatureCullingPixelSize(-1.0f);
                string tifFile = "D:/coding/osgearth/world.tif";
                osgEarth::Map* map = new osgEarth::Map() ;
                osgEarth::GDALImageLayer::Options gdalOpt ;
                gdalOpt.url() = tifFile ;
                osgEarth::GDALImageLayer* imgLayer = new osgEarth::GDALImageLayer(gdalOpt);
                if( imgLayer==0 ){
                    return 20 ;
                }else{
                    cout<<"good gdal layer."<<endl;
                }
                map->addLayer(imgLayer ) ;
                MapNode* mapNode = new MapNode(map);
                if(!mapNode)
                {
                    std::cout << "bad map node." << std::endl;
                    return 1;
                }
                widget.getOsgViewer()->setSceneData(mapNode);
                return 0;
            });
    MainWindow w;
    w.setCentralWidget(&widget);
    w.show();
    return a.exec();
}

以Release模式编译执行,然后参考前一篇笔记,拷贝相关依赖项进入exe目录。再次运行。

此时运行会提示错误

FTH: (7640): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. ***

Error reading file .osgearth_engine_rex: file not handled

osgEarth\]\* WARNING: Failed to load terrain engine driver for "rex" \[osgEarth\]\* FAILED to create a terrain engine for this map 原因是没有加载到osgEarth的plugins动态库,之前我们是osg的plugins都考过来了,现在到下面目录 ![](https://file.jishuzhan.net/article/1770064587043901441/31340b24b11d0b4903e2e0aece9e794f.webp) 把里面dll都拷贝到exe目录下的osgPlugins-3.6.5目录下即可。 ![](https://file.jishuzhan.net/article/1770064587043901441/b1a5841f45021c097089ca68c0acf842.webp) 运行结果如下: ![](https://file.jishuzhan.net/article/1770064587043901441/a113055ffe1f28ab070d9e0df5f5b81a.webp)

相关推荐
卡提西亚2 小时前
C++笔记-34-map/multimap容器
开发语言·c++·笔记
今天你TLE了吗2 小时前
Stream流学习总结
java·学习
一个平凡而乐于分享的小比特3 小时前
UCOSIII笔记(十三)CPU利用率及栈检测统计与同时等待多个内核对象
笔记·ucosiii
摇滚侠4 小时前
2025最新 SpringCloud 教程,编写微服务 API,笔记08
笔记·spring cloud·微服务
周全全6 小时前
基于ElasticSearch的语义检索学习-向量化数据、向量化相似度、向量化检索
大数据·学习·elasticsearch
4***72136 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
爬虫·学习·计算机外设
t***31656 小时前
爬虫学习案例3
爬虫·python·学习
我的老子姓彭6 小时前
N32WB蓝牙芯片开发
笔记
hhcccchh6 小时前
学习vue第七天 从单页面应用(SPA)进化为后台管理系统架构
vue.js·学习·系统架构
历程里程碑6 小时前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法