摘自:http://blog.csdn.net/robinhao/article/details/1770204
简介
目前世界上比较成熟的Open Inventor(以下简称OIV)开发包有三个,它们分别由SGI( http://www.sgi.com),TGS( http://www.tgs.com)和SIM( http://www.coin3d.org)公司开发的。SGI是最早提出并开发OIV的公司。但SGI的OIV主要用在UNIX操作系统下,没有提供对Microsoft Windows操作系统的支持。TGS公司是最早将OIV由Unix系统移植到Microsoft Windows下的公司。TGS的OIV是目前世界上使用最多的OIV版本。但TGS的OIV是一个商业软件开发包,其购买开发版权的费用非常昂贵,不适合普通用户学习和使用。SIM公司开发的Coin3D OIV可以同时在UNIX和Microsoft Windows下使用。这是一个开放源码的OIV开发包,使用协议采用的是GPL协议。非常适合希望学习使用OIV的普通用户。本文将主要介绍Coin3D OIV开发包在Microsoft Windows操作系统下,Visual C++ 2003开发环境中的安装与使用。
Coin3D的安装
截至到目前(2007年8月),Coin3D的最新版本已经是Coin 2.4.6版本了。但SIM公司还没有提供Coin2.4.6版本的安装程序。目前只提供Coin 2.3.0的安装程序。如果读者不希望太麻烦,我们建议读者下载使用Coin 2.3.0,因为这可以省去很多手工设置。读者可以到这里下载Coin 2.3.0( http://ftp.coin3d.org/coin/bin/win32/all/Coin3D_2.3.0-0.exe大约19M)。这个安装程序中包含有Coin3D OIV的源码、开发库文件、头文件、例子代码、API文档。安装程序和Windows中其它的安装程序基本一样,读者应该可以很轻松地完成安装地工作。
如果读者希望使用Coin地最新版本2.4.6,请首先到这里下载Coin 2.4.6的压缩包( http://ftp.coin3d.org/coin/bin/win32/Coin-2.4.6-bin-msvc7.zip 注意这里下载的是针对VC 2003的版本,在SIM的网站中还有针对VC 6和VC 2005的版本,读者可以根据自己的需要下载),然后解压文件,将解压后的文件拷贝到自己希望的目录下即可。在压缩包中没有包括文档和例子代码。也没有设置相关的环境变量。
开发环境设置
本文假设读者将Coin3D安装
C:/Coin3D目录下。和其它Windows下的开发库类似,Coin3D在VC 2003中也需要首先做开发环境的设置。首先启动VC,选择菜单“Tools”->“Options”,打开VC的Options对话框,然后在对话框中左边的树型列表中选择“Projects”->“VC++ Directories”,在右边的窗口中选择设置“Include files”,增加上Coin3D的Include路径。如下图所示:
还需要在右边的窗口中选择设置“Library files”,增加上Coin3D的Lib路径。如下图所示:
完成上述两步设置之后,基本上就完成了VC++开发环境的设置。
VC++开发一个简单的Coin3D OIV程序
我们将使用VC++ 2003和Coin3D开发一个简单的3D Viewer程序。下面的文档是翻译Coin3D的指南文档( http://www.coin3d.org/windows/tutorial/hello_coin/)。中间做了一些修改
1.首先启动VC 2003,选择菜单“File”|“New”|“Project”
2.选择“Win32”项目类型,以“Win32 Console Application”为项目模版,项目名称“hello_cone”
3.在Win32 Application Wizard中,点击Next按钮。因为我们希望自己提供所有的源文件,所以应该选择“Empty project”复选框。然后点击“Finish”按钮。这时我们就创建了一个叫做hello_cone的新工程。
4.现在我们开始编写代码。我们首先需要向工程中增加一个C++源文件。选择菜单“File ”| “Add New Item”,然后又选择“C++ File (.cpp)”模版,名字为hello_cone.cpp,最后点击“Add”按钮。
在Hello_cone.cpp文件中,我们首先需要包含一些必要的头文件:
#include <Inventor/Win/SoWin.h>
#include <Inventor/Win/viewers/SoWinExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCone.h>
然后我们将在main函数中编写所有必要的代码
Int main(int, char ** argv)
{
[...]
return 0;
}
首先我们初始化SoWin(同时隐含初始化Coin),之后将返回一个顶层窗口供我们使用。
HWND window = SoWin::init(argv[0]);
if (window==NULL) exit(1);
然后我们创建一个观察器(Viewer):
SoWinExaminerViewer * viewer = new SoWinExaminerViewer(window);
我们的场景是由两个节点组成的:根节点和几何物体。我们先创建好这两个节点,然后再将几何物体作为子节点增加到根节点中。为了防止根节点被删除(因为它的引用计数值为0),我们需要对根节点调用ref()函数。
SoSeparator * root = new SoSeparator;
SoCone * cone = new SoCone;
root->ref();
root->addChild(cone);
现在我们为观察器设置渲染场景(用根节点来表示)
viewer->setSceneGraph(root);
viewer->show();
最后,我们让SoWin显示窗口,并进入消息循环。
SoWin::show(window);
SoWin::mainLoop();
当应用程序结束后,要删除观察器,我们还要对根节点调用unref()函数。
root->unref();
delete viewer;
下面是例子的完整代码:
#include
<
Inventor
/
Win
/
SoWin.h
>
#include
<
Inventor
/
Win
/
viewers
/
SoWinExaminerViewer.h
>
#include
<
Inventor
/
nodes
/
SoSeparator.h
>
#include
<
Inventor
/
nodes
/
SoCone.h
>
int
main(
int
,
char
**
argv)
{ HWND window = SoWin::init(argv[0]); if (window==NULL) exit(1); SoWinExaminerViewer * viewer = new SoWinExaminerViewer(window); SoSeparator * root = new SoSeparator; SoCone * cone = new SoCone; root->ref(); root->addChild(cone); viewer->setSceneGraph(root); viewer->show(); SoWin::show(window); SoWin::mainLoop(); delete viewer; root->unref(); return 0; }
4.在我们开始编译运行代码前,我们还需要对项目做一些有关Coin的设置。点击菜单“Projects”,选择“hello_cone properties”
5.选择Configuration Properties | C/C++ | Preprocessor,增加上COIN_DLL和 SOWIN_DLL预定义
6.选择Configuration Properties | Linker | Input,增加上coin3d.lib和sowin1d.lib两个库文件
7.现在我们就可以编译并运行hello_cone应用程序了。选择Build | Build Solution,然后运行这个应用程序。
程序的运行结果:
这个程序提供了基本的交互功能,读者可以在窗口中点击鼠标,转动Cone。