VS2019编译OSG3.7.0+OSGEarth3.3+OSGQt

原文链接:VS2019编译OSG3.7.0+OSGEarth3.3+OSGQt-CSDN博客

工具与环境

这里使用的 cmake-3.18.3 、 VS2019 和 Qt5.15.2 进行编译。

一、编译OSG3.7.0

1、下载

下载不多赘述,在github上下master版本就是3.7.0版本。
另外还需要 3rdParty_VS2017_v141_x64_V11_fullOpenSceneGraph-Data-3.4.0 可以在OSG英文官网中下载到。

2、cmake编译

将OSG3.7.0源码、3rdParty_VS2017_v141_x64_V11_full、OpenSceneGraph-Data-3.4.0解压到合适的目录,并新建一个文件夹用于保存cmake生成的项目。如下图,这里我放在了同级目录下。

然后打开cmake,在最上面第一栏选择OSG源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,然后点击Configure按钮,会弹出如下图子界面,第一栏选择VS2019,第二栏选择x64点击Finish按钮,cmake开始加载。

等待加载完成,会显示一片红,并在下面的log中显示一些库找不到。

点击Ungrouped Entries项展开,在第一项ACTUAL_3RDPARTY_DIR中选择3rdParty_VS2017_v141_x64_V11_full中的x64文件夹路径。

点击BUILD项展开,勾选BUILD_OSG_EXAMPLES项。
点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为最上面创建的文件夹中的OpenSceneGraph文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。

点击OPENGL项展开,修改OPENGL_HEADER1项为
#include <GL/glcorearb.h>,修改OPENGL_PROFILE项为GL3。

注意: OSGEarth3.3版本必须要OSG支持GL3,所以需要下载另外的GL API文件。
下载地址:
https://github.com/KhronosGroup/OpenGL-Registry
https://github.com/KhronosGroup/EGL-Registry
将第一个的GL文件夹和第二个的KHR文件夹复制到OSG源码的include目录下。

点击OSG项展开,
勾选

OSG_GL3_AVAILABLE

取消勾选

OSG_GL1_AVAILABLE
OSG_GL2_AVAILABLE
OSG_GLES1_AVAILABLE
OSG_GLES2_AVAILABLE
OSG_GL_DISPLAYLISTS_AVAILABLE
OSG_GL_FIXED_FUNCTION_AVAILABLE
OSG_GL_MATRICES_AVAILABLE
OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE
OSG_GL_VERTEX_FUNCS_AVAILABLE

修改OSG_GL_CONTEXT_VERSION项为3.3。

然后一直点击Configure按钮直到没有红色项,从下面log可见部分库已经找到(如果没有其他要求,官网下的依赖包中的库应该就已经足够,不需要额外再下别的库了),然后点击Generate按钮,等进度条走完,下方log显示Generating done,即项目生成结束。

3、VS2019编译

打开生成的项目目录,点击sln文件打开项目,点击最上方功能栏生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,下方输出中显示“已启动生成…”,项目开始编译。

**注意:**应该会出现报错,这是因为宏GL_EXT_texture_compression_s3tc已经在glcorearb.h中定义,需要注释掉osg/Texture文件中第60和69行。

接着等待编译完成,应该是不会有失败的。、

然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。注意:这个目录的include中是不带之前的GL和KHR文件夹的,记得手动复制过来。

4、测试

新建一个控制台项目(如何引入库头文件和库文件这里不再赘述),输入以下内容(glider.osg可以在OpenSceneGraph-Data-3.4.0中找到):

运行,如果出现一个紫色的滑翔机,应该就没什么问题了。

注意:因为开启了GL3,所以会对有些渲染不兼容,导致glider.osg和cow.osg的显示效果与通常的有所不同。

二、编译OSGEarth3.3

1、下载

下载不多赘述,在github上下master版本就是3.3版本。
不过要注意的是在src/third_party下三个蓝色链接的项目需要手动下载然后拷贝到此目录下。

