OpenScene Graph程序设计 www.osgChina.org 第一章:绪论 做试验的时候我们也会多多使用里面的数据的,比如glider.osg是个小飞机,非常讨人喜欢。下载数据文件 可以到下面的链接:[http:/www.openscenegraph.org/projects/osg/wiki//Downloa ds/SampleDatasets] 紧接着就是你需要的库了,你可能需要QT界面呀QuickTime呀等等,根据自己的需要,值得一提的是有些 库的版本非常的讲究,否则会出一大堆的错误,而且无从改起,我曾经把所有的库都编译过了,证明市面 上还是可以找到大多数的东西的。 最后就是编译的工具了,以Visual Stdio2005为例,首先下载并安装上。然后下载安装CMAKE,随书光盘中 有CMAKE2.4,也可以到CMAKE的官方网站:http:/www.cmake.org/HTML/index.html上下载最新版本。 下面是实践环节了,首先打开CMAKE,选择源文件的目录,就是下载的OSG源文件的解压后的目录,注意 要选择里面有代码的,不要选择了顶层文件夹,如图1.4所示: Select Path Enter Path to Source C:\Program Files\osgChina\0SG2.2.0_vc80\sre\Open 日向src 日白OpenSceneGr aph2.20 中白applications 自CMakeModules 田doc 田白examples 田include 中白packaging 田向src 确定 取消 图1.4 CMAKE的选择源文件路径框 然后选择在哪里编译OSG,也就是启动文件的目录,这里会存放启动的文件。在OSG1.20及其以前版本中 是不用CMAKE进行什么操作的,启动文件就在源文件当中,但是其后就不是这样了。 这两项都配置完成后点击configure后,选择一个编译环境,就可以配置CMAKE比较细的选项了。这里列表 举一下里面各选项的意思,如表1。 表1 CMAKE选项表 CacheValues 说明 ACTUAL_3DPARTY_DIR 指向第三方依赖的目录,注意有个默认值,一般是不对的, 要根据自己的实际情况,在上面也说了,这个值是必须要指 定的。 BUILD OSG APPLICATIONS 是否编译OSG的可执行文件,里面包含了四个极其重要的 程序,分别是:osgarchive,,osgconv,osgversion,,osgviewer在 后面会讲解它们的使用方法。 BUILD OSG EXAMPLES 是否编译OSG的默认例子,这个是一定要选ON的,例子很 18
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 18 做试验的时候我们也会多多使用里面的数据的,比如 glider.osg 是个小飞机,非常讨人喜欢。下载数据文件 可以到下面的链接:[http://www.openscenegraph.org/projects/osg/wiki/Downloads/SampleDatasets] 紧接着就是你需要的库了,你可能需要 QT 界面呀 QuickTime 呀等等,根据自己的需要,值得一提的是有些 库的版本非常的讲究,否则会出一大堆的错误,而且无从改起,我曾经把所有的库都编译过了,证明市面 上还是可以找到大多数的东西的。 最后就是编译的工具了,以 Visual Stdio2005 为例,首先下载并安装上。然后下载安装 CMAKE,随书光盘中 有 CMAKE2.4,也可以到 CMAKE 的官方网站:http://www.cmake.org/HTML/index.html 上下载最新版本。 下面是实践环节了,首先打开 CMAKE,选择源文件的目录,就是下载的 OSG 源文件的解压后的目录,注意 要选择里面有代码的,不要选择了顶层文件夹,如图 1.4 所示: 图 1.4 CMAKE 的选择源文件路径框 然后选择在哪里编译 OSG,也就是启动文件的目录,这里会存放启动的文件。在 OSG1.20 及其以前版本中 是不用 CMAKE 进行什么操作的,启动文件就在源文件当中,但是其后就不是这样了。 这两项都配置完成后点击 configure 后,选择一个编译环境,就可以配置 CMAKE 比较细的选项了。这里列表 举一下里面各选项的意思,如表 1。 表 1 CMAKE 选项表 CacheValues 说明 ACTUAL_3DPARTY_DIR 指向第三方依赖的目录,注意有个默认值,一般是不对的, 要根据自己的实际情况,在上面也说了,这个值是必须要指 定的。 BUILD_OSG_APPLICATIONS 是否编译 OSG 的可执行文件,里面包含了四个极其重要的 程序,分别是:osgarchive, osgconv, osgversion, osgviewer 在 后面会讲解它们的使用方法。 BUILD_OSG_EXAMPLES 是否编译 OSG 的默认例子,这个是一定要选 ON 的,例子很
OpenScene Graph程序设计 www.osgChina.ong 第一章:绪论 重要。 BUILD OSG PLUGINS 是否编译OSG的插件,要选择ON。 BUILD OSG WRAPPERS 是否要编译OSG的相关扩展。 CMAKE BACKWARDS COMPATIBILITY CMAKE的版本信息 CMAKE INCLUDE PATH 包含文件目录,可以不指定,编译完成后复制。 CMAKE INSTALL PREFIX 安装目录,默认值为C:/Programs Files/OpenSceneGraph/ CMAKE LIBRARY PATH 库文件目录,可以不指定,编译完成后复制。 CMAKE PREFIX PATH 当前目录,可以不指定。 COLLADA INCLUDE DIR Collada库的包含目录,没有安装colloada可以不提定,后 面的雷同。 COLLADA LIBRARY Collada库的库目录,不需要可以不指定。 DYNAMIC OPENSCENEGRAPH 默认开启 DYNAMIC OPENTHREADS 默认开启 EXECUTABLE OUTPUT PATH 可执行文件输出目录,可以默认为空会放在bin下。 FLTK GL LIBRARY FTK的GL库,可以不指定 FLTK INCLUDE DIR FLTK的头文件目录 FLTK LIBRARY FLTK的库文件,可以不指定 FREETYPE INCLUDE_DIR_freetype2 如果第三方依赖找到正确,则此目录会有找到信息,否则重 新配置第三方依赖,这是字体库,必须需要。 FREETYPE INCLUDE DIR ft2build FREETYPE的包含目录中的ft2 build目录 FREETYPE LIBRARY FREETYPE的库目录 GDAL INCLUDE DIR GDAL的包含文件目录 GDAL LIBRARY GDAL的库目录 GIFLIB INCLUDE DIR GF的包含目录 GIFLIB UBRARY GIF的库目录 INVENTOR INCLUDE DIR INVENTOR的包含目录,可以不指定。 INVENTOR UBRARY INVENTOR的库目录,可以不指定 INVENTOR UBRARY DEBUG INVENTOR的D版库目录,可以不指定 JASPER INCLUDE DIR JASPER的包含目录,可以不指定 JASPER LIBRARY JASPER的库目录,可以不指定 LIBRARY OUTPUT PATH 库输出目录,可以不指定,默认将为B OPENVRML INCLUDE DIR OPENVRML的包含目录,可以不指定 OPENVRML LIBRARY VRML的库目录,可以不指定 OPENVRML_LIBRARY_DEBUG VRML的调试版库目录,可以不指定 OSG GLU TESS CALLBACK TRIPLEDOT 默认关闭则可 PERFORMER_INCLUDE_DIR Performer的包含目录,可以不指定 PERFORMER LIBRARY Performer的库目录,可以不指定 QT_QMAKE_EXECUTEABLE QT的QMAKE可执行目录 QUICKTIME INCLUDE DIR QuickTime的包含目录,可以不指定 QUICKTIME LIBRARY QuickTime的库目录,可以不指定 SDLMAIN LIBRARY SDL的sdlmain.ib库目录,可以不指定 SDL INCLUDE DIR SDL的包含文件目录,可以不指定 TIFF INCLUDE DIR TIFF图的包含目录 TIFF LIBRARY TIFF图的库目录 19
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 19 重要。 BUILD_OSG_PLUGINS 是否编译 OSG 的插件,要选择 ON。 BUILD_OSG_WRAPPERS 是否要编译 OSG 的相关扩展。 CMAKE_BACKWARDS_COMPATIBILITY CMAKE 的版本信息 CMAKE_INCLUDE_PATH 包含文件目录,可以不指定,编译完成后复制。 CMAKE_INSTALL_PREFIX 安装目录,默认值为 C:/Programs Files/OpenSceneGraph/ CMAKE_LIBRARY_PATH 库文件目录,可以不指定,编译完成后复制。 CMAKE_PREFIX_PATH 当前目录,可以不指定。 COLLADA_INCLUDE_DIR Collada 库的包含目录,没有安装 colloada 可以不提定,后 面的雷同。 COLLADA_LIBRARY Collada 库的库目录,不需要可以不指定。 DYNAMIC_OPENSCENEGRAPH 默认开启 DYNAMIC_OPENTHREADS 默认开启 EXECUTABLE_OUTPUT_PATH 可执行文件输出目录,可以默认为空会放在 bin 下。 FLTK_GL_LIBRARY FLTK 的 GL 库,可以不指定 FLTK_INCLUDE_DIR FLTK 的头文件目录 FLTK_LIBRARY FLTK 的库文件,可以不指定 FREETYPE_INCLUDE_DIR_freetype2 如果第三方依赖找到正确,则此目录会有找到信息,否则重 新配置第三方依赖,这是字体库,必须需要。 FREETYPE_INCLUDE_DIR_ft2build FREETYPE 的包含目录中的 ft2build 目录 FREETYPE_LIBRARY FREETYPE 的库目录 GDAL_INCLUDE_DIR GDAL 的包含文件目录 GDAL_LIBRARY GDAL 的库目录 GIFLIB_INCLUDE_DIR GIF 的包含目录 GIFLIB_LIBRARY GIF 的库目录 INVENTOR_INCLUDE_DIR INVENTOR 的包含目录,可以不指定。 INVENTOR_LIBRARY INVENTOR 的库目录,可以不指定 INVENTOR_LIBRARY_DEBUG INVENTOR 的 D 版库目录,可以不指定 JASPER_INCLUDE_DIR JASPER 的包含目录,可以不指定 JASPER_LIBRARY JASPER 的库目录,可以不指定 LIBRARY_OUTPUT_PATH 库输出目录,可以不指定,默认将为 LIB OPENVRML_INCLUDE_DIR OPENVRML 的包含目录,可以不指定 OPENVRML_LIBRARY VRML 的库目录,可以不指定 OPENVRML_LIBRARY_DEBUG VRML 的调试版库目录,可以不指定 OSG_GLU_TESS_CALLBACK_TRIPLEDOT 默认关闭则可 PERFORMER_INCLUDE_DIR Performer 的包含目录,可以不指定 PERFORMER_LIBRARY Performer 的库目录,可以不指定 QT_QMAKE_EXECUTEABLE QT 的 QMAKE 可执行目录 QUICKTIME_INCLUDE_DIR QuickTime 的包含目录,可以不指定 QUICKTIME_LIBRARY QuickTime 的库目录,可以不指定 SDLMAIN_LIBRARY SDL 的 sdlmain.lib 库目录,可以不指定 SDL_INCLUDE_DIR SDL 的包含文件目录,可以不指定 TIFF_INCLUDE_DIR TIFF 图的包含目录 TIFF_LIBRARY TIFF 图的库目录
OpenSceneGraph程序设计 www.osgChina.ong 第一章:绪论 USE3DPARTY BIN 是否使用第三方依赖,必须开启。 XINE INCLUDE DIR XINE的包含目录,可以不指定 XINE LIBRARY NE的库目录,可以不指定 ZLIB INCLUDE_DIR ZLIB的包含目录 ZLIB LIBRARY ZLB的库目录 WxWidgets LIB Dir Wx的库目录 WxWidgets_ROOT_DIR Wx的根目录 有的选项是二级联动的,可能选了某一个之后才会出现,这时要根据字面意思看看是否需要开启,选择完 成后再点击Configure,然后看看有什么新项出来没有,新项会以红色显示,如果出现了则看看是否需要改动 默认值。比如当把:BUILD_OSG_EXAMPLES设置成ON后,点击Configure会出现BUILD_MFC_EXAMPLE的小 项,选择ON,然后再点击Configure,到全部灰色,再看看是否需要改动,就可以点击OK了,点击OK后 就会生成启动文件了,如图1.5。 CMAKE文件 Visual Studio Project User Options f.. 33 KB 3 KB CMakeCache.txt INSTALL.vcproj 文本文档 VC++Project 57 KB 33 KB OpenSceneGraph.ncb ●pensceneGraph.sm VC++Intellisense Database Microsoft Visual Studio Solutio 28,667KB Version:Visual Studio 2005 uninstall.vcproj.cmake uninstall.vcproj.D684ED389E304FC.A. CMAKE文件 Visual Studio Project User Options 33K8 3 KB ZERO_CHECK.vcproj.D684ED389E30... 图1.50SG的启动文件目录中的启动文件 到你输入的启动文件目录中就可以看到亲切的生成的VS的启动文件,打开,编译运行就可以了,里面会有 些别的版本,建议只运行ALL_BUILD的Debug与Release版本就可以了,如图所示,选择VS菜单中:生 成->批生成,照图1.6选择。 批生成 X■ 选定要生成的项目配置☒: 项目 配置 平台 解决方宾配置 生成 生成B) ALL_BUILD Debug Win32 DebuglWin32 ALL BUILD MinSizeRel Win32 MinSizeRelWin32 回 重新生成B) ALL BUILD Release Win32 ReleaseWin32 回 清理© ALL BUILD RelWithDebInfo Win32 RelWithDebInfolWin32 回 Applications o...Debug Win32 Debug|Win32 回 Applications o...MinSizeRel Win32 MinSizeRellWin32 回 图1.6生成时的选项 从字面意思来看别的两个版本分别是最小发布版与带调试信息的发布版本。 在这里要提醒一下初学者,第一次编译成功几乎是不怎么可能的。一来是智者百虑,必有一失,所以再小 20
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 20 USE3DPARTY_BIN 是否使用第三方依赖,必须开启。 XINE_INCLUDE_DIR XINE 的包含目录,可以不指定 XINE_LIBRARY XINE 的库目录,可以不指定 ZLIB_INCLUDE_DIR ZLIB 的包含目录 ZLIB_LIBRARY ZLIB 的库目录 WxWidgets_LIB_Dir Wx 的库目录 WxWidgets_ROOT_DIR Wx 的根目录 有的选项是二级联动的,可能选了某一个之后才会出现,这时要根据字面意思看看是否需要开启,选择完 成后再点击 Configure,然后看看有什么新项出来没有,新项会以红色显示,如果出现了则看看是否需要改动 默认值。比如当把:BUILD_OSG_EXAMPLES 设置成 ON 后,点击 Configure 会出现 BUILD_MFC_EXAMPLE 的小 项,选择 ON,然后再点击 Configure,到全部灰色,再看看是否需要改动,就可以点击 OK 了,点击 OK 后 就会生成启动文件了,如图 1.5。 图 1.5 OSG 的启动文件目录中的启动文件 到你输入的启动文件目录中就可以看到亲切的生成的 VS 的启动文件,打开,编译运行就可以了,里面会有 一些别的版本,建议只运行 ALL_BUILD 的 Debug 与 Release 版本就可以了,如图所示,选择 VS 菜单中:生 成->批生成,照图 1.6 选择。 图 1.6 生成时的选项 从字面意思来看别的两个版本分别是最小发布版与带调试信息的发布版本。 在这里要提醒一下初学者,第一次编译成功几乎是不怎么可能的。一来是智者百虑,必有一失,所以再小
OpenScene Graph程序设计 www.osgChina.ong 第一章:绪论 心也难免出错,可能是第三方依赖没配,编译出来不能用,也可能是一些别的什么不知名的原因。第二个 原因是OSG源文件本身有问题,在编码转换过程中有些小错误会发生,据我了解双引号会变成问号。另外 一些错误是发生在与别的库的结合止的,比如库指定不正确,或者提示错误信息说:与默认库起冲突,或 者干脆无法解析的@@LDL什么什么符号,这些错误都是在编译库时非常常见的。首先一个一个来解决。 有语法错误的,比如双引号变分号的,直接改过来就可以了。第二个错误默认库冲突,使用菜单:项目> 属性>配置属性>链接器>输入>忽略所有默认库选择是,或者忽略指定的库,当然你要看错误信息当中指 出的哪些个库。第三个错误是最小的错:无法解析的@@什么的,要从那些乱符号中看出函数名是什么,一 般都是VS的命名规则在前后加一些下划线什么的,看中间几个就可以了,找到这个函数所依赖的b是什 么,一般很好找的,然后在菜单:项目>属性->配置属性>链接器>输入>附加依赖项中加入所需库就可以 了。注意要把活动Debug与Release版本都改动过来。 编译成后把所得d与exe文件都放在一处,把路径添入path。把测试模型放在一处,路径加入OSG FILE P4TH 便可。 编译完成后,运行一下runexample.bat看一下是否设置成功。如果错误提示无法辩认标识符什么的,说明 是没有把DL与EE所在文件夹加入到P4TH当中,说无法找到插件打开什么的,说明编译时没有加入第 三方库。无法打开某某.OSG文件的,说明没有把测试模型加入到OSG FILE PATH当中。 1.3.3开发环境设置 OSG编译后自身可用的有三部分组成,一部分是运行时文件,一部分是库文件,另一部分是头文件。这三 部分在开发的过程当中都会用到。 如果你使用的是安装包,可以跳过这一段,否则需要把pah设置为编译后的库文件目录,就是里面有很多 DLL与EXE文件的目录,把OSG_FILE_PATH指向测试模型的目录。如果是自己编译的,也建议把库文件,头 文件与数据文件都放入同一个文件夹中,类似安装包那样。 平台巴: 显示以下内容的目录(S: Win32 包含文件 ++ S(VCInstallDir)include S(VCInstallDir)atlmfc\include S(VCInstallDir)PlatformSDK\include S(VCInstallDir)PlatformSDK\common\include S(FrameworkSDKDir)include C:\Program Files\osgChina\OSG2.2.0_vc80\include 图1.7设置包含文件 VS设置,打开VS,在菜单:工具->选项->项目和解决方案->VC+目录,包含文件中加入安装或编译后的include 21
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 21 心也难免出错,可能是第三方依赖没配,编译出来不能用,也可能是一些别的什么不知名的原因。第二个 原因是 OSG 源文件本身有问题,在编码转换过程中有些小错误会发生,据我了解双引号会变成问号。另外 一些错误是发生在与别的库的结合止的,比如库指定不正确,或者提示错误信息说:与默认库起冲突,或 者干脆无法解析的@@LFDJL 什么什么符号,这些错误都是在编译库时非常常见的。首先一个一个来解决。 有语法错误的,比如双引号变分号的,直接改过来就可以了。第二个错误默认库冲突,使用菜单:项目-> 属性->配置属性->链接器->输入->忽略所有默认库选择是,或者忽略指定的库,当然你要看错误信息当中指 出的哪些个库。第三个错误是最小的错:无法解析的@@什么的,要从那些乱符号中看出函数名是什么,一 般都是 VS 的命名规则在前后加一些下划线什么的,看中间几个就可以了,找到这个函数所依赖的 lib 是什 么,一般很好找的,然后在菜单:项目->属性->配置属性->链接器->输入->附加依赖项中加入所需库就可以 了。注意要把活动 Debug 与 Release 版本都改动过来。 编译成后把所得dll与exe文件都放在一处,把路径添入 path。把测试模型放在一处,路径加入OSG_FILE_PATH 便可。 编译完成后,运行一下 runexample.bat 看一下是否设置成功。如果错误提示无法辩认标识符什么的,说明 是没有把 DLL 与 EXE 所在文件夹加入到 PATH 当 中,说无法找到插件打开什么的,说明编译时没有加入第 三方库。无法打开某某.OSG 文件的,说明没有把测试模型加入到 OSG_FILE_PATH 当中。 1.3.3 开发环境设置 OSG 编译后自身可用的有三部分组成,一部分是运行时文件,一部分是库文件,另一部分是头文件。这三 部分在开发的过程当中都会用到。 如果你使用的是安装包,可以跳过这一段,否则需要把 path 设置为编译后的库文件目录,就是里面有很多 DLL 与 EXE 文件的目录,把 OSG_FILE_PATH 指向测试模型的目录。如果是自己编译的,也建议把库文件,头 文件与数据文件都放入同一个文件夹中,类似安装包那样。 图 1.7 设置包含文件 VS 设置,打开 VS,在菜单:工具->选项->项目和解决方案->VC++目录,包含文件中加入安装或编译后的 include
OpenScene Graph程序设计 www.osgChina.ong 第一章:绪论 文件夹,如果include文件夹为空,则拷一下源文件中的include文件内容就可以了。把库文件指向IB目录 即可,如图1.7所示。这样开发环境就配置好了。 1.4小结 虽然本节与具体开发并无关系,但是很多人并不是十分了解什么是环境变量,甚至连库与头文件这些路径 的概念都没有。个人觉得应该深入理解类似库的配置,头文件,路径什么的这些基本的知识。 如果要完全编译OSG,那么编译OSG就会变成一种非常痛苦的事情了。只是那些插件的寻找就需要很长很 长的时间,我曾经想过要完全时间编译OSG,做了一个安装包二百多兆,光帮助文档就一百多兆,不能说 不吓死人。 这里再介绍一下如何制作帮助文档,我们经常使用Doxygen+-dottools和微软的chm-workshop来作帮助文档, 一般而言别的chm工具无法正确的生成索引项.Dottools可以很好的生成类继承图,doxygen就更不必说了。 在源文件中有doxygen的文件,这里要提醒大家的是,如果制作帮助文档,建议只改动源文件中配置文件就 可以了,不要再重新建配置文件,不知道为什么,就算内容相同,结果也是不正确的,所以直接改动源文 件中的配置文件比较好,配置文件的路径在[src/doc]当中。 这里再来说一下0SG的版本,OSG的版本有两个重要的变迁,是从120开始的。1.20号称史上最稳定版本。 而后的OSG进行的了重组,弃陈推新,机制也发生了很大变化,清晰,但是稳定性远不如1.20好。新版本 的稳定性从2.20以后才有了革命性的突破。2.20及其以上版本改动并不很大。下一稳定版本将会是3.2。一 般2版本是稳定版本。因为任何一个版本号都不会停留在点奇数上,然而点零号称稳定最后不得不打补丁 打成2,还有就是长期以来人们的习惯,看见点2就觉得很亲切。 下一章我们会讲解关于OSG程序设计的一些内容。 日
OpenSceneGraph 程序设计 www.osgChina.org 第一章:绪论 22 文件夹,如果 include 文件夹为空,则拷一下源文件中的 include 文件内容就可以了。把库文件指向 LIB 目录 即可,如图 1.7 所示。这样开发环境就配置好了。 1.4 小结 虽然本节与具体开发并无关系,但是很多人并不是十分了解什么是环境变量,甚至连库与头文件这些路径 的概念都没有。个人觉得应该深入理解类似库的配置,头文件,路径什么的这些基本的知识。 如果要完全编译 OSG,那么编译 OSG 就会变成一种非常痛苦的事情了。只是那些插件的寻找就需要很长很 长的时间,我曾经想过要完全时间编译 OSG,做了一个安装包二百多兆,光帮助文档就一百多兆,不能说 不吓死人。 这里再介绍一下如何制作帮助文档,我们经常使用Doxygen+dottools和微软的chm-workshop来作帮助文档, 一般而言别的 chm 工具无法正确的生成索引项。Dottools 可以很好的生成类继承图,doxygen 就更不必说了。 在源文件中有 doxygen 的文件,这里要提醒大家的是,如果制作帮助文档,建议只改动源文件中配置文件就 可以了,不要再重新建配置文件,不知道为什么,就算内容相同,结果也是不正确的,所以直接改动源文 件中的配置文件比较好,配置文件的路径在[src/doc]当中。 这里再来说一下 OSG 的版本,OSG 的版本有两个重要的变迁,是从 1.20 开始的。1.20 号称史上最稳定版本。 而后的 OSG 进行的了重组,弃陈推新,机制也发生了很大变化,清晰,但是稳定性远不如 1.20 好。新版本 的稳定性从 2.20 以后才有了革命性的突破。2.20 及其以上版本改动并不很大。下一稳定版本将会是 3.2。一 般.2 版本是稳定版本。因为任何一个版本号都不会停留在点奇数上,然而点零号称稳定最后不得不打补丁 打成.2,还有就是长期以来人们的习惯,看见点 2 就觉得很亲切。 下一章我们会讲解关于 OSG 程序设计的一些内容