简介
OpenSceneGraph(简称OSG)是一个开放源码,跨平台的图形开发包,它为诸如飞行器仿真,游戏,虚拟现实,科学计算可视化这样的高性能图形应用程序开发而设计。它基于场景图的概念,它提供一个在OpenGL之上的面向对象的框架,从而能把开发者从实现和优化底层图形的调用中解脱出来,并且它为图形应用程序的快速开发提供很多附加的实用工具。
我接触OSG是在2013年左右,当时是想在三维虚拟环境中显示连杆机器人的运动姿态,并增加一些机器人与虚拟环境的交互功能,找了一下开发工具,主要有Unity和OSG。Unity好像是收费的,对计算机的要求又很高,毕竟主要用于游戏开发的嘛。而OSG是开源的,完全是由标准C++程序和OpenGL写的,网上公开的资料也比较丰富,所以就选择了使用OSG,使用过程还是挺舒心的。主要用到了节点的装配,碰撞检测,还有一些动画显示,至于渲染之类的高级应用没有用过。
下面是OSG在VS2010环境下的搭建过程,主要参考了缑城浪子的博客,具体实施步骤如下:
首先,是一些准备工作。
- 第一步当然是准备源码了,我当时使用的是OpenSceneGraph 3.0版本,是在官方网站上下载的,现在已经出到3.4.1版本了,可以到GitHub找到源码。以下是以上两个链接:
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/source/OpenSceneGraph-3.0.0.zip
https://github.com/openscenegraph/OpenSceneGraph/tree/OpenSceneGraph-3.4.1 - 再有就是第三方依赖包,包括OSG各个插件的依赖包,比如libpng,libjpeg……,这个的下载链接是http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip,这个我记得官网上也是可以找到比较新的版本的,现在没有重新编译,我就不去找了。
- 还有一个是数据包,包含osg格式的文件,源码所提供的例子中用到的数据文件之类的,学习的时候可以用得到,下载连接是
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/data/OpenSceneGraph-Data-3.0.0.zip - 最后需要一个编译源码的工具CMake,最新版本是3.10.1,官网中有各种格式的下载版本。
- 以上资料都下载好了以后,为了编译的顺利进行,将下载的文件组织如下(非必须):
- 在D盘建立一个OSG的文件夹
- D:\OSG\OpenSceneGraph ——源码解压后放于此
- D:\OSG\3rdParty ——第三方依赖库解压后放于此
- D:\OSG\OpenScenGraph-Data-3.0.0 ——数据包解压后放于此。
开始编译源码
- 安装CMake之后,打开CMake -gui.exe
- 到D:\OSG\OpenSceneGraph路径下,也就是源码解压后的路径下,可以找到CmakeLists.txt,里面包含了编译信息,将它拖到Cmake界面,或者在”Where is the source code”后面添加CmakeLinsts.txt所在的路径,如图1所示
图1 - 修改编译目标路径,按照上图进行编译,会把编译后的文件跟源码文件都混在OpenSceneGraph文件里,建议把“Where to build the binaries”后面的改为“D:/OSG/OpenSceneGraph/bin”之类的路径,有所区分。
- 点击Configure,选择Visual Studio 10(x86),finish后进行相关设置:
- ACTUAL_3RDPARTY_DIR值D:/OSG/3rdParty;
- BUILD_OSG_EXAMPLES :ON——如果想学习例子可以选择这项,不选择此项可以提高编译速度。
- CMAKE_INSTALL_PREFIX:D:/OSG/OpenSceneGraph/;
如下图
- 点击Configure后,将Advanced打勾,将BUILD_MFC_ EXAMPLE设置为on,然后进行最后一次的Configure配置。
- 点击Generate,自此建构完成。
正经编译阶段
- 用VS2010打开OpenSceneGraph.sln文件(此文件在“Where to build the binaries”后面写的路径下),
生成->批生成,对All_BUILD进行生成,选择(Debug和Release两个版本),这段编译时间是很长的,估计4-5个小时。
- 第1步完成后,再对INSTALL也进行相应生成编译。这段时间相应会短一点。
数据转移
在C盘新建OSG文件夹
将D:\OSG\OpenSceneGraph下的bin,include,lib文件夹拷贝到C:\OSG下,将D:\OSG\OpenSceneGraph-Data-3.0.0下的数据拷贝到C:\OSG\data下;这几个文件是OSG需要的。
环境变量设置
对系统变量设置如下:
OSG_FILE_PATH: C:\OSG\data
PATH:C:\OSG\bin;
可在命令行进行测试 osgversion, osglogo, osgviewer cow.osg。
新建OSG项目测试
在VS2010下新建WIN32控制台程序
添加一个cpp
输入以下代码:
#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
int main( int argc, char **argv )
{
osgViewer::Viewer viewer;
viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) );
return viewer.run();
}
- 右键项目,选择“属性”,选择“VC++目录”,
在包含目录添加:C:\OSG\include
在库目录添加:C:\OSG\lib.
- 打开项目属性的链接器,输入里,附加依赖项加上:
OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgUtild.lib
osgGAd.lib
osgViewerd.lib
osgTextd.lib - 运行,效果如下图:
待续……