OpenSceneGraph3.0.1for VS2010-X86-32bit平台
OpenSceneGraph库下载(Binary版Debug和Release版都有)
----------------------------------------------------------------------------------------------------
一、下载库文件
首先到官网 OSG官网binary下载地址或者以上网址下载OSG编译好的动态链接库文件,下载之后解压到合适的目录。
我的新建一OSG目录,然后建立库文件目录
Release版新建目录为OpenSceneGraph,拷贝相应的文件(只include和lib目录即可),bin目录下存放的是对应的dll文件,发布程序时需放在与可执行文件相同的目录下
Debug版新建目录为OpenSceneGraphD,拷贝响应的文件(只include和lib目录即可),bin目录下存放的是对应的dll文件,发布程序时需放在与可执行文件相同的目录下
为了方便,Release和Debug包含文件和库文件路径统一为同一个路径,可以将Debug版下的bin文件相应的xxx_xxd.dll拷贝到Release版bin目录下,Debug版下的lib目录下文件拷贝到Release版lib目录下。
开发程序的话,使用OSG的话上面所说的include和lib目录就可以了,其中include目录保存包含文件,lib目录保存库文件,另外发布程序还需bin目录下的dll
其余各目录分别为:
①bin目录
其中bin目录下放的发布程序依赖的DLL,另外bin目录下还有OSG已经编译好的一些实用可执行程序工具,比如
场景浏览器osgViewer
版本信息查看器osgVersion
场景图形压缩归档工具osgArchive
数据转换工具osgConv
②data目录
存放示例程序的一些模型文件和图片文件
③doc目录
有两个目录
《OpenSceneGraphReferenceDocs》
OSG的帮助文档,宏定义、类型定义和函数说明、文件组织目录等
《OpenThreadsReferenceDocs》
OpenThreads帮助文档
其中OpenThreads是一个跨平台,面向对象的线程库。此开源工程在SourceForge上的链接为: http://openthreads.sf.net
OpenSceneGraph及OpenProducer均使用OpenThreads提供全部的线程开发支持。
以下的文字可以在点击OpenThreads的链接滞后看到:
OpenThreads核心CVS服务器已经改变了!OpenThreads的CVS服务器已经放置于openscenegraph.org上。用户不必登陆SourceForge或者openscenegraph.org以获取OpenThread的更新版本。请使用下面的命令签出:
cvs -d :pserver:cvsguest@openscenegraph.org:/cvs/openthreads co OpenThreads
这样用户就可以获得最新CVS版本的OpenThreads了。
④share目录
share\OpenSceneGraph\bin保存示例程序
二、设置环境变量
为了方便使用OSG提供的bin中的实用工具,需要把目录加到环境变量中
为了使用data中的数据,也需加到环境变量中
系统环境变量对所有用户起作用,而用户环境变量只对当前用户起作用
方法如下:
右击“我的电脑”图标→属性→高级→环境变量
添加环境变量
PATH为你所在的上面的osgbin目录,我这里为E:\OSG\OpenSceneGraph\bin,当然示例程序的路径也可加到这里,我的为E:\OSG\OpenSceneGraph\share\OpenSceneGraph\bin,多个目录之间用“;”分号隔开
如E:\OSG\OpenSceneGraph\bin;E:\OSG\OpenSceneGraph\share\OpenSceneGraph\bin
OSG_FILE_PATH为数据目录,我这里为E:\OSG\OpenSceneGraph\data
环境变量配置结束。
---------------------------------------------------------------------------------------------------------------------------------------------------------------
测试(E:\OSG\OpenSceneGraph\bin下)实用工具
运行命令行——按下Windows图标+R
输入cmd
输入osgviewer cow.osg
正常的话全屏显示cow三维场景,其他几个实用工具也可以测试
--------------------------------------------------------------------------------------------------
测试(E:\OSG\OpenSceneGraph\share\OpenSceneGraph\bin下)例子
运行命令行——按下Windows图标+R
输入cmd
在命令行下输入
osgforest.exe
显示如下
三、编写第一个程序
下面,让我们开始新建第一个OpenSceneGraph项目。
①新建控制台程序
“文件”→“新建项目”→Win32 控制台程序,名称osgVR,根据向导默认到完成。②设置项目属性,添加包含文件目录和库文件目录
这里仅设置Debug版为例,Release版与此类似
需要注意的是:Debug版此时对于链接器输入lib文件名后缀比Release版多一个字母d,表示debug版,
右击弹出菜单选择“属性”
其中“配置(C)”项说明是对Debug还是Release版,根据需要选择
需要设置三项分别是包含文件目录include、lib库文件目录和链接器
下面j截图中的osgPaticled.lib修改为osgParticled.lib,所有链接如下
OpenThreadsd.lib
osgd.lib
osgDBd.lib
osgFXd.lib
osgGAd.lib
osgManipulatord.lib
osgParticled.lib
osgShadowd.lib
osgSimd.lib
osgTerraind.lib
osgTextd.lib
osgUtild.lib
osgViewerd.lib
③编写代码
只需修改osgVR.cpp代码如下#include "stdafx.h"
#include <osgViewer/viewer>
#include <osg/Node>
#include <osg/geode>
#include <osg\group>
#include <osgDB/readfile>
#include <osgDB/writefile>
#include <osgUtil\optimizer>
int _tmain(int argc, _TCHAR* argv[])
{
osg::ref_ptr<osgViewer::Viewer> viewer=new osgViewer::Viewer();
osg::ref_ptr<osg::Group> root=new osg::Group();
osg::ref_ptr<osg::Node> node=osgDB::readNodeFile("cow.osg");
root->addChild(node.get());
osgUtil::Optimizer optimizer;
optimizer.optimize(root.get());
viewer->setSceneData(root.get());
viewer->realize();
viewer->run();
return 0;
}
此时调试或运行会提示找不到×××.dll文件,原因在于我们并没有加入到目录中,
拷贝E:\OSG\OpenSceneGraphD\bin(Debug版dll)目录下的所有文件到与当前生产的可执行文件相同目录,
比如当前生成的为Debug版可执行程序osgVR.exe,路径为E:\test\OSG\osgVR\Debug\osgVR.exe,那么当前可执行程序所在目录则是E:\test\OSG\osgVR\Debug\。
此时双击osgVR.exe,运行结果如下。
需要注意的是,这里可以显示cow,是因为cow.osg文件所在的data目录加入到了环境变量中,程序会自动搜索包含在环境路径中的目录,
osg::ref_ptr<osg::Node> node=osgDB::readNodeFile("cow.osg");
这里使用的是相对路径
如果需要读取的文件不在搜索范围内,需要把文件加入到程序可以搜索到的目录内,如果文件名不加任何路径,默认为当前程序所在目录,也就是osg.exe所在目录,只要把需要读取的文件与osgVR.exe放在同一个文件夹下即可。
第0课结束
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
VS2010中已经不能通过设置工具→选项来设置包含文件和库文件目录,如下图所示
单击右上角?图标,查看MSDN帮助链接,看到如下界面
可以指定下列目录类型。
指定每个项目的目录列表
在“项目”菜单上,单击“属性”。有关更多信息,请参见 如何:打开项目属性页。
在“属性页”对话框中,单击“配置属性”,然后单击“VC++ 目录”。
-
若要编辑一个目录列表,请单击其名称、单击显示的箭头,然后单击“编辑”以为所选的目录类型打开一个对话框。
可以添加或删除值,也可以重新排列已添加的任何值。您还可以选择或清除“继承来自父或项目的默认值”。
注意 默认情况下,用 Visual Studio 继承标准目录列表创建项目。
指定每个用户的目录列表
在“视图”菜单中,单击“属性管理器”。
-
在“属性管理器”中,单击配置和平台节点;例如“调试 | Win32”。
节点展开并显示用户属性页,如“Microsoft.Cpp.”<平台>“.user”,其中 <平台> 是系统定义的值,如“Win32”或“X64”。项目的 <platform> 值与平台必须相同。
-
双击用户属性表或单击用户属性表,然后在快捷菜单中单击“属性”。
此时将显示 <用户属性表>“属性页”对话框,并突出显示“VC++ 目录”节点。
编辑目录列表,如“指定项目目录列表”的步骤 3 中的前面部分所述。
--------------------------------------------------
error c101008d: Failed to write the updated manifest to the resource of file
错误 92 error c101008d: Failed to write the updated manifest to the resource of file
解决方案决方案
项目属性——配置属性——链接器——清单文件中,把生成清单改成否就行了 <-- 可能会导致编译好的库无法注册(我遇到过)
Linker --> Manifest File
项目属性——配置属性——清单工具——输入和输出中,把嵌入清单改成否 < --
Manifest Tool --> Input and Output