【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)

2023-10-29

最近开始了OSG的学习,开始搭建OSG开发环境,期间遇到了很多问题,也查阅了很多资料,最终搭建成功。OSG本来就是开源的,不应该敝帚自珍,应该多交流多分享,所以在此记录一下环境搭建的过程,方便以后查阅和交流。

1、下载文件

1.1、OSG源码下载

OSG3.6.5稳定版下载,下载地址: OpenSceneGraph-3.6.5 release download

下载 OpenSceneGraph-OpenSceneGraph-3.6.5.zip

1.2、OSG第三方依赖库下载

下载地址: Dependencies

里面有各种版本的第三方依赖库,下载自己需要的就可以了,但是必须和自己的编译器版本保持一致。我下载的是2017版本的 3rdParty_VS2017_v141_x64_V11_full.7z。

1.3、数据包下载

下载地址:Data Resources

下载的是 OpenSceneGraph-Data-3.4.0.zip

1.4、编译工具下载

编译工具选择的是CMake,官网上推荐2.6.x:

直接下载最新版的CMake,下载地址:Download | CMake

下载的是 cmake-3.21.3-windows-x86_64.msi

2、CMake构建

2.1、构建前的准备

为了方便编译,在硬盘下建立一个OSG文件夹,然后分别建立如下3个文件夹:

OpenSceneGraph-3.6.5: 用于存放解压后的 OpenSceneGraph-OpenSceneGraph-3.6.5.zip 文件

3rdParty:   用于存放解压后的 3rdParty_VS2017_v141_x64_V11_full.7z 文件

Data:        用于存放解压后的 OpenSceneGraph-Data-3.4.0.zip

build:       用于存放编译后的文件

如下图所示:

 

 

安装CMake。默认安装即可。 

2.2、开始构建

打开CMake,配置源文件目录和编译后的生成目录,如下所示:

 (也可以直接将OpenSceneGraph-3.6.5下的CMakeLists.txt文件直接拖放到CMake界面,然后在重新配置一下build文件目录就可以了)

点击“Configure”按钮,按如下所示进行配置:

 点击“Finish”按钮:

 修改 ACTUAL_3RDPARTY_DIR 的值为 C:\OSG\3rdParty(前面配置好的3rdParty的目录):

 BUILD_OSG_EXAMPLES 打钩:

 CMAKE_INSTALL_PREFIX 的值为上面设置的build的路径:

 再次点击“Configure”按钮:

还是有红色的选项,BUILD_MFC_EXAMPLE 打钩(切记!!!VS2017一定要安装MFC开发组件!!!)

再次点击“Configure”按钮,此时没有红色选项:

 然后点击“Generate”按钮,进行生成。

3、编译

3.1、ALL_BUILD编译

在build目录()中找到生成的OpenSceneGraph.sln文件,然后使用vs2017打开:

 选择生成->批生成:

 选择 ALL BUILD 的 Debug 和 Release:

 然后点击“生成”,此时会花费比较久的时间(我的机器上大概用了3个小时左右)。如果前面配置的没有错误的话,此时应该不会报错。

3.1.1、问题1

在运行过程中提示了以下错误:

 经检查,发现是因为我使用的VS2017版本没有安装MFC组件,所以打开vs2017的安装程序,选择安装MFC组件即可,安装方法:

打开vs2017 community的安装程序:

 然后点击修改按钮就会开始安装MFC组件:

 (20K左右的下载速度,很难受~~)

3.1.2、问题2

安装完成之后,又重新ALL_BUILD一下,ALL_BUILD之后出现如下错误:

出现了一大堆的错误,这个时候不要慌,一般这种错误都是因为一个原因,可以看到出现的错误基本上都是在Examples osgviewerMFC工程中,出现问题的文件基本上集中在afxwin.h中,而这个是库文件,一般不会出错。经查,这种问题一般是因为MFC的编译平台的原因。

可以看到该工程的目标编译平台为:

 其中的_WIN32_WINNT=Ox0A00,表明目标平台是Win10的,对应关系如下所示:

 参考链接:使用 Windows 标头 - Win32 apps | Microsoft Docs

而该工程中定义的目标平台为0x0501(该工程中的stdafx.h头文件下定义的):

 0x0501是面向xp系统的,因为我使用的是Win10操作系统,所以需要进行以下修改:

 保存,再重新ALL_BUILD一下,就没有报错了。

3.2、INSTALL编译

ALL_BUILD编译完成之后,需要进行INSTALL编译,同样打开生成->批生成,选择INSTALL:

 点击“生成”按钮,进行编译生成,这部分会快一些;

4、配置环境变量

