OpenSceneGraph学习(1)
前言
出于对老牌渲染引擎 OpenSceneGraph (简称OSG) 的学习借鉴,先从其Example 开始学习了解。
环境准备
以 Windows 系统为例,必备软件如下:
- MicroSoft Visual Studio (例如我的是 Microsoft Visual Studio Professional 2019)
- CMake (例如我的是 CMake 3.25.3)
- Git
源码Clone
打开 GitBash,到指定目录(比如在目录 D:\github_sourecs_projects\OSG
) clone 源码:
|
|
版本问题:我选择的最新的master,最新打的 tag 是 OpenSceneGraph-3.6.5
。
下载依赖库/数据包
- 依赖库 OSG 针对大多数人需要的 OSG-CORE 解决好了依赖关系,但对于其他 Examples 可能需要的依赖库,是另外给了 3rdParty 需要自己下载,即 Optional 依赖。 所以如果不处理这个第三方依赖包的话,默认配置 CMake 的时候可能会看到如下信息:
|
|
所以我们需要前往:OSG 官网Doc/Deps 下载对应的依赖包,解压缩到相关目录。
比如我下载了 vs2017_x64_3rdParty, 解压到
D:\github_sourecs_projects\OSG\3rdParty_VS2017_v141_x64_V11_small
,该目录再下一级就是3rdParty_x64
只有对应的依赖包检测到了,在 Plugins
解决方案条目下才会看到对应的的 target。
以 Jpeg 为例,手动设置 JPEG_INCLUDE_DIR 等变量,或者使用上述准备好的package 让OSG 内部去检测,总之就是能让 jpeg 这个target 可以被 find,对应的 osg-jpeg 这个target 才会在工程中,进而才能打开 jpg/jpeg 等文件格式。
其他的依赖包同理。
-
数据包
数据包是有专门的一个 Git 仓库的,openscenegraph/OpenSceneGraph-Data ,存放的是跑 Examples 需要的 模型数据、Shader、图片等资源。对应 OSG 的版本也会打 tag,目前我 Clone 时直接取的是最新的数据。
1 2
cd /d/github_sourecs_projects/OSG git clone https://github.com/openscenegraph/OpenSceneGraph-Data.git
环境变量设置
基于上面提及的根目录:D:\github_sourecs_projects\OSG
。
- 配置系统环境变量
OSG_3RDPARTY_DIR
为D:\github_sourecs_projects\OSG\3rdParty_VS2017_v141_x64_V11_small\3rdParty_x64
- 配置系统环境变量
OSG_FILE_PATH
为D:\github_sourecs_projects\OSG\OpenSceneGraph-Data;D:\github_sourecs_projects\OSG\OpenSceneGraph-Data\Images
- 对系统环境变量
PATH
,新增D:\github_sourecs_projects\OSG\3rdParty_VS2017_v141_x64_V11_small\3rdParty_x64\x64\bin
Configure 生成工程
在根目录 D:\github_sourecs_projects\OSG 新建个文件 build.sh
,输入以下内容:
|
|
然后 GitBash 命令行 cd 到根目录后,执行 ./build.sh
进行 Configure。
对得到的工程 OpenSceneGraph.sln
,打开后解决方案管理器如下图:
源码编译
- 先右键
Plugins
生成所有 Plugin 依赖,包括 jpg,rgb 这些文件的读取支持,耐心等待所有构建完成; - 然后展开 Examples ,针对自己想要了解的任何一个 Example,鼠标右键设置为启动项目,然后 Debug/Release 就 Run 起来吧。
效果举例
正常运行 Example 的话,命令行窗口是不会有 error 信息打印的。
以 Examples_osgshadown
举例,正常效果如下:
FAQ
-
编译正常,但运行窗口报错 “Can not read xxx, not find plugin” 之类的错误,而且现象也不对?
是因为 Plugin 依赖没有解决好,比如 jpeg 的 lib 没有安装好。
-
OSG 的头文件大部分都是不带 .h 后缀的,Visual Studio 看着就是没有高亮的,也不方便调试
因为 OSG 是将头文件应用对标学习STL的,类似
#include <iostream>
, OSG 里类似地#include <osg/Texture2D>
。所有的类都管理在命名空间
osg::
中。VS 支持将无扩展名的文件识别为 C/C++ 类型。想要高亮显示? 可以的。
VS 设置路径:
中文版本:工具 -> 选项 -> 文本编辑器 -> 文件扩展名 -> 勾选“将无扩展名文件映射到” -> 右下角下拉选择
MicroSoft Visual C++
-> 确认应用;英文版本:Tools-Options -> Text Editor -> File Extension -> check “Map Extensionless Files To” -> 右下角下拉选择 “Microsoft Visual C++” -> Yes.