【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(超详细) 的相关文章

  • osg--提高效率

    多线程 OpenThreads Thread 虚函数 cancel run OpenThreads Mutex OpenThreads Barrier OpenThreads Condition 线程管理 GetNumberOfProces
  • osgexp安装与使用

    osg系列文章目录 文章目录 osg系列文章目录 前言 一 下载osgexp和3d max 二 osgexp安装 三 编译OSGExp 参考 前言 3ds max文件导出osg或者ive格式 一 下载osgexp和3d max 1 首先下载
  • osgEarth的Rex引擎原理分析(四十四)如何控制父子TileNode节点的显隐

    目标 三十七 中的105 rex渲染出的地球是靠一块块TileNode瓦片拼接起来的 瓦片之间存在父子关系 一般显示父TileNode就不应显示子TileNode 反之亦然 那么rex是如何做这种显隐控制呢 1 每一个TileNode瓦片在
  • qedl中的fixDepth()简化

    如果将PerspectiveMode的设置为1 则会传递zNear和Zfar 在fixDepth 中 而将perspectiveMode 0 则大大简化fixDepth float fixDepth float depth return c
  • osg fbo(一),生成颜色缓冲区图片

    由于工作需要 重新捡了下shader 很明显 fbo是重中之重 好记性不如烂笔头 先记录下 1 生成一个颜色纹理 为了省事 可以将纹理宽高 屏幕宽高 osg ref ptr
  • osgEarth的Rex引擎原理分析(二十四)TileNode节点下的场景树分析

    目标 十八 中的问题54 osgEarth Drivers RexTerrainEngine TileNode是rex引擎下的一个重要节点 这个节点还不是真正在Earth中看到的瓦片 其内部还有场景树 具体包括一个SurfaceNode和四
  • osgEarth的Rex引擎原理分析(二十六)TileNode的_renderModel作用

    目标 十八 中的问题59 TileRenderModel的内容来自于TerrainTileModel 参考TileNode的merge函数 TerrainTileModel的内容来自于文件或网络 参考LoadTileData的invoke函
  • osg fbo(三),将颜色缓冲区图片通过shader变绿

    这个其实很简单 一 写顶点着色器和片元着色器 static const char vertexShader void main void n n gl Position ftransform n n static const char ps
  • osgcuda

    osgcuda 转 原文 http blog sina com cn s blog df1b276a0101inbi html osgCompute是对代码的并行流处理器执行的抽象基库 库连接到OSG的 OSG 因此它可以被包括在场景图 它
  • osgFBO(九)多pass---2,pass2,shader将背景从红色变为绿色

    二 pass2是比较完整的 同时有输入纹理和输出纹理 与pass1类似 这里只列出不同的地方 1 pass2摄像机输入tex1 osg ref ptr
  • osgEarth的Rex引擎原理分析(二十三)PagerLoader的traverse过程详解

    目标 十七 中问题48 主要包含两个过程 1 已处理过请求的加载 这是真正意义上的加载 刚创建出来的请求是从缓存或文件没有关联影像 高程等数据的 需要经过多线程处理后才有数据 详见 十七 对于这些处理过的请求 在PagerLoader的更新
  • osgEarth的Rex引擎原理分析(五十二)CGCS2000与WGS84坐标系的比较

    目标 四十六 中的119 文章 2000中国大地坐标系及其与WGS84的比较 对此有详细的比较 https max book118 com html 2017 0614 114928909 shtm 结论是 实现上相容的 仅在扁率上有微小差
  • osg的ref_ptr和observer_ptr

    ref ptr就是所谓的强指针类型 observer ptr是所谓的弱指针类型 需要注意的是他们都是类 而不是指针 只不过他们用于管理指针 1 如何实现自动内存管理 所谓自动内存管理就是只管对象或指针的创建和使用而不管销毁 实现自动内存管理
  • VS2010+Qt5+OSG3.0开发环境搭建

    一 VS2010 VS2010的安装网上教程很多 不再叙述 二 Qt 在VS中开发程序 需要下载Qt安装包和Qt的VS插件 我用的版本是Qt5 1 1 for Windows VS2010 OpenGL VisualStudio Add i
  • 城市级海量数据流畅调度方案(初稿)

    城市级海量数据流畅调度方案 初稿 一 系统约束 1 硬件限制 CPU 显卡 内存 硬盘 最耗费CPU时间的是 视锥体和boundSphere boundBox的求交计算 显卡现在最大的瓶颈是 当渲染批次多时 2000个primitivese
  • osgEarth的Rex引擎原理分析(四十八)osgEarth::Drivers::RexTerrainEngine::DrawState的作用

    目标 四十五 中的110 每帧都会创建一个DrawState 创建在TerrainRenderData setup 这里存在内存泄漏的问题 因为只有new没有delete 不存在的 drawState是智能指针 超出范围时会自动销毁 也就是
  • OSG for Android新手教程系列(二)——项目配置

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

    在三维中常见的就是漫游整个场景 所谓漫游就是 观察者的视线从一个位置移动到另外一个位置或者在希望的方向上移动 在OSG中漫游可以通过改变观察者 相机 的位置和姿态来实现 三维世界中的模型的相对位置和形态不会发生变化 只是观察者的角度和位置发
  • 分页节点

    动态调度技术 分页数据库 osg PageLOD 动态调度技术 如果数据庞大 那么是不可能一次性全部载入内存的 因此需要动态调度技术 动态调度技术 在显示当前视域中的场景元素的同时 预判下一步可能载入的数据 以及那些短时间内不会被看到的数据
  • osgEarth的Rex引擎原理分析(十四)分页瓦片加载器子节点的作用

    目标 十二 中的问题21 在rex引擎的setMap中创建了分页瓦片加载器子节点 osgEarthDrivers engine rex RexTerrainEngineNode cpp void RexTerrainEngineNode s

随机推荐

  • 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源码