添加系统环境变量 OSG_FILE_PATH,值为前面的Data的目录(C:\OSG\Data):

 然后在Path变量中添加前面生成目录build目录中的bin目录(C:\OSG\build\bin):

 配置完成之后最好重启一下。

5、测试

5.1、命令行测试(解决了两个问题)

在命令行中输入osgversion:

 在命令行中输入osglogo:

 能够进行拖动,缩放等操作,但是图形渲染的有问题。命令行上打印的信息如下:

 5.1.1、解决arial.ttf:  file not handled 的问题

参考链接:关于在osgearth 中 出现 arial.ttf : file not handled 的问题 - 尚码园

 取消勾选 OSG_TEXT_USE_FONTCONFIG

 配置freetype路径:

 Configure->Generate,然后重新打开 .sln解决方案,生成->批生成,先ALL_BUILD,然后再 INSTALL。再运行osglogo:

 文字能够正常显示了,但是旁边的地球没有显示出来。

5.1.2、解决无法读取.jpg的问题

有了5.1.1的经验,猜测可能是因为缺少了读取.jpg文件的库,所以需要CMake重新配置一下:

Configure->Generate,然后重新打开 .sln解决方案,生成->批生成,先ALL_BUILD,然后再 INSTALL,再重新运行osglogo显示如下,问题解决:

 而且地球也一直在转。

5.2、新建项目测试

在vs2017中新建C++控制台程序项目,项目属性,选择x64,然后配置头文件目录为build的目录下的include目录,如下所示:

然后配置链接库文件,添加以下链接库:

OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib
(注:在编译生成的lib文件中,每个lib文件有一对名称相似的文件,其中文件名最后一个字母为“d”的为Debug版本所使用的,没有“d”的为Release版本所使用的。)

 然后配置链接库的目录(build目录下的lib目录):

 在程序文件中编写以下代码:

 编译出现以下错误:

 经调试发现,main函数中什么语句都不写,只是单纯的包含这两个头文件就会报这些错误,所以应该不是代码的问题,经查,应该是预处理器未定义的原因,需要在预处理器中添加 WIN32:

 或者在程序中所有头文件之上添加 #include <Window.h>

