一步步编译OsgOcean
电脑:
操作系统:win7
编译器:vs2010
显卡:NVIDIA GeForce GTX 550Ti
准备工作
一 安装cmake
网络下载cmake,并安装;
我安装的是cmake-2.8.9-win32-x86.exe
二 下载OSG并编译
osgOcean 1.0.1是用osg开发的,所以要安装OSG,官网上说可以用OSG2.8.2编译,所以我下载了OSG2.8.2源码来编译。OSG的国外官网进不去,但是国内的osgchina可以下载源码,
网络地址:http://www.osgchina.org/projects/osgcn/wikicn/Downloads.php
目前下载OSG2.8.2只能通过该网址提供的svn来下载;下面是svn
http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.8.2b
编译OSG2.8.2
(一) 下载3rdParty_Win32binaries_2005_05_10.zip
可在http://www.osgchina.org/projects/osgcn/wikicn/Downloadscn/Dependencies.php下载
(二) 下载OpenSceneGraph-Data-2.0.zip
可在http://www.osgchina.org/projects/osgcn/wikicn/Downloadscn/SampleDatasets.php
(三) 通过cmake生成vs工程
将3rdParty_Win32binaries_2005_05_10.zip解压,将加压目录copy到osg2.8.2目录内
将OpenSceneGraph-Data-2.0.zip解压,将解压目录copy到osg2.8.2目录内
在osg2.8.2目录内建一个build目录,cmake会把vs工程产生到该目录下
打开安装的cmake,填写osgsource code目录与build binaries目录:
如图:
之后点击Configure,然后选择编译器
然后,点击finished
此时,cmake会显示出很多红色,表示需要配置,有些需要配置有些采用默认即可;
需要配置的相有:
ACTUAL_3DPART_DIR:填写上面解压3rdpart目录即可;编译32未程序,要包含x86子目录内容,如果64位填写x64目录,即:
E:\ocean\osg2_8_2b\3rdParty\x86或
E:\ocean\osg2_8_2b\3rdParty\x64
BUILD_MFC_EXAMPLE:选中
CMAKE_INSTALL_PREFIX:最后安装目录,也就是要把 bin目录,include目录,lib目录copy到该目录下,这样其他工程只要引用该目录内容,即可使用osg
点击generate,在build目录下回产生VS工程,打开工程build即可
用vs2010编译osg2.8.2会出现语法错误,如back_inserter错误,只要在文件开头包含
#include
还可能遇到png错误,将
png_set_gray_1_2_4_to_8(png);
改为 png_set_expand_gray_1_2_4_to_8(png);
编译ALL_BUILD工程
编译INSTALL工程,此时可能遇到如下错误:
这个错误的意思是:
E:\ocean\osg2_8_2b\build\src\OpenThreads\win32目录下的中44行记录的
“E:/ocean/osg2_8_2b/build/bin/Debug/../../bin/ot11-OpenThreadsd.dll”找不到
把..翻译过来就是:“E:/ocean/osg2_8_2b/build/bin/bin/ot11-OpenThreadsd.dll”
根本不存在E:/ocean/osg2_8_2b/build/bin/bin/这个目录,查看E:/ocean/osg2_8_2b/build/bin/目录,发现ot11-OpenThreadsd.dll在E:\ocean\osg2_8_2b\build\bin\Debug目录下;
这个有两种办法解决这个问题:
方法一:“E:/ocean/osg2_8_2b/build/bin/Debug/../../bin/ot11-OpenThreadsd.dll”改成
E:\ocean\osg2_8_2b\build\bin\Debug
但是这种方法劳动量很大,很为工程中有cmake_install.cmake文件要修改;
方法二:把ot11-OpenThreadsd.dll copy到E:/ocean/osg2_8_2b/build/bin/目录下;
会有很多dll 需要copy;
再次build INSTALL工程,会出现如下错误:
意思是src/osgPlugins/osgAnimation/cmake_install.cmake文件的32行记录的
E:/ocean/osg2_8_2b/build/bin/Debug/../osgPlugins-2.8.2/osgdb_osganimationd.dll
找不到,解决方法同上面方法二;
Osg编译完毕
三 编译osgOcean
一 准备快速傅里叶变换库
有连个可用库:FFTW, FFTSS
我选择了FFTW,下载地址:
http://www.fftw.org/install/windows.html
加压之后,在启动vs命令行,并切换到解压目录:
然后运行如下三个命令:
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
然后会在目录中生成.h文件.lib文件,这也是编译时要连接的文件;
首先采用上面用cmake生成osg工程的步骤产生osgOcean工程;
生成结构如下:
打开osgOcean.sln,
编译ALL_BUILD
会出现一大堆连接错误,原因是:
没有连接.lib文件,工程属性中添加所有osg的.lib文件
注意也要把快速傅里叶变换的库也加进来;
再编译一次,成功,完毕;
把oceanExample设置为启动工程,把工作路径设置为exe所在目录:
把E:\ocean\osgOcean\osgOcean-Source-1.0.1\osgOcean中的resources目录copy到上面的工作目录中,这样exe可以找到纹理文件等;
启动exe,成功;
四 其他
编译过程中可能出现如下错误:
error C3767:'<': candidate function(s) not accessible
可能原因有连个:
一:因为cmake产生vs工程的时候配置不对;从新用cmake产生一遍即可
二:osg库不是自己编译的,而是从网络上下载的已经编译好的osg;自己编译osg即可
本人从osgchina下载osg2.8.4已经编译好的osg,然后编译osgOcean,但是出现了上面一的错误,后来自己编译了osg2.8.2(从svn下载),并从新用cmake产生了工程,编译成功了;
这里没有深入研究;
还可能有如下问题:
我笔记本win7,显卡GTX540,Osg采用较新版本3.01,而不是osg2.8.2,虽然能编译成功,但是会黑屏,什么都显示不出来;目前不知道原因;