您的位置:首页 > 运维架构

Windows下编译 OpenSceneGraph

2009-12-18 10:25 411 查看
转自:http://mochou123456.blog.163.com:80/blog

在vs8下编译osg(OpenSceneGraph)

Osg开发环境的配置全过程(带可执行例子)

Windows下编译 OpenSceneGraph-2.6.0 的方法,主要实现从源代码逐步编译出一个可调试的运行环境.

一、需要的软件包

1、OpenSceneGraph-2.6.0.zip 下载地址
http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-2.6/OpenSceneGraph-2.6.0.zip

也可以直接安装一个.exe软件程序包,然后在安装的目录下找到对应的源文件,一般源文件的路径可以在通过“开始à所有程序àopenScencGraph2.6.0à源文件à属性”找到,本人就是这样用这个源文件。

2、3rdParty_Win32binaries_2005_05_10.zip 下载地址

http://www.openscenegraph.org/downloads/dependencies/3rdParty_Win32binaries_2005_05_10.zip

3、cmake-2.4.7-win32-x86.exe 下载地址

http://www.tntdown.cn/download.asp?id=19650&dp=1

4、msvcr71d.dll 下载地址

http://www.zhaodll.net/dll/download.asp?softid=463&downid=2&id=461

5、msvcp71d.dll 下载地址
http://www.zhaodll.net/dll/download.asp?softid=458&downid=2&id=456

二、生成工程dll

1、在C:/Program Files/OsgChina/OpenSceneGraph/scr(这是安装的默认路径,也可以自己下载源文件)下将OpenSceneGraph-2.6.0.zip解压

2、解压3rdParty_Win32binaries_2005_05 _10.zip

3、将3rdParty_Win32binaries_2005_05 _10.zip解压出来的文件夹放在OpenSceneGraph-2.6.0.zip解压出来的文件夹(OpenSceneGraph2.6.0)下面,在OpenSceneGraph2.6.0下面创建一个名为 build的文件夹,以存放下面配置生成的工程文件。

4、在C盘创建文件名为OSG的文件夹,将将以上处理所得到的OpenSceneGraph2.6.0放在copy过来。

5、安装 cmake-2.4.7-win32-x86.exe ,一切都是缺省.

6、通过 开始-->程序-->CMake2.4-->CMake 运行CMake程序.

7、将C:/OSG/OpenSceneGraph/CMakeLists.txt拖到CMake窗口中.

这时在Where is the source code:中会显示C:/OSG/OpenSceneGraph,在Where to build the binaries:中会显示C:/OSG/OpenSceneGraph,修改binaries这一项,变成C:/OSG/OpenSceneGraph/build,点击Configure,会弹出一个编译器的选项,自动就行,不用改变,然后按ok,弹出Create Directory窗口,按 确定

8、修改 ACTUAL_3DPARTY_DIR这项,由C:/OSG/3rdparty指向C:/OSG/OpenSceneGraph/3rdParty





修改 BUILD_OSG_ARAPPERS这项,由OFF 改成 ON 其他不动

如果你想这时编译例子程序,可以修改BUILD_OSG_EXAMPLES这项,由OFF 改成 ON

参数解释:

ACTUAL_3DPARTY_DIR:即整合的第三方开发库所在目录,如果下载了OSG提供的整合好的第三方开发库,那么可以在这里设置解压缩之后它的位置,CMake将在下次配置时自动搜索所需的Lib文件和头文件路径.

BUILD_OSG_EXAMPLES:是否编译OSG所有例子程序的选项.

BUILD_OSG_WRAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文件"osgIntrospectiond.lib"错误.

CMAKE_CONFIGURATION_TYPES:定义了工程文件中工程配置的种类,缺省值包括Debug,Release,MinSizeRel和RelWithDebInfo四种类型.注意不同的配置类型在工程中对应不同的编译选项,可以在CMAKE_CXX_FLAGS和CMAKE_EXE_LINKER_FLAGS中进行修改.

9、按下"Configure",进入第二次配置

10、按下"Configure",就会出现 OK可点击的状态

11、先不要急于按下"Configure",点击右上的选框"Show Advanced Values",可以看到列表框中的选项增加了.这其中很多选项是之前未经选择的.

这其中需要重新进行配置的主要是各个第三方开发库的头文件路径和Lib文件路径;如果用户平台上还有其他GUI库,例如Qt,Fltk,wxWidgets等,那么也需要在这里重新进行配置.
配置第三方开发库的相关参数时,主要需要配置以下两个参数的值:

……_INCLUDE_DIR:头文件的位置.
……_LIBRARY:需要链接的静态库文件.





12、按下OK键
13、进入C:/OSG/OpenSceneGraph/build文件夹下,选择OpenSceneGraph.sln,在Debug模式下,选择 生成(B)-->生成 ALL_BUILD (U),然后耐心等待,编译好后,在Release模式下,选择生成(B)-->生成 ALL_BUILD (U),然后耐心等待,最后的效果是,生成了Debug和Release下的lib和dll库.

(debug版本在一个半小时左右,本例也是debug版本)