编译没问题,运行结果:

 (牛~,你终于出来了,喜极而泣)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细) 的相关文章

  • win10下qt 中没有代码提示框了怎么办?

    在这里我也找了好久 发现是跟你装的输入法有冲突了 所以代码提示没有了 请你切换到英文的输入下 把你的输入法换成标准的英文输入输入状态 图片如下 换成这样就可以提示了 如图所示完美解决不能提示的问题 好了完美解决问题 在这里我放上我讲的几个课
  • osgFBO(十)多pass-3,pass3,shader将背景从绿色变为蓝色

    pass3和pass2类似 只是再熟悉下 这个Pass设定为最后一步 可以不再输出纹理 即 1 pass3摄像机输入tex2 osg ref ptr
  • 【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)

    最近开始了OSG的学习 开始搭建OSG开发环境 期间遇到了很多问题 也查阅了很多资料 最终搭建成功 OSG本来就是开源的 不应该敝帚自珍 应该多交流多分享 所以在此记录一下环境搭建的过程 方便以后查阅和交流 1 下载文件 1 1 OSG源码
  • 第40节 指北针实例

    目录 本节内容 本节代码 思路 以下为全部代码 本节内容 受网友提问 本节实现一个指北针 上面左下角的指北针由两部分组成 一部分是指针 一部分是底盘 底盘动 指针在动 默认朝向Z轴负方向是北 朝向X轴正方向是东 你可以感受一下 其它的方向就
  • SingleThreaded是如何进入cull_draw()的?

    正如以前所说 单线程模式是通过cull draw 进行剔除绘制的 如何进入的呢 其实很简单 逆推下 最后 回到梦开始的地方
  • osgcuda

    osgcuda 转 原文 http blog sina com cn s blog df1b276a0101inbi html osgCompute是对代码的并行流处理器执行的抽象基库 库连接到OSG的 OSG 因此它可以被包括在场景图 它
  • osgearth消除近裁剪平面离物体太近时的裁剪问题

    This will mitigate near clip plane issues if you zoom in close to the ground LogarithmicDepthBuffer buf buf install view
  • osgEarth的Rex引擎原理分析(三十三)分页瓦片卸载器子节点的作用

    目标 十二 中的问题22 分页瓦片卸载器是在Rex引擎的setMap函数中创建的 创建之初就关联了活跃瓦片寄存器和资源释放器 作用见下面分析 osgEarthDrivers engine rex RexTerrainEngineNode c
  • osgEarth获取显卡和硬件信息

    osgEarth Capabilities类负责获取显卡和硬件信息
  • osgEarth的Rex引擎原理分析(四十六)如何定制椭球体并进行椭球体间坐标转换

    目标 目标 四十五 中的108 可以用于CGCS2000和WGS84的坐标转换 osg EllipsoidModel默认创建wgs84椭球体 将CGCS2000和WGS84的经纬高坐标分别转换为XYZ 然后比较其差值 osg Coordin
  • ViewerBase::renderingTraversals()的简易理解

    前两篇说到了camera用来剔除 context用来渲染 多线程渲染就是把cpu尽可能的分配给context 如果土豪的话 在剔除过程也分配cpu 另外 也要注意到过期请求数据不处理 当然 首先要获取场景 摄像机和上下文 现在看下摄像机剔除
  • VS2010+Qt5+OSG3.0开发环境搭建

    一 VS2010 VS2010的安装网上教程很多 不再叙述 二 Qt 在VS中开发程序 需要下载Qt安装包和Qt的VS插件 我用的版本是Qt5 1 1 for Windows VS2010 OpenGL VisualStudio Add i
  • osgEarth的Rex引擎原理分析(六)earth文件如何解析成Config

    目标 解决 一 中的问题 构建地图节点的依据是Config osgEarthDrivers earth EarthFileSerialize2 cpp osg Node EarthFileSerializer2 deserialize co
  • qt5+osg多线程的解决方案

    问题描述 Cannot make QOpenGLContext current in a different thread 解决思路 在主线程中将qt窗体中的QOpenglContext moveToThread到窗体线程中 这样窗体线程在
  • osgfbo(六)从pass的角度考虑,改写fbo(二)

    什么是pass 这个问题 看似简单 也让我头疼 看了osgdefered pass定义为osg Camera 杨石兴的osg视频教程定义为osg Group 我认为一个passRoot可以定义为一个Group 包含三部分 到目前pass为止
  • 第38.2节 osg加载大tif-10.20活动直播资源&中秋活动参赛源码

    目录 本节内容 本节内容 根据2021 10 20直播活动的内容 使用VPB处理影像高程的示例 将资源进行打包 里面使用的是VS2019 若使用其它版本的VS 则需要对应的OSG编译包 则在此链接获取 osgChina权威发布 vs各版本第
  • osgEarth的Rex引擎原理分析(三十六)为什么要删除设置过的垂直水准面

    目标 二十九 中的问题86 椭球体 水平面 应该不是删除 而是信息创建出一个没有垂直水准面的Profile 待继续分析列表 9 earth文件中都有哪些options 九 中问题 10 如何根据earth文件options创建不同的地理信息
  • OSG for Android新手教程系列(二)——项目配置

    在上一篇教程中 主要介绍了如何把OSG源代码编译成为能够在Android项目下使用的函数库 在这一篇教程中 我将针对如何在自己的Android项目中配置OSG函数库进行详细讲解 现阶段网上关于OSGfor Android的配置方式教程有很多
  • OSG中几何体的绘制(二)

    5 几何体操作 在本章的前言中就讲到 场景都是由基本的绘图基元构成的 基本的绘图基元构成简单的几何体 简单的几何体构成复杂的几何体 复杂的几何体最终构造成复杂的场景 当多个几何体组合时 可能存在多种降低场景渲染效率的原因 在很多3D引擎中
  • OSG中几何体的绘制(一)

    本章主要介绍一些几何体的绘制方法 绘制几何体在场景中是非常常见的 也是最基本的 在很多应用程序中可以看到相当复杂的场景 但不管场景有多复杂 它们都是由少数几个基本的图形元素构建而成的 只要想想达芬奇那些伟大的作品也是由铅笔和画刷所完成的 读

