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都考过来了,现在到下面目录

把里面dll都拷贝到exe目录下的osgPlugins-3.6.5目录下即可。

运行结果如下:

相关推荐
aaaameliaaa2 小时前
字符函数和字符串函数
c语言·笔记·算法
似的8353 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
tq10864 小时前
开放与封闭:类型系统的安全哲学
笔记
fanged4 小时前
总线学习3--SPI番外(TODO)
学习
龙仔7254 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
韭菜炒鸡肝天4 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
ThsPool5 小时前
【遥感学习整理 02】ENVI遥感图像处理基础:从数据读取到遥感信息产品
图像处理·人工智能·学习
0566466 小时前
Python康复训练——常用标准库
开发语言·python·学习
0566467 小时前
Python康复训练——控制流与函数
开发语言·python·学习
峥无7 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记