必要的还有sqlite3,另外我这里还编译了glew。

1.1、编译sqlite3
1.1.1、下载

下载地址:https://sqlite.org/download.html
这里下载下图两个包,第二张图下载x64版本,下载解压完成后,将文件复制到同一个目录。

1.1.2、编译

打开VS2019,新建一个空项目,起名为sqlite3。

将下载的sqlite的所有文件复制到项目目录下。

然后右键项目,添加现有项。

右键项目属性,将常规中的配置类型设置为动态库(.dll),在目标文件名后加d(这个仅Debug设置),设置链接器-输入中模块定义文件为sqlite3.def,在C/C+±预处理器中预处理器定义中添加以下宏:

SQLITE_CORE
SQLITE_EXPORTS
SQLITE_ENABLE_FTS3
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_SESSION
SQLITE_ENABLE_PREUPDATE_HOOK
SQLITE_ENABLE_DESERIALIZE

记得Debug和Release都要设置。然后点击生成-批生成,勾选Debug和Release,点击生成, 

 

等待编译完成。在生成目录下就可以看到生成的Debug和Release的lib和dll了。再记得创建一个include文件夹将.h文件复制进去。

1.2、glew

glew可以直接下载编译好了的文件,直接下载Binaries即可。
下载地址:http://glew.sourceforge.net/

解压后,将bin和lib中x64目录下glew.dll和glew32.lib复制出来(glew32s.lib是静态库,这里我们需要动态库,所以取glew32.lib即可),复制到一个新的文件夹,将include文件夹也复制进去。

2、cmake编译

开始部分与OSG编译一致,新建一个文件夹用于保存cmake生成的项目,cmake最上面第一栏选择OSGEarth源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,点击Configure按钮,然后选VS2019和x64,点击Finish按钮,等待加载。

载入完成后跟前面的有一点不同的是,应该会弹出Error提示窗,这里不用担心,查看log信息,大概率是有库找不到,手动输入一下就行,这里提示的是找不到curl库,这个库在OSG的3rdParty包中有,不需要额外去下。

上面还是一片红,顺着来处理。

点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为创建的项目文件夹中的OSGEARTH文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。

点击CURL项展开,INCLUDE设置为OSG的3rdParty包中include目录,此目录下可见有curl文件夹,DEBUG和RELEASE设置为3rdParty包中lib目录下的libcurl_impd.lib和libcurl_imp.lib文件。

然后就是下面一系列有关OSG的依赖,只用点开OSG项,在第一个OSG_DIR中设置之前OSG的CMAKE_INSTALL_PREFIX项设置的路径,然后点击
Configure按钮,刷新完成应该会再次弹出Error提示窗,这次应该是找不到GDAL,依次点开OSG相关的项,应该就都自动找到了。

点击GDAL项展开,INCLUDE输入3rdParty的include目录,LIBRARY输入3rdParty的lib目录中的gdal_i.lib。

点击Configure按钮,应该不会弹出Error提示窗了,不过会新增一系列其他依赖库选项,请根据需要自行下载,这里只设置GLEW和SQLITE3。

点击GLEW项展开,设置INCLUDE为之前glew的include目录,SHARED_LIBRARY_DEBUG为glew32d.lib,SHARED_LIBRARY_RELEASE为glew32.lib。

点击SQLITE3项展开,设置INCLUDE为之前sqlite3的include目录(这里我没有新建单独的include文件夹,.h文件直接放在了根目录下),LIBRARY为sqlite3.lib。

点击OSGEARTH项展开,这里有几种NodeKit,可以根据需要勾选,勾选后可能会需要另外的第三方依赖(例如Triton和Silverlining),请自行下载,这里我就保持默认,然后仅勾选OSGEARTH_INSTALL_SHADERS项。

最后点击Generate按钮,等待项目生成完毕。

