Open Inventor Coin3D
一、软件集成:C++调用Open Invetor 库函数显示3D点云
通过三维操作菜单进入数据采集的对话框部分
通过三维操作菜单进入点云显示(工程文件为SDIshow3D),读取Pts三维坐标点云文件
二、Coin3D与 Visual Studio 2008 配置
Coin3D 是一款免费的Open Inventor图形库,下载地址:http://www.coin3d.org
下表列出了Coin3D所包含的组件及其主要用途。其中绿色的部分为必装组件,黄色的部分需要根据不同的平台来选用,青色的部分为可选组件。对于Windows平台而言,必选的组件为Coin、SoWin和simage,Dime、Profit和Voleon可根据实际需要进行选择。
需要注意的是,Coin3D的每个组件都具有自己的版本号。这说明每个组件都是单独开发和演进的,各个组件之间在架构上是相互兼容的,并不要求组件之间的版本互相搭配。例如,Coin的3.1.2版本可以搭配SoWin 1.4.0,也可以搭配SoWin 1.5.0。这样,使得每个组件的最新版本都能得到及时地应用,也为用户提供了更多的灵活性。因此,Coin3D的每个组件都是单独发行的。提供安装包的做法,为用户提供了较大的便利,但也会“培养”用户的惰性,不会主动地更新各个组件的版本。所以,SIM选择了放弃了这种方式。
u VS2008及Coin的安装
1) 安装好开发环境(VS2008)。
2) 把下载到的rar文件解压到目标文件夹(例如D:/Coin-3.1.3-bin-msvc9,以下称之为$(COINDIR))。解压后得到4个文件夹,建议放在C:\Coin3D目录下,以防出错。
3) 设置环境变量,如下图所示:
u SoWin的安装:
第一步:解压,放到某个盘的根目录下(或其他目录),例如E:\SoWin-1.5.0.
第二步:找到E:\SoWin-1.5.0\build\msvc9目录,点击sowin1.sln,这是vs2008工程文件。打开后可以发现里面包含了4个项目。这时候别直接生成解决方案,第2关于文档的项目有错误,只要依次对第1,3项目生成解决方案即可。
u VS2008的配置
(1)工具-》选项-》项目和解决方案-》VC++目录,选中“包含文件”,添加“$(COINDIR)\include”。
(2)将“配置”下拉到“所有配置”,项目-》属性-》C/C++ -》预处理器-》预处理器定义,添加COIN_DLL;SOWIN_DLL;两项内容。
(3)将“配置”下拉到“所有配置”,项目-》属性-》链接器 -》常规-》附加库目录,添加$(COINDIR)\lib。
(4)将“配置”下拉到“Debug”,项目-》属性-》链接器 -》输入-》附加依赖项,添加coin3d.lib sowin1d.lib。
(5)将“配置”下拉到“Release”,项目-》属性-》链接器 -》输入-》附加依赖项,添加coin3.lib sowin1.lib。
(6)在上述操作完成后,C:\Coin3D\bin目录下将会新增sowin1d.dll, sowin1.dll动态链接库。
u 测试
新建一个win32的测试程序(借用Coin3d公司网站上的一个程序),再根据以上设置完成之后,修改主程序至如下:
#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;
}
u 生成可执行文件
可选两种生成模式,调试为Debug,发布为Release。将生成后的exe文件以及以下dll文件置于同一目录下发布。
1) bin/coin2.dll - the main Coinlibrary
2) bin/sowin1.dll - the Win32 GUIlibrary
3) bin/simage1.dll - for texturesupport
4) msvcrt.dll - the MS CRTruntime, usually found in %SystemRoot%\System32
u 运行结果(生成圆锥体)
三、在MFC和Visual C++中使用Coin(单文档/多文档)
1、创建工程
启动VC6.0,创建新的工程,File | New | Projects | MFC AppWizard (exe)。假设工程名为"MFCViewer"。对向导使用默认配置,可以创建单文档或多文档程序。
2、为SoWin和Coin添加代码
u 打开MFCViewer.cpp文件。
包含头文件:
#include <Inventor/Win/SoWin.h>
编辑函数CMFCViewerApp::InitInstance(),在第一行中添加:
SoWin::init("");
上述用于初始化SoWin和Coin库,在使用这些函数库之前必须被调用。
u 打开MFCViewerView.h文件。
在预编译头之后(#ifdef/#pragmaonce/#endif sequence)添加包含文件:
#include <Inventor/Win/SoWin.h>
#include<Inventor/Win/viewers/SoWinExaminerViewer.h>
添加公共数据成员:
SoWinExaminerViewer * viewer;
ExaminerViewer用于渲染场景,且用于交互显示(旋转,选择部分场景等)
u 打开文件MFCViewerView.cpp。
1) 修改构造函数如下:
CMFCViewerView::CMFCViewerView()
{
viewer = NULL;
}
2) 修改析构函数 如下:
CMFCViewerView::CMFCViewerView()
{
if (viewer != NULL)
delete viewer;
}
3) 修改方法CMFCViewerView::OnDraw(CDC*pDC) 如下:
void CMFCViewerView::OnDraw(CDC* pDC)
{
CMFCViewerDoc* pDoc =GetDocument();
ASSERT_VALID(pDoc);
if (viewer == NULL)
{
viewer = newSoWinExaminerViewer( m_hWnd );
viewer->setDecoration(FALSE);
WINDOWPLACEMENT p;
memset(&p, 0,sizeof(p));
p.length =sizeof(WINDOWPLACEMENT);
p.showCmd =SW_SHOWMAXIMIZED;
SetWindowPlacement(&p);
}
};
这会将ExaminerViewer嵌入到CMFCViewerView窗口中。
4) 在窗口中加入可查看的形状
添加头文件:
#include <Inventor/nodes/SoSeparator.h> // remove me later
#include <Inventor/nodes/SoCone.h> // remove me later
修改方法CMFCViewerView::OnDraw(CDC*pDC) 如下:
void CMFCViewerView::OnDraw(CDC* pDC)
{
CMFCViewerDoc* pDoc =GetDocument();
ASSERT_VALID(pDoc);
if (viewer == NULL)
{
viewer = newSoWinExaminerViewer( m_hWnd );
viewer->setDecoration(FALSE);
SoSeparator *root = newSoSeparator; // remove me later
root->addChild(newSoCone); // remove me later
viewer->setSceneGraph(root); // remove me later
}
}
3、创建一个场景
当用户创建新文档时(File |New),用于创建一个默认场景图。了解使用Coin创建一个场景。
u 打开文件MFCViewerDoc.h。
1) 添加类定义:
classSoSeparator;
这将通知编译器使用SoSeparator类。
2) 添加公共数据成员到CMFCViewerDoc class:
SoSeparator*root;
这是场景中的最高节点。
u 打开文件MFCViewerDoc.cpp。
1) 添加头文件如下:
#include<Inventor/nodes/SoSeparator.h>
#include<Inventor/nodes/SoMaterial.h>
#include<Inventor/nodes/SoCone.h>
#include<Inventor/nodes/SoTranslation.h>
#include<Inventor/nodes/SoText2.h>
2) 修改方法OnNewDocument()如下:
BOOLCMFCViewerDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
root = new SoSeparator;
root->ref();
SoMaterial *myMaterial;
root->addChild(myMaterial = newSoMaterial);
myMaterial->diffuseColor.setValue(1.0, 0.0,0.0);
root->addChild(new SoCone);
SoSeparator * instructsep = new SoSeparator;
root->addChild(instructsep);
instructsep->addChild(myMaterial = newSoMaterial);
myMaterial->diffuseColor.setValue(0.5,1.0, 1.0);
SoTranslation * instructtrans = newSoTranslation;
instructtrans->translation =SbVec3f(-2.0f, 1.3f, 2.0f);
instructsep->addChild(instructtrans);
SoText2 * instructions = new SoText2;
const char * str[] = {
"Instructions for the MFCViewertutorial",
"",
"Left mouse button = rotate",
"Middle mouse button = move",
"CTRL + middle mouse button =zoom",
"Right mouse button = options"
};
instructions->string.setValues(0,sizeof(str) / sizeof(char *), str);
instructions->justification = SoText2::LEFT;
instructsep->addChild(instructions);
return TRUE;
}
通过添加子节点到根节点来创建场景。Coin管理删除所有场景物体,所以不需要程序员去记住任何对象指针并删除它们(事实上,这样做是错误的)。这种技术通过引用计数与调用函数root->ref();以上可确保Coin不会尝试删除根节点或任何子节点。
3) 修改构造函数与析构函数如下:
CMFCViewerDoc::CMFCViewerDoc()
{
root = NULL;
}
CMFCViewerDoc::~CMFCViewerDoc()
{
if (root)
root->unref();
}
调用root->unref()来通知Coin不再使用根节点,Coin可以将其删除。
u 打开文件MFCViewerView.cpp。
1) 添加如下头文件:
#include<Inventor/nodes/SoSeparator.h>
2) 修改方法CMFCViewerView::OnDraw(CDC* pDC)如下:
voidCMFCViewerView::OnDraw(CDC* pDC)
{
CMFCViewerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (viewer == NULL)
{
viewer = new SoWinExaminerViewer( m_hWnd );
viewer->setDecoration(FALSE);
SoSeparator *root = GetDocument()->root;
viewer->setSceneGraph(root);
}
}
修改OnDraw方法来获取文档对象的根场景
u 编译并运行项目。应用程序启动并打开一个窗口,显示出我们刚刚创建的场景图。
Open Inventor Coin3D相关推荐
- Coin3d环境搭建(VS2019+QT),实现基于Open Inventor机器人图形交互
先下载VS2019下载 Visual Studio Tools - 免费安装 Windows.Mac.Linux (microsoft.com) 这里点下载然后界面拖到最下点击较早的下载项 下载这个2 ...
- VS2010 + QT 5 +open inventor 环境配置
本科毕业设计做的是 随钻测量的井眼轨迹和测井曲线的三维显示 要求的环境是 QT + Open Inventor 在寒假开学前,打算将环境配置好,开学后再正式编码实现,可是....环境也 ...
- Open Inventor 简介
深入学习资料:http://blog.csdn.net/robinhao Open Inventor 简介 简介 Open Inventor(以下简称OIV)是SGI公司开发的基于OpenGL的面向对 ...
- Open Inventor: Windows系统下编译安装Quater
Windows系统下编译安装Quater 济南友泉软件有限公司 一.工具安装 1.1 CMake CMake是一个用于生成不同平台下构建项目的工具.建议使用3.0版本之后的CMake.下载链接 1.2 ...
- Android在线开发工具 App Inventor
最近在博客园看到一篇报道关于一个人好像是别出心裁的用android程序求婚,最后成功了,在留言部分看到很多园友说:好浪漫,好幸福:文章中提到的一个在线开发程序,叫做app invertor,于是在网上 ...
- 【AI2】更新app inventor离线开发环境百度网盘下载链接,安卓app图形化开发环境...
只先存了百度网盘,知道大家有意见,目前还没找到更好的存储位置,找到后会立刻更新,没有百度会员的朋友可以加群,群里定期更新(你懂的)账号.着急用的朋友也可以QQ私聊我,在线发送. 软件使用: 解压之后运 ...
- 【AI2】喜讯!app inventor最近进展,实现流媒体视频播放
运气不错,没费多少时间居然整出来了,虽然不难,但对我这个app inventor新手来说还是一件非常值得高兴的事,下边把几处容易出错的地方总结分享给大家,希望大家少走弯路. 如标题所示[AI2]作为新 ...
- 双击打开Inventor文件
为什么80%的码农都做不了架构师?>>> 出现的问题: 正常启动电脑后,我双击桌面上的一个idw文件,默认使用 Inventor 2013 打开该格式的文件:但 Invento ...
- inventor如何钣金出弧面_Inventor教程之钣金多规则
钣金多规则是继钣金多实体之后,Inventor 在钣金模块功能的又一重要增强. 钣金多规则基于钣金多实体的基础上,完善了用户需要在不同实体上赋予不同板厚.展开规则.折弯释压形状.拐角释压形状以及尺寸等 ...
- 简单计算机app inventor,app inventor计算器
<app inventor计算器>由会员分享,可在线阅读,更多相关<app inventor计算器(10页珍藏版)>请在人人文库网上搜索. 1.App Inventor之 计算 ...
最新文章
- 论文简述 | CamVox: 一种低成本、高精度的激光雷达辅助视觉SLAM系统
- pandas使用pad函数向dataframe特定数据列的每个字符串添加后置(后缀)补齐字符或者字符串、向所有字符串的右侧填充、直到宽度达到指定要求(right padding)
- 我从GitHub上看到了编程语言八年变迁史 | Reddit 30.7k
- 在Ubuntu14.04上安装UberWriterMarkdown编辑器
- python奖励多少钱_关于python的问题,好的高奖励!
- oracle 依赖包自动安装包,ORACLE 安装提示缺少依赖包
- fillrect不填充被覆盖的区域 mfc_纹理和图案填充
- 怎么保存php格式,把php代码保存到php文件实现方法
- 移动磁盘提示使用驱动器中的光盘之前需要格式化文件怎么找回
- html引用ttf字体文件
- 【VUE】微商城(四)----封装轮播图组件,axios安装使用
- 全国最佳医院排名,为家人留一份
- 高等教育中的人工智能市场现状研究分析报告-
- 大学物理上册详细笔记_大学物理上册课堂笔记
- jQuery Pjax于ajax的区别
- web常见特效——floor电梯导航
- java和Android学习书籍
- cdma特有效应_CDMA技术基础知识
- watchfit鸿蒙,华为WATCH FIT运动手表评测:12门健身课程44项健身动作 陪你燃烧卡路里...
- 黄山迎今冬“首场雾凇”,奇松怪柏摇身一变,成了玉树琼枝