随机推荐

  • CSS中clear:both的作用

    clear both意思就是清除浮动 例如我们设置了三个div如下
  • es6中let var const 的特点及区别

    首先 var是定义一个变量常用的方法 与其相似的还有let和const 以下介绍他们三个的特点及不同 一 var var的用法很多 没有什么局限 可以对变量进行声明 例如 注意 var let const 是js的关键词 需要写在scrip
  • CSDN笔记

    拉普拉斯变换的收敛域 ROC 与逆变换 ILT 1 是否可积即是否收敛 如果可收敛 面积 拉氏值即为收敛域 1 收敛的条件 e jwt 积分为振荡函数 2 常系数线性微分方程对应线性时不变系统 其分析步骤有三 3 拉氏逆变换 ILT 的方法
  • Linux僵尸进程怎么处理,Linux 僵尸进程如何处理

    Linux 允许进程查询内核以获得其父进程的 PID 或者其任何子进程的执行状态 例如 进程可以创建一个子进程来执行特定的任务 然后调用诸如 wait 这样的一些库函数检查子进程是否终止 如果子进程已经终止 那么 它的终止代号将告诉父进程这
  • js求时间差

    js求时间差 var date1 new Date 开始时间 alert aa var date2 new Date 结束时间 var date3 date2 getTime date1 getTime 时间差的毫秒数 计算出相差天数 va
  • 基于SpringBoot的购票系统的设计与实现

    博主介绍 在职Java研发工程师 专注于程序设计 源码分享 技术交流 专注于Java技术领域和毕业设计 温馨提示 文末有 CSDN 平台官方提供的老师 Wechat QQ 名片 项目名称 基于SpringBoot的购票系统的设计与实现 演示
  • 十五分钟带你学会 Electron

    文章目录 什么是 Electron 为什么要选择 Electron 安装 Electron 桌面CSDN实战 Electron 基础配置 Electron 进程 主进程 渲染进程 主进程与渲染进程的区别 主进程与渲染进程的通信 Electr
  • 孔乙己:new的五种写法

    孔乙己 new的五种写法 这个是目标类 INT 拥有一个字面常量构造函数 和一个平凡析构函数 可以从int构造 也可以隐式转换为int 也可以和int比较大小 class INT private int value public const
  • 【CNC——第6篇】PMAC上位机编程基础篇(上位机和下位机如何通信)

    拓展链接 PAMC官网 DELTA TAU 官网手册 手册大全 PMAC官网 PCOMM32PRO用户手册 PMAC 的内部变量 内部变量分为四种 I 变量为电机等常用基本控制变量 P 变量为全局用户常量 Q 变量为坐标系变量 M 变量为地
  • 华为OD机试 C++ 打卡统计

    题目 任务 你的工作是帮我们找出打卡次数最多的前五名员工 有些小细节需要注意 如果两位员工打卡次数一样多 那么先打卡的员工排名更靠前 如果他们开始打卡的时间也一样 那就按照员工id的大小排序 id小的员工排在前面 输入 第一行是员工的数量N
  • osgFBO(十)多pass-3,pass3,shader将背景从绿色变为蓝色

    pass3和pass2类似 只是再熟悉下 这个Pass设定为最后一步 可以不再输出纹理 即 1 pass3摄像机输入tex2 osg ref ptr
  • matplotlib之饼状图

    import matplotlib pyplot as plt labels A B C D fracs 35 20 45 10 plt pie x fracs labels labels plt show 圆形饼图 import matp
  • 数据结构顺序表与链表(查找,插入,删除)

    目录 顺序表 链表 顺序表 顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素 使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中 即通过数据元素物理存储的相
  • JVM调优实战

    1 当项目运行一段时间以后 产生了OOM的问题 我们该如何排查问题呢 用top命令 看看是哪个进程CPU占用率高 获取它的进程ID 再根据具体的进程id 执行 top HP 进程id号 命令 看看哪个线程的CPU占用率高 如果是业务线程出现
  • WIN7打开方式列表无法添加某个程序

    win7打开方式不能添加程序 你问我答网 原因 程序移动了位置 解决 开始 运行 regedit 在 HKEY CLASSES ROOT Applications 中找到无法添加的程序 例如 ColorStorm exe 看一下它的 she
  • STM32CubeMX之RTC电子钟

    STM32CubeMX之RTC电子钟 1 简介 实时时钟是一个独立的定时器 RTC模块拥有一组连续计数的计数器 在相应软件配置下 可提供时钟日历的功能 修改计数器的值可以重新设置系统当前的时间和日期 2 特性 可编程的预分频系数 分频系数最
  • 《消息队列高手课》如何实现高性能的异步网络传输?

    我们开发的绝大多数业务系统 它都是 IO 密集型系统 跟 IO 密集型系统相对的另一种系统叫计算密集型系统 通过这两种系统的名字 估计你也能大概猜出来 IO 密集型系统是什么意思 IO 密集型系统大部分时间都在执行 IO 操作 这个 IO
  • mysql 查找表中某个字段相同的数据_怎么查看数据库表中某个字段的值有哪些重复记录...

    展开全部 下面以 sqlserver数据库为例进行说明 select from TableA where b in select b from TableA group by b having count b gt 1 这样就列举出了b字段
  • Kryo 使用指南

    1 Kryo 的简介 Kryo 是一个快速序列化 反序列化工具 其使用了字节码生成机制 底层依赖了 ASM 库 因此具有比较好的运行速度 Kryo 序列化出来的结果 是其自定义的 独有的一种格式 不再是 JSON 或者其他现有的通用格式 而
  • 【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)

    最近开始了OSG的学习 开始搭建OSG开发环境 期间遇到了很多问题 也查阅了很多资料 最终搭建成功 OSG本来就是开源的 不应该敝帚自珍 应该多交流多分享 所以在此记录一下环境搭建的过程 方便以后查阅和交流 1 下载文件 1 1 OSG源码