注:在vs2005下可能出现不能识别的字符,解决方法,给缺少引号的字符串加上相应的引号。

三、建立环境

1、首先在C:/OSG/建一个目录,OSG2.6,在这个目录下分别建debug,release目录,在这些目录下建lib,bin目录,还要在OSG2.6目录下建一个include目录
2、拷贝文件

a、include下文件:

到C:/OSG/OpenSceneGraph/3rdParty/include/下,把所有的文件拷贝到C:/OSG/OSG2.6/include下.

到C:/OSG/OpenSceneGraph/include/下,把所有的文件拷贝到C:/OSG/OSG2.6/include下.

到C:/OSG/OpenSceneGraph/build/include OpenThreads下的Config.h文件和osg下的Config.h文件,把这些分别文件拷贝到C:/OSG/OSG2.6/include相应的文件夹下.

b、debug文件夹下的bin中的文件:

把下载后的msvcpd71.dll和msvcr71d.dll文件解压后,拷贝到debug/bin下. 到C:/OSG/OpenSceneGraph/3rdParty/bin/下,把所有D.dll结尾的文件拷贝到debug/bin下.

到C:/OSG/OpenSceneGraph/build/bin/下,把所有的.dll和.exe结尾的文件结尾的文件拷贝到debug/bin下.

到C:/OSG/OpenSceneGraph/build/bin/osgPlugins-2.6.0/下,把所有的.dll结尾的文件结尾的文件拷贝到debug/bin下.

c、debug文件夹下的lib中的文件:

到C:/OSG/OpenSceneGraph/3rdParty/lib/下,把所有D.lib结尾的文件,拷贝到debug/lib下.

到C:/OSG/OpenSceneGraph/build/lib/debug/下,把所有lib结尾的文件,拷贝到debug/lib下.

3、设置环境变量,系统变量

(修改将导致cmd下的osg命令无效,这样安装包默认运行的bin与生成的bin是有区别的,而在开发环境下运行我们编译生成的bin,否则会出现

Could not find plugin to write nodes to file "**.osg"使用的osg插件没有经过编译,例如自带的osgplugins-2.6.0

cmd下的osg命令无效的解决方法,见下面”四”)

我的电脑-->属性-->高级-->环境变量-->

Path:在本例中将其改为C:/OSG/OSG2.6/debug/bin(默认为C:/Program Files/OsgChina/OpenSceneGraph/bin)(改变该变量不用重启即可生效)

OSG_NOTIFY_LEVEL DEBUG_FP

OSG_ROOT C:/OSG/OSG2.6/debug/
OSG_FILE_PATH C:/OSG/OSG2.6/data/ (默认为C:/Program Files/ OsgChina / OpenSceneGraph/data)

8、配置vs8

a、启动Microsoft Visual Studio 2005建立一个Win32控制台项目,在应用程序设置选项卡里,选择空项目,点击完成.

b、解决方案" 选择 源文件 右击-->添加(D)-->添加新项(W)-->C++文件(.cpp)-->名称(N): Test-->打开(O)

OpenSceneGraph运行需要多线程DLL的运行时库和RTTI,所以,在建立每个OpenSceneGraph工程后,第一件事就是更改工程设置.
(由于我们现在使用的是Debug版本,所以只用填写Debug信息)

具体步骤:项目(Test) 属性-->配置(C)-->Debug

打开项目属性,在C/C++选项卡里,点击代码生成页,更改运行时库,对于Debug版,用多线程调试 DLL (/Mdd),对于Release版,用多线程 DLL (/MD).

设置C/C++选项卡里的语言页的启用运行时类型信息为:是 (Debug版下设置)

链接器-->System-->子系统-->选择 控制台(/SUBSYSTEM:CONSOLE)

OpenSceneGraph程序需要链接对应的库文件,打开链接器选项卡里的输入页,设置附加依赖项,具体步骤:链接器-->输入-->附加依赖项 中填写
OpenThreadsd.lib

osgd.lib

osgDBd.lib

osgFXd.lib

osgGAd.lib

osgIntrospectiond.lib

osgManipulatord.lib

osgParticled.lib

osgShadowd.lib

osgSimd.lib

osgTerraind.lib

osgTextd.lib

osgUtild.lib

osgViewerd.lib-->确定-->确定

设置编译时头文件路径
工具-->选项-->项目-->VC++ 目录-->显示以下内容的目录(S)-->包含文件如果 如果没有C:/OSG/OSG2.6/include 一项,则在最后面创建一个新的目录-->最后行的地方双击,添上C:/OSG/OSG2.6/include

设置编译时库文件路径

工具-->选项-->项目-->VC++ 目录-->显示以下内容的目录(S)-->库文件如果没有C:/OSG/OSG2.6/debug/lib这一项,在最后面创建一个新的目录-->最后行的地方双击,添上 C:/OSG/OSG2.6/debug/lib

这样,工程属性就设置好了

注:如果在编译时出现不识别OpenThreadsd.lib等lib文件,那么可能是库文件的路径设置有误,或者是这些库文件名被添加了引号或空格,只要在设置附加依赖项中修改即可。

