前言

最近项目上需要机器人仿真界面的实现,查阅相关资料后准备入坑Coin3D。但是在安装时就遇到的大麻烦,现有的一些博文都是在VS2010或者2013或者2015的环境下配置的,那会只需要在Coin3D的官网下载必要的库解压下来,配置一下环境,就可以用了。但是现在官方网址移到了Github,之前的方法也早已不适用,所以,特在此记录一下作者最新的编译过程以及遇到的一些坑。(可能有的小伙伴已经要开会了,我下载别人编译好的不一样可以用,一天天净整这些花里胡哨的)。确实,如果大家图省事的话,可以直接下载别人编译好的Coin3D去使用,就不需要看后面的内容了,我也会上传我编译好的Coin3D供大家使用。但是这里就要说一句了,有句老话说得好,授人以鱼不如授人以渔,我还是稍稍的记录一下哈哈。 ——2021/5/17

Coin3D简介

目前世界上比较成熟的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的普通用户。详情查看Open Inventor 简介

下图是Coin3D官网中的架构图
在这里插入图片描述
下表列出了Coin3D所包含的组件及其主要用途。其中绿色的部分为必装组件,黄色的部分需要根据不同的平台来选用,青色的部分为可选组件。对于Windows平台而言,必选的组件为Coin、SoWin、Soqt、Quarter。Simage和Simvoleon可根据实际需要进行选择。
在这里插入图片描述
本文将主要介绍Coin3D OIV开发包在Microsoft Windows操作系统下,Visual Studio2019开发环境中的安装与使用。

环境

Windows10 x64系统下使用VS2019与QT5.15.2,VS中qt插件使用最新的2.7.1
VS2019与QT的配置参考VS2019+Qt

Coin3D编译

按照Coin3D在Github上官方库的安装说明,执行如下步骤:

1、Cmake安装

版本:cmake3.20.2
用来编译coin3d源代码,参考Windows下的CMake下载与安装,在cmake官网下载图形界面安装文件直接装即可。

2、Git安装

主要用来下载GitHub上面的coin3d源代码进行之后的编译操作,不装git直接在GitHub下载源码压缩包应该也是可以的,只是不知道下载下来的版本一致不一致。我这里由于一直在用Git的缘故,直接按照官网的步骤来做了。
git安装参考这里

3、Boost安装

版本:1.76
参考此博文

4、Doxygen安装

版本:1.9.1
Doxygen用来自动生成说明与操作文件,编译coin3d时默认是要生成相关文件的,所以需要Doxygen。
如果选择不生成这些说明文件,也可以不安装。
Doxygen安装就是普通软件的安装了,进去官网下载安装包,一步步点击下一步即可。

5、编译Coin

首先要确定在你的系统上有哪些编译器被cmake支持。在命令行使用 cmake --help 可以查看。我这里结果如下,标 * 的是当前的编译器,因为我这里的环境是VS2019,所以要用Visual Studio 16 2019
如果这里你的选项不是VS2019,需要使用命令cmake -G来显示指定。如果不指定,cmake会选择默认编译器来进行编译。

Generators

The following generators are available on this platform (* marks default):
 - Visual Studio 16 2019        = Generates Visual Studio 2019 project files.
                                 Use -A option to specify architecture.
  Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project files.
                                 Optional [arch] can be "Win64" or "IA64".
  Borland Makefiles            = Generates Borland makefiles.
  NMake Makefiles              = Generates NMake makefiles.
  NMake Makefiles JOM          = Generates JOM makefiles.
  MSYS Makefiles               = Generates MSYS makefiles.
  MinGW Makefiles              = Generates a make file for use with
                                 mingw32-make.
  Green Hills MULTI            = Generates Green Hills MULTI files
                                 (experimental, work-in-progress).
  Unix Makefiles               = Generates standard UNIX makefiles.
  Ninja                        = Generates build.ninja files.
  Ninja Multi-Config           = Generates build-<Config>.ninja files.
  Watcom WMake                 = Generates Watcom WMake makefiles.
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.
  CodeBlocks - NMake Makefiles JOM
                               = Generates CodeBlocks project files.
  CodeBlocks - Ninja           = Generates CodeBlocks project files.
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.
  CodeLite - MinGW Makefiles   = Generates CodeLite project files.
  CodeLite - NMake Makefiles   = Generates CodeLite project files.
  CodeLite - Ninja             = Generates CodeLite project files.
  CodeLite - Unix Makefiles    = Generates CodeLite project files.
  Eclipse CDT4 - NMake Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - MinGW Makefiles
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
  Kate - MinGW Makefiles       = Generates Kate project files.
  Kate - NMake Makefiles       = Generates Kate project files.
  Kate - Ninja                 = Generates Kate project files.
  Kate - Unix Makefiles        = Generates Kate project files.
  Sublime Text 2 - MinGW Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - NMake Makefiles
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles
                               = Generates Sublime Text 2 project files.
  • 下载源码(默认下载到用户目录下):

    git clone --recurse-submodules https://github.com/coin3d/coin coin
    
  • 配置编译选项:

    cmake -Scoin -Bcoin_build -DCMAKE_INSTALL_PREFIX=C:\Coin3D -DBOOST_ROOT=C:\Data\Boost-1.56.0 -DCOIN_BUILD_DOCUMENTATION=OFF
    

    如果cmake版本低于3.13,将选项-S改为-H
    -S指源码路径,这里就是下载下来的coin库的文件夹名
    -B指编译路径,coin_build就是编译文件所在的文件夹名。如果不存在此文件夹则自动创建(不需要自己新建文件夹)
    -DCMAKE_INSTALL_PREFIX是你的Coin3D相关库的安装目录,可以提前建好Coin3D文件夹,路径中不要包含中文
    -DBOOST_ROOT是你之前安装的boost的安装目录,这里要做修改,改成你自己的boost的安装目录
    -DCOIN_BUILD_DOCUMENTATION=OFF指是否生成编译相关的html文件和帮助文档。官网说默认OFF,和上面的Doxygen的用法介绍那边不知道是不是一个东西,没有深究。这里可以选 OFF,因为生成的文档在Documentation 都可以找到

  • 编译Coin库

    cmake --build coin_build --target ALL_BUILD --config Release -- /nologo /verbosity:minimal /maxcpucount
    

    如果编译Debug版本,只需将Release 改为Debug

  • 安装Coin库

    cmake --build coin_build --target INSTALL --config Release -- /nologo /verbosity:minimal /maxcpucount
    

    如果编译Debug版本,只需将Release 改为Debug