3、VS2019编译

跟之前的一样,点击生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,等待生成完成,应该是不会有失败的。

然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。

4、测试

找个地方新建一个文件夹,将bin中的osgearth_viewer.exe复制进去,再将OSGEarth源码目录下的data文件夹中的world.tif复制进去,然后新建一个txt文件,后缀改为.earth,内容写:

<map>
<GDALImage name="test"><url>world.tif</url>
</GDALImage>
</map>

然后将OpenSceneGraph和OSGEARTH的bin目录下的所有dll以及osgPlugins文件夹复制到此目录,将3rdParty的bin目录下的所有dll复制到此目录,将sqlite3.dll也复制到此目录(其实这里应该区分一下Debug和Release的dll,将需要的复制进去,不过是测试就不考虑这么多,如果要用于实际项目,建议还是要做下区分)。
接着运行cmd,用cd命令切换到此目录下,然后输入osgearth_viewer test.earth,按下回车。

如果出现了一个粗糙的地球,应该就没什么问题了。

三、编译OSGQt

1、下载

下载不多赘述,在github上直接下的master版本。

2、cmake编译

前面的和之前一样,新建一个文件夹用于保存cmake生成的项目,cmake最上面第一栏选择OSGQt源码中CMakeLists文件所在文件夹的路径,第二栏选择上面自己新建的文件夹路径,点击Configure按钮,然后选VS2019和x64,点击Finish按钮,等待加载。
然后会弹出Error提示窗,查看下面log是找不到OSG相关的库,这里要麻烦一点,需要一个个的手动填写。

然后点击Configure按钮,会弹出Error提示窗,查看下面log是找不到Qt相关的库。
点击Ungrouped Entries项展开,设置Qt5_DIR为:

点击CMAKE项展开,将CMAKE_INSTALL_PREFIX项的路径修改为创建的项目文件夹中的OSGQt文件夹(目录下没有这个文件夹没关系,INSTALL时会自动创建)。

点击Configure按钮,应该是没有报错了,log中有一些红色的Warning文本,这个可以不用管,然后点击Generate按钮,等待项目生成完毕。

3、VS2019编译

打开项目,注意: 双击打开Header Files中的osgQOpenGLWidget和osgQOpenGLWindow,将第15行 #define _gl_h 的注释解开,因为默认下会导致启用系统的gl.h文件,并与之前下载的glcorearb.h文件产生冲突,出现接口重定义的问题。

接着跟之前的一样,点击生成-批生成,在弹出的子窗口中勾选ALL_BUILD的Debug和Release,然后点击生成按钮,等待生成完成,应该是不会有失败的。

然后再次打开批生成,将ALL_BUILD的两个取消勾选,找到INSTALL勾选Debug和Release,点击生成按钮,等待完成。
再之后,打开之前CMAKE_INSTALL_PREFIX项中设置的目录,即是生成好了的库文件。

4、测试

找个地方新建一个文件夹,将项目目录下bin中的osgviewerQt.exe复制进去,再在开始菜单中找到Qt 5.15.2(MSVC 2019 64-bit),点击打开。

用cd命令切换到此目录,然后输入

windeployqt osgviewerQt.exe

回车,它会将exe需要的Qt库复制进去。

然后将OpenSceneGraph的bin目录下的所有dll以及osgPlugins文件夹复制到此目录,将osgQt的bin目录下的osg145-osgQOpenGL.dll复制到此目录,将3rdParty的bin目录下的所有dll复制到此目录,将之前用到的glider.osg也复制到此目录(其实这里应该区分一下Debug和Release的dll,将需要的复制进去,不过是测试就不考虑这么多,如果要用于实际项目,建议还是要做下区分)。
接着运行cmd,用cd命令切换到此目录下,然后输入osgviewerQt glider.osg,按下回车。

如果出现了一个小窗体,上面是之前看过的紫色滑翔机,应该就没什么问题了。