四、环境设置好之后的问题:

1、在cmd中无法识别osg的命令

解决:把环境





的PATH改为C:/OSG/OSG2.6/debug/bin

然后把系统的环境变量改为安装是默认(C:/ProgramFiles/OsgChina/OpenSceneGraph /bin)的,或者在上一步(第三部分的第3点)时直接不要修改环境变量。

2、此时会现生成cmd.exe时出错

在VC2005里打开”工具“菜单,选择”选项“,打开”选项“对话框。然后展开”项目和解决方案“项,选择“VC++目录 ”,然后再其中添加如下这三项就可以了。如下图

$(SystemRoot)/System32
$(SystemRoot)
$(SystemRoot)/System32/wbem





3、VC2005 发布程序的问题:"应用程序正常初始化失败"

打vs补丁

英文补丁 431M

http://download.microsoft.com/download/6/3/c/63c69e5d-74c9-48ea-b905-30ac3831f288/VS80sp1-KB926601-X86-ENU.exe
中文补丁http://download.microsoft.com/download/8/0/7/8071514d-9370-45c3-8af1-4ff09a70e59d/VS80sp1-KB926604-X86-CHS.exe

五、例子

在创建的Test文件中输入以下代码生成一个Simple.osg文件,文件存放于工程的当前目录下(本例为E:/三维系统/testIn8/testIn8),如果要打开系统已有例子的文件,直接使用文件名即可,前提是OSG_FILE_PATH设置正确。

#include <osgViewer/Viewer>

#include <osgDB/ReadFile>

#include<osg/Geode>

#include<osg/Geometry>

#include<osg/ref_ptr>

#include<osgDB/Registry>

#include<osgDB/WriteFile>

#include<osg/Notify>

#include<iostream>

using std::endl;

osg::ref_ptr<osg::Node>createSceneGraph()

{

//创建一个用于保存几何信息的对象

osg::ref_ptr<osg::Geometry>geom=new osg::Geometry;

//创建四个顶点的数组

osg::ref_ptr<osg::Vec3Array>v=new osg::Vec3Array;

geom->setVertexArray(v.get());

v->push_back(osg::Vec3(-1.f,0.f,-1.f));

v->push_back(osg::Vec3(1.f,0.f,-1.f));

v->push_back(osg::Vec3(1.f,0.f,1.f));

v->push_back(osg::Vec3(-1.f,0.f,1.f));

//创建四种颜色的数组

osg::ref_ptr<osg::Vec4Array> c=new osg::Vec4Array;

geom->setColorArray(c.get());

geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);

c->push_back(osg::Vec4(1.f,0.f,0.f,1.f));

c->push_back(osg::Vec4(0.f,1.f,0.f,1.f));

c->push_back(osg::Vec4(0.f,0.f,1.f,1.f));

c->push_back(osg::Vec4(1.f,1.f,1.f,1.f));

//为唯一的法线创建一个数组

osg::ref_ptr<osg::Vec3Array>n=new osg::Vec3Array;

geom->setNormalArray(n.get());

geom->setNormalBinding(osg::Geometry::BIND_OVERALL);

n->push_back(osg::Vec3(0.f,-1.f,0.f));

//由保存的数据绘制四个顶点的多边形

geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4));

//向Geode类中添加几何体(Drawable)并返回Geode

osg::ref_ptr<osg::Geode>geode=new osg::Geode;

geode->addDrawable(geom.get());

return geode.get();

}

int main(int,char**)

{

osg::ref_ptr<osg::Node>root=createSceneGraph();

if(!root.valid())

osg::notify(osg::FATAL)<<"Failed in createSceneGraph()."<<endl;

bool result=osgDB::writeNodeFile(*(root.get()),"Simple.osg");

if(!result)

osg::notify(osg::FATAL)<<"Failed in osgDB::writeNode()."<<endl;

else

{

osgViewer::Viewer viewer;

viewer.setSceneData(osgDB::readNodeFile(("Simple.osg")));

return viewer.run();

}

}

运行结果





补充(2009.10.11)
如果使用的是osg 2.8的版本。直接安装后用cmake生成源码就可以了。

配置的话,建议作以下选择





ACTUAL_3DPARTY_DIR:
即整合的第三方开发库所在目录,在2.8的版本里也还是用以上提到的那一个,即
http://www.openscenegraph.org/downloads/dependencies/3rdParty_Win32binaries_2005_05_10.zip
BUILD_OSG_EXAMPLES:是否编译OSG所有例子程序的选项.(强烈建议选择这一项,这样可以看osg自带的例子,可以给学习过程带来很大的帮助)

BUILD_OSG_WRAPPERS: 这一项要选,不然后面编译自己的测试程序的时候,会报无法打开文件"osgIntrospectiond.lib"错误.

配置完成后,打开生成的源码工程,在作如下设置








而可执行文件则不需要再像2.6版那样,做那么多“不可思议”的工作了。保持默认即可,配置正确情况下应该是这样


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: