前言
OSG这个库着实可惜了,基金会主体莫名其妙没了,导致整个后续版本迭代难以为继,最后几年就剩一个Robert在继续更新维护了
最后几年前Robert转投VulkanSceneGraph了,也就是VKSG,OSG迭代到3.6.5版本就停止了,资料也残缺不全也非常古老
题外话,没人维护咯,中文社区啊,这十来年写几行代码也去贡献贡献啊,不能光恰饭也要做点菜嘛,嗐,可惜了OSG
认识OSG三方库
资料太少了,即使有也是很老很老的了,本小节只能通过总结CMake来观察到底依赖哪些库,所以不一定齐全,但只要写明的就应该不会有错,毕竟直接从CMakeLists和CMake-Configure打印总结出来的
osg源码下载地址:OSG-3.6.5
测试数据osg-data下载地址:OSG-Data-3.4.0,可以不用下载,因为只用于测试学习用途
-
必需的三方库(REQUIRED packages)
从表现来说,它不需要任何必须的依赖库,直接CMake Configure-Generate就可以开始构建工程
虽然OpenGL、Threads被标注成了可选扩展库,但是OSG本质是对OpenGL的封装调用,因此这个几乎可以说是必须的,而且一般PC电脑一定会自带这个的
序号 名称 1 OpenGL 2 Threads -
可选的三方库(OPTIONAL packages)
OSG可选三方库基本就是赋予OSG-Plugin能力,能够更多的去读取不同的数据
以下标注的是否常用,仅代表我个人是否经常使用,完全不代表序号 名称 是否常用 说明 下载地址 1 EGL × Electronic Graphics Library处理图像和图形渲染,如果不用OpenGL ES就不用管这个库 2 Freetype √ 字体引擎,访问多种字体格式文件 Freetype-2.13.2 3 ilmbase × OpenEXR影像格式的一部分 4 Inventor × Autodesk Inventor 三维机械设计文件读写 5 Jasper × 支持多种图像格式的编码和解码 6 OpenEXR × 用于电影制作中高动态范围(HDR)图像的文件格式 7 OpenCascade × CAD/CAM/CAE内核 8 LibXml2 √ 读写xml libxml2-2.12.6 9 COLLADA × 读写COLLADA格式模型,如dae文件类型 10 FBX √ 读写fbx ,非开源,要去AutoDesk官网下载安装 fbx-sdk-2020.03.07-vs2022 11 GDAL √ 用于栅格和矢量地理空间数据格式的转换和处理 gdal-3.8.5 12 GTA × 未知 13 CURL √ 支持多种通信协议,用于数据传输 curl-8.7.1 14 LibVNCServer × VNC协议的服务器库,允许远程桌面访问 15 DCMTK × 用于处理医学图像的DICOM标准 16 FFmpeg × 音视频处理库,录制、转换和流式传输音视频 17 GStreamer × 流媒体处理框架,用于构建流媒体应用程序 18 GLIB × GNOME项目的基础库,提供数据类型、线程、网络等功能的C语言库 19 DirectShow × Windows平台上的流媒体处理架构 20 SDL&SDL2 × 和SDL同为跨平台的开发库,用于提供对音频、键盘、鼠标、游戏手柄和图形硬件的低级访问 21 Fontconfig × 用于配置和定制字体访问的库 22 Poppler-glib × 基于glib的Poppler库封装,用于渲染PDF文档 23 RSVG × 读写SVG文件 24 GtkGl × 在GTK+应用程序中集成OpenGL 25 DirectInput × Windows的API,用于处理游戏控制器和其他输入设备的输入 26 NVTT × NVIDIA Texture Tools,用于压缩和解压缩纹理的库 27 ZeroConf × 零配置网络,用于自动发现网络上的服务和设备 28 LIBLAS × 点云数据处理,读写LAS(LiDAR数据格式)文件,但它已经被PDAL库所取代 29 GIFLIB × 读写GIF图像 30 JPEG √ 读写JPEG图像 libjpeg-3.0.1 31 ZLIB √ 数据压缩 zlib-1.3.1 32 PNG √ 读写PNG图像 libpng-1.6.32 33 TIFF √ 读写TIFF图像 libtiff-4.6.0 34 QuickTime × Apple的多媒体框架,已被AVFoundation取代
编译
本次编译打开上文描述的一些常用库依赖,以提供给OSG更多的能力
CMake一定要注意修改CMAKE_INSTALL_PREFIX的安装路径,不然这么多库整理起来很麻烦
Visual Studio批生成遇到Set Local…错误无法install的时候,将VS作为管理员启动再打开工程就可以解决,但根本问题可能是没有正确指定CMAKE_INSTALL_PREFIX或者库指定的INSTALL属性,输出到C盘、文件名冲突、错误文件地址等等各种情况导致创建文件夹失败,所导致的SetLocal问题
编译GDAL、LibXml2、CURL、JPEG、PNG、ZLib、PNG、Tiff
参考我的另一篇GDAL编译指南,里面有完整的这些编译步骤
其实在编译GDAL的时候这些都需要编译,这边直接用即可
编译FreeType
CMake直接编译后ALL_BUILD和INSTALL,没有什么特殊的,记得改CMAKE_INSTALL_PREFIX;
安装FBX(不开源,但是提供了二次开发包)
- 下载并安装,注意安装路径,可以自己改
- 重新组织一下文件夹,创建bin,lib(先把原来的lib改个名字)
- 把原来的
./lib/x64/release/libfbxsdk.dll
拷贝到bin文件夹里面 - 把原来的
./lib/x64/release/*lib
12个文件拷贝到新的lib文件夹内
至于里面看到的zlib、libxml2库是静态编译的进libfbxsdk的,不用管
编译OSG
官方推荐做法是把上面所有三方依赖库放在一个文件夹里面,然后指定ACTUAL_3RDPARPTY_DIR
属性为改文件夹位置,它可以自己先去尝试找到所有库
但是由于个人习惯以及实际编译结论来说,
ACTUAL_3RDPARPTY_DIR
自动搜寻,也没有办法完全的把所有希望的值都填上,还得挨个检查一遍,那不如我自行挨个添加得了
-
配置GDAL
-
配置LibXml2
(记住include,要填写两层)
-
配置CURL
-
配置JPEG
-
配置ZLib
-
配置Tiff
-
配置FreeType
-
配置FBX(Debug一定也要填上,不然不识别,虽然也不准备编译Debug版本,不嫌麻烦可以把上面说的
./lib/x64/debug
下面的库也拷贝过去)
-
配置PNG
-
配置
- 打开勾选
WIN32_USE_MP
- 打开勾选
OSG_USE_UTF8_FILENAME
- 修改
CMAKE_INSTALL_PREFIX
为自定义的安装路径
- 打开勾选
-
Configure&&Generate,校对一下是不是预期的都打开了
准备开发包
拷贝fbx依赖库的时候要格外注意,他自己有libxml2的依赖,所以就不能一次性的拷贝,需要挑选,不要拷贝xml2、zlib等和fbx无关的lib与include
这样可能会带来一些问题,fbx依赖的libxml和zlib的版本不一定会和我们编译GDAL或者OSG使用的一致,虽然他是静态编译进了fbxsdk里,但是难保会不会有头文件的差异
这个事情需要留个心,如果出现问题了,可以往头文件版本不一致怀疑
由于osg的特殊性,我打包的时候打了三个开发包
- 3rdparty:纯OSG的三方库
- only_osg:只有osg的编译完成后的包
- _all:上面两个合起来