四、结语

至此,所有的编译就均已完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新技术实现WEB前端零代码开发,将为0基础的人进入到IT行业创造极大便利!顺势破解低代码难以落地的魔咒:程序员集体排斥不喜欢、无基础的人不会代码用不来!

网站&#xff1a;hhtp://www.uiotos.net IT行业太大&#xff0c;从嵌入式硬件、到工具软件&#xff0c;到互联网、移动互联网&#xff0c;再到当前火爆的AI人工智能&#xff0c;都属于IT行业的阵地&#xff01;一度风光无两&#xff0c;即便当前大环境低迷&#xff0c;除了垄断…

Maxwell安装使用和简单案例

一、解压 cd /opt/software/ ​ tar -zxvf maxwell-1.29.2.tar.gz -C /opt/module/ ​ cd /opt/module/ 二、MySQL 环境准备 1、修改 mysql 的配置文件 修改 mysql 的配置文件&#xff0c;开启 MySQL Binlog 设置 vi /etc/my.cnf 添加以下内容 server_id1 log-binmysql-…

基于WOA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 4.4 WOA优化算法 5.算法完整程序工程 1.算法运行效果图…

开发语言漫谈-脚本语言

前面讲的都称之为编程语言&#xff0c;就是做系统用的。还有一大类称之为脚本语言的语言&#xff0c;这类语言数量极多&#xff0c;大部分程序员用不上&#xff0c;也不关心&#xff0c;这是系统维护人员专用的邻域。这个定义其实也很不准确&#xff0c;不必较真。更准确的来讲…

get_or_insert_with

get_or_insert_with 是 Rust 中集合类型&#xff08;如 HashMap, HashSet, 或某些自定义类型如 BTreeMap&#xff09;提供的方法之一&#xff0c;用于处理“如果不存在则插入”的场景。它旨在简化在集合中查找某个键&#xff08;key&#xff09;&#xff0c;如果该键不存在&…

把 WordPress 变成 BaaS 服务:API 调用指南

有了前面两篇内容的铺垫&#xff0c;我们来聊聊 WordPress 作为 CMS / BaaS 服务使用时绕不开的问题&#xff0c;API 调用。 这篇内容同样的&#xff0c;会尽量少贴代码&#xff0c;简单的讲清楚一件事&#xff0c;降低阅读负担。 写在前面 首先&#xff0c;我们需要进行清晰…

Docker Compose 的安装和使用详解

Docker Compose 是 Docker 官方开源的容器编排(Orchestration)项目之一,用于快速部署分布式应用。本文将介绍 Docker Compose 的基本概念、安装流程及使用方法。 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,Docker C…

卡车卫星定位系统 user/create 未授权密码重置漏洞复现

0x01 产品简介 卡车卫星定位系统是一种基于卫星通信和导航技术的系统,用于对卡车的位置进行精确测定。该系统主要由一组卫星、地面控制站和接收器组成。通过测量卫星信号的传播时间,可以确定接收器(即卡车上的定位设备)所在的位置。具有高精度、高可靠性、全球覆盖等特点,…

上位机图像处理和嵌入式模块部署(树莓派4b的一种固件部署方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果软件开发好了之后&#xff0c;下面就是实施和部署。对于树莓派4b来说&#xff0c;部署其实就是烧录卡和拷贝文件。之前我们烧录卡&#xff0c;…

SpringBoot如何集成MyBatis可以通过几个简单的步骤来实现

在SpringBoot中集成MyBatis可以通过几个简单的步骤来实现。以下是一个基本的步骤指南&#xff1a; 步骤1&#xff1a;添加依赖 首先&#xff0c;你需要在你的pom.xml文件中添加MyBatis和数据库的依赖。例如&#xff0c;如果你使用MySQL数据库&#xff0c;你可以添加以下依赖&…

服务器防入侵的方案浅析

随着物联网技术和互联网技术的日益发展&#xff0c;勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向&#xff0c;智慧互联包括物联网、万物互联&#xff0c;机器与机器&#xff0c;工业控制体系&#xff0c;信息化&#xff0c;也就是…

Landsat8-9 C2L2使用注意点(简略版)

Landsat8-9 C2L2使用注意点&#xff08;简略版&#xff09; 像元值转化 表面反射率产品时和表面温度时&#xff0c;即对应的SR和ST波段的遥感数据时&#xff0c;需要进行像元值的转换&#xff0c;其转换公式与Collection1不一样&#xff08;Collection1已经弃用了&#xff0c…

SQL中NULL值比较问题解析与解决方法

在进行 SQL 查询时&#xff0c;经常会遇到处理 NULL 值的情况。然而&#xff0c;在使用 ! 或 <> 来比较 NULL 值时&#xff0c;可能会遇到一些意想不到的问题。本篇博客将介绍在 SQL 中处理 NULL 值比较的问题&#xff0c;并提供解决方法。 问题描述 假设我们有一张名为…

每日新闻掌握【2024年4月22日 星期一】

2024年4月22日 星期一 农历三月十四 大公司/大事件 央视发文谈调休&#xff1a;原则是最小干预 “五一其实只放一天”近日冲上热搜&#xff0c;再度引发“假期该不该调休”的热议。如何调休&#xff0c;也有讲究。一个基本原则是&#xff0c;“最小干预&#xff0c;尽量不打乱…

SharpDevelop插件系统代码阅读笔记

SharpDevelop插件系统代码阅读笔记 1.插件系统实现细节 /// <summary> ///AddIn.cs 通过在插件dll里面查找类名&#xff0c;再创建对象&#xff0c;这个功能MEF已经可以实现了 /// </summary> /// <param name"className"></param> /// <…

FLStudio怎么冻结轨道以及如何批量复制音符

FLStudio是一款功能强大的音乐制作软件&#xff0c;广泛用于音乐制作和打谱当中。我们在制作音乐时&#xff0c;经常会遇到处理大量音频轨道的情况&#xff0c;过多的音频轨道可能会导致电脑性能受限&#xff0c;从而影响工作流程。为了应对这个问题&#xff0c;FLStudio提供了…

【JavaEE多线程】Java 文件操作

目录 Java中操作文件File概述属性构造方法方法 文件内容的读写——文件流 streamInputStreamFileInputStream概述利用 Scanner 进行字符读取OutputStream 概述 练习 Java中操作文件 Java 中通过 java.io.File类来对一个文件&#xff08;包括目录&#xff09;进行抽象的描述。注…

Ruby中Rack中间件的作用是什么?如何应用?

在 Ruby 中&#xff0c;Rack 是一个 Web 服务器接口&#xff0c;它允许开发者使用统一的方式构建 Web 应用程序。Rack 中间件是 Rack 框架的一个核心概念&#xff0c;它可以在请求被传递给应用程序之前或之后对请求和响应进行处理。 Rack 中间件的作用包括但不限于&#xff1a…

IPv6改造:反向代理技术的原理和优缺点分析

在前面几篇文章中&#xff0c;我们介绍了目前行业中三种比较常见的IPv6改造技术&#xff0c;分别是隧道技术、双栈技术和翻译技术&#xff0c;这三种改造方式采用不同的技术方案实现了IPv4向IPv6网络的过渡&#xff0c;然而每种改造技术在改造周期和成本、业务连续性、协议兼容…

实景景区亲自儿童剧本杀小程序开发搭建

实景景区亲自儿童剧本杀小程序开发搭建需要涉及多个方面的内容&#xff0c;包括系统架构设计、功能模块设计、页面设计、开发工具选择等。 系统架构设计需要确定小程序的开发框架&#xff0c;可以使用小程序开发框架来构建前端页面和后端接口&#xff0c;同时需要考虑数据库设…