在Windows环境中,Coin3D只能配合Visual Studio(确切地说是Visual C++)一起使用。Coin3D支持Visual C++的多个版本,包括6.0、7.0(2002)、7.1(2003)、8.0(2005)和9.0(2008)。
首先进入Coin3D官方网站的下载页面http://www.coin3d.org/lib/downloads,选择下载开源软件。对于Windows平台而言,必选的组件为Coin、SoWin和simage,而Dime、Profit和Voleon可根据实际需要进行选择。这里不必去下载了,在里提供了coin3D组件,版本3.1.3.
1.安装前的准备工作
1)安装好开发环境(例如Vsiual Studio 2008);
2)建立目标文件夹(例如C:\Coin3D,也称之为$(COINDIR))。
3)设置环境变量:新建一个环境变量COINDIR,设置为“C:Coin3D”
2.Coin组件的安装
Coin组件的安装方式有两种:一种是下载Coin的源代码文件,通过生成解决方案的方法来实现安装过程;另一种方法是直接下载针对某个VC版本的组件包,解压缩到$(COINDIR)目录。由于后一种方法比较简单,而且在安装的过程中不会出现错误,推荐初学者使用。
1)在Coin 3.1.3的页面上,选择“Get Coin 3.1.3 for Windows(Visual C++ 9.0 binaries)”,下载到您的计算机。
2)将Coin-3.1.3-bin-msvc9.zip解压到C:\Coin3D文件夹,您将发现C:\Coin3D目录中增加了四个文件夹。此时,Coin组件已经安装就位。
3.SoWin组件的安装
SoWin组件的安装相对复杂些,步骤如下。
1)在SoWin1.5.0的页面上,下载SoWin1.5.0的源代码压缩包(一般选择zip格式)。
2)将SoWin-1.5.0解压到某个文件夹(除了C:\Coin3D),在…\SoWin-1.5.0\build\msvc9文件夹中找到sowin1.sln,双击它。Visual C++ 2008会自动启动,并将解决方案“sowin1”装载进来。
3)点击生成菜单下的“生成解决方案”,则解决方案会被重新生成。此时,可以发现msvc9文件夹中增加了一个sowin1d.dll文件和一个debug子目录。
4)将解决方案的配置改成“DLL(Release)”,再次生成解决方案。则msvc9文件夹中又增加了一个sowin1.dll文件和一个Release子目录(其中含有sowin1.lib)。
打开C:\Coin3D文件夹,发现C:\Coin3D\bin文件夹中增加了sowin1.dll、sowin1d.dll、sowin1d.pdb,C:\Coin3D\lib文件夹中增加了sowin1.lib和sowin1d.lib,C:\Coin3D\include\Inventor中增加了Win文件夹,其中含有一大堆与SoWin有关的头文件。此时,说明SoWin组件已安装成功。
其他组件的安装方法与上述一样,在这里我安装的是SoQt。
4.VS2008中的配置
- 1.VC++目录——包含文件:增加Coin3D的包含文件,在此我是放在了E盘下的Coin3D文件夹下,因此为“C:\Coin3D\include”
- 2.VC++目录——库文件:增加Coin3D的库文件“C:\Coin3D\lib”,点击“确定”
- 3.项目属性——配置——所有配置——C/C++——预处理器——预处理器定义中添加COIN_DLL;SOWIN_DLL;SOQT_DLL
- 4.配置——Debug——链接器——输入——附加依赖项中添加:coin3d.lib sowin1d.lib soqt1d.lib
- 5.配置——Release——链接器——输入——附加依赖项中添加:coin3.lib sowin1.lib soqt1.lib
5.配置完成,验证一下
1.新建一个工程,取名为OpenInventor,在ui里添加一个widget,保存。
2.在头文件里:
#ifndef OPENINVENTOR_H
#define OPENINVENTOR_H
#include <QtGui/QWidget>
#include "ui_OpenInventor.h"
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCylinder.h>
class OpenInventor : public QWidget
{
Q_OBJECT
public:
OpenInventor(QWidget *parent = 0, Qt::WFlags flags = 0);
~OpenInventor();
private:
Ui::OpenInventorClass ui;
};
#endif // OPENINVENTOR_H
3.CPP文件里:
#include "OpenInventor.h"
OpenInventor::OpenInventor(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
SoQt::init(ui.widget);
SoQtExaminerViewer * viewer = new SoQtExaminerViewer(ui.widget);
SoSeparator * root = new SoSeparator;
SoCylinder * cylinder = new SoCylinder;
root->ref();
root->addChild(cylinder);
viewer->setSceneGraph(root);
viewer->show();
SoQt::show(ui.widget);
SoQt::mainLoop();
}
OpenInventor::~OpenInventor()
{
}
4.运行结果:
欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot
欢迎关注Jungle的微信公众号:Jungle笔记