6、编译Soqt

步骤与coin类似

  • 下载源码(默认下载到用户目录下):

    git clone --recurse-submodules https://github.com/coin3d/soqt soqt
    
  • 配置编译选项:

    cmake -Ssoqt -Bsoqt_build -A x64 -DCMAKE_INSTALL_PREFIX=C:\Coin3D -DCMAKE_PREFIX_PATH="C:\Coin3D;C:\Qt\5.15.2\msvc2019_64" -DBOOST_ROOT=C:\Data\Boost-1.56.0 -DSOQT_BUILD_DOCUMENTATION=OFF
    

    选项解释参考Coin

  • 编译Soqt库

    cmake --build soqt_build --target ALL_BUILD --config Release -- /nologo /verbosity:minimal /maxcpucount
    

    如果编译Debug版本,只需将Release 改为Debug

  • 安装Soqt库

    cmake --build soqt_build --target INSTALL --config Release -- /nologo /verbosity:minimal /maxcpucount
    

    如果编译Debug版本,只需将Release 改为Debug

7、编译Quarter

参考Soqt,只需要将相关命令中的soqt改成quarter,SOQT改为QUARTER

8、编译Sowin

参考Soqt,只需要将相关命令中的soqt改成sowin,SOQT改为SOWIN

  • Sowin库下载问题:下载时遇到无法下载的问题,改用下面的命令行可解决

    git clone --recurse-submodules https://github.com/coin3d/sowin.git
    

9、编译Simage

编译时遇到BUG,由于暂时用不到此库,暂时搁置

10、编译simvoleon

编译时遇到BUG,由于暂时用不到此库,暂时搁置

至此,Coin3D库编译完成,配置一下就可以使用。目录结构如下图所示:
在这里插入图片描述
在这里插入图片描述

试运行

首先,需要电脑上已经安装VS2019, QT和VS下的QT扩展Qt VS Tool,这里不详细说明。新建项目时选择widget项目,然后就是VS 2019 下的配置了。

需要设置include、lib、和input。

(1)c/c+±->General–>Additional Include Directories, 添加目录“****\Coin3D\include”

(2)Linker–>General --> Additional Library Directories, 添加目录 “******\Coin3D\lib”

(3)Linker -->Input–>Additional Dependencies, 添加目录*.lib文件名,如Coin4d.lib;Quarter1d.lib;SoQt1d.lib;SoWin1d.lib等

main.cpp添加代码如下:

#include <QtWidgets/QApplication>
#include <Inventor/Qt/SoQt.h>
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
#include <Inventor/nodes/SoSeparator.h>
#include <Inventor/nodes/SoCube.h>
 
int main(int argc, char *argv[])
{
 
	QWidget* mainwin = SoQt::init(argc, argv, argv[0]);
 
	SoSeparator* root = new SoSeparator();
	root->ref();
	SoCube* cube = new SoCube();
	root->addChild(cube);
 
	SoQtExaminerViewer* eviwer = new SoQtExaminerViewer(mainwin);
	eviwer->setSceneGraph(root);
	eviwer->show();
	SoQt::show(mainwin);
	SoQt::mainLoop();
 
	root->unref();
	delete eviwer;
	return 0;
}

不出意外会出现错误提示:
在这里插入图片描述
需要设置SOQT_DLL的预处理。方法是在C/C++ -> Preprocessor -> Preprocessor Definitions, 添加SOQT_DLL

运行结果如下:
在这里插入图片描述

试运行BUG汇总

Bug0

在这里插入图片描述
需要设置SOQT_DLL的预处理。
解决方法:在C/C++ -> Preprocessor -> Preprocessor Definitions, 添加SOQT_DLL

Bug1

在这里插入图片描述

当前项目编译环境不是Debug

解决方法:修改下图的Release为Debug

在这里插入图片描述

Bug2

在这里插入图片描述
没有添加dll文件路径

解决方法:
1、只要在电脑的用户变量或者系统变量的path里面把相关dll的路径加上就行了
2、也可以把Coin3D目录下的bin文件夹下dll文件复制到当前工程目录

参考:
配置COIN3D的DLL路径
VS项目中引入dll的方法

Bug3

在这里插入图片描述
没有添加附加依赖项,导致链接出错。

解决方法:Linker -->Input–>Additional Dependencies, 添加目录*.lib文件名,如Coin4d.lib;Quarter1d.lib;SoQt1d.lib;SoWin1d.lib等

参考资料

Open Inventor 简介
Open Inventor学习资源
基于VS2019+QT的Coin3D三维可视化库的安装预测测试

参考书籍

The Inventor Mentor-关于这本书

GitHub附件

编译好的文件coin3d文件

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