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)

相关推荐
_Kayo_4 小时前
VUE2 学习笔记6 vue数据监测原理
vue.js·笔记·学习
chenchihwen4 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习
超浪的晨4 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
使二颗心免于哀伤6 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
悠哉悠哉愿意6 小时前
【电赛学习笔记】MaxiCAM 项目实践——与单片机的串口通信
笔记·python·单片机·嵌入式硬件·学习·视觉检测
快乐肚皮6 小时前
ZooKeeper学习专栏(五):Java客户端开发(原生API)详解
学习·zookeeper·java-zookeeper
慕y2746 小时前
Java学习第七十二部分——Zookeeper
java·学习·java-zookeeper
岩中竹7 小时前
广东省省考备考——常识:科技常识(持续更新)
笔记
★YUI★7 小时前
学习游戏制作记录(剑投掷技能)7.26
学习·游戏·unity·c#
Olrookie7 小时前
若依前后端分离版学习笔记(三)——表结构介绍
笔记·后端·mysql