OpenInventor培训总结

近日参加了为期10天的OpenInventor三维可视化软件工具的培训,OpenInventorMercury公司开发的基于OpenGL的三维可视化开发工具包,该工具包支持C++.NETJAVA多种开发语言,并可以与Qt集成开发,提供了1000多个类,用于快速开发稳定、高效的3D程序,石油行业中许多商业化软件产品都是基于OpenInventor开发的。

本次培训的是OpenInventor8.0版本,开发语言是C++,重点掌握如何使用OpenInventor中的节点、域、材质、光照、相机、传感器、引擎、事件、选择器、节点工具箱类、组件等类完成基本三维对象的显示、选择与交互等功能,同时了解QtOpenInventor集成开发的编程思路。

1.      OpenInventor安装、基本概念及定义

2.      形状节点,视图变换

3.      颜色与光照,纹理映射

4.      存取三维场景数据

5.      场景遍历,事件和选择

6.      传感器和引擎

7.      节点工具箱和组件库,拖拽器和操纵器

8.      VolumeViz的使用

9.      Qt简介

10.  创建节点、域

 

OpenInventor的主要功能特点:

1. 面向对象的3D应用程序端口:

Mercury公司的Open Inventor 8提供了超过1300个易于使用的类,便于用户进行快速开发,Open Inventor 8是应用最广泛的面向对象的专业3D图形开发工具包。

2. 优化的3D渲染:

Mercury公司的Open Inventor 8已经通过利用OpenGL最新的功能集和拓展模块优化了渲染效果,自动基于OpenGL的最优化技术来提供一个大大改善的高端的应用程序接口。

3. 先进的基于OpenGL的着色器

OpenGL的着色渲染技术可应用于Open Inventor的任何版本,通过特效来获得更深入的三维视觉体验。Mercury公司的Open Inventor 8嵌入了一个超过80个渲染程序的列表,完全支持ARB语言、NVIDIA Cg OpenGL 绘制语言,来获得先进的视觉效果,进一步提高终端用户的三维可视化视觉体验。

4. 先进的开发帮助:

IvTune®是一个交互的绘图工具,当程序正在运行的时候对3D程序进行校正和调试。它允许开发人员进行交互式视图和修改场景图。

5. 全面的3D内核

除了其完整的3D几何内核之外,Open Inventor 8提供了强有力的先进的3D功能集支持,如NURBS曲面和碰撞检测。完全支持NURBS曲线和任意的裁剪曲面,可实现快速、持续高效的NURBS镶嵌。Open Inventor 8也提供了一个快速的物体间和摄影间、场景间的快速碰撞检测应用,例如,在漫游类型的应用程序中摄影穿透其他物体。这种优化的碰撞检测应用,已被证明是有效的,即使是面对非常复杂的场景。

6. 大型模型的可视化

Open Inventor 8通过更少的三角形来构建新的几何模型,并自动生成LOD(层次细节)和保存外表的简化节点来提高显示质量和使交互渲染成为可能。它可以将几何模型转换成更高效的三角形条块和将对象重新排序来尽量减少状态的变化。复杂场景的快速编辑也是支持的。

7. 多线程技术

多线程技术相比采用多个处理器和利用单一的高端处理器都能增加整体的显示效果。这种特性也适用于多种图形通道,每个图形通道都有自己的渲染线程。

8. GPU的广泛应用

Open Inventor 8的可视化解决方案对程序员们提供了一个独特的解决方案,这个方案能实现先进的三维可视化和强大的计算功能间的交互,这些计算一般是在一个工作站上进行的并行计算。

 

OpenInventor的开发工具包的构成

OpenInventor开发工具包分为基础模块和扩展模块。

基础模块是所有其它扩展模块的基础,其中除了提供一些基于open GL开发的所有图形工具外,同时还提供多线程计算处理能力、立体像对浏览、远程三维漫游、NURBS工具、大场景投影支持、体数据内部损伤检测、3D纹理叠加、支持HTML格式发布、支持VRML数据发布、海量数据漫游等功能。

扩展模块包括:VolumeVizVolumeViz LDMMeshViz™ XLMReservoirViz LDMScaleVizHardCopy等。

VolumeViz可以用于地震数据体的体绘制,而VolumeViz LDM可以支持几十甚至几百GB数据体的体绘制。MeshViz™ XLM 包含了高级的数据可视化设计组件,提供了复杂曲面、三维统计图等多种可视化对象,用于2D/3D流体动力学、地质网格等数据的可视化。ReservoirViz LDM模块是针对石油工业的开发库,能对油藏建模和数模的地质网格进行管理和可视化。ScaleViz可用于虚拟现实大屏幕多通道投影的开发,能实现大图形的分块绘图,集成显示的功能。HardCopy模块用于数据的硬拷贝输出,可以打印高清晰度的展示专题图,支持的格式有CGMHPGLPostScript等。

 

培训要点与感受

1.      安装与配置

OpenInventor本身的安装和配置并不麻烦,但如果与Qt联合开发,加上OpenInventor本身存在多个版本,Qt也存在多个版本的情况,环境变量设置不正确,会在后面出现很多的编译或连接错误,为此大家完善了一个《配置宝典》,以保证各个例子和作业能够顺利的编译和运行。

2.      基本概念

本次参加培训的各人的基础不一样,有人已经使用OpenInventor编写了程序,有人还未接触过。因此,在培训的第一天需要通过简单的例子,使各人掌握OpenInventor开发的基本思想,重点掌握节点、域、场景树、渲染顺序、对象计数等重要概念。

3.     

在讲解这部分时,没有进行相应的练习,对于刚开始OpenInventor编程的人员来说,理解和使用都有一定的困难。通过后面的练习看来,关于单值域和多值域的概念在前面要重点强调,而且多举几个读定的例子,从而让编程人员真正掌握这个概念。

4.      简单节点和复杂节点

理解简单节点通常比较容易,因为它们都是我们三维空间中常用的对象。但复杂节点的思路与我们通常的编程思路稍有不同(比如FaceSet),是给定了端点,再给定了端点的连接关系,才形成了一个三维形状。

5.      属性节点

对于材质、线型、光照、单位、复杂度等等,也归纳为一类节点,称为属性节点,这些节点通常都加在形状节点的前面,从而影响三维对象的显示。

6.      材质绑定、法线绑定

材质比较容易理解,法线绑定的作用需要仔细的讲解才能清楚,同时法线设置后有哪些作用还需要深入理解。

7.      相机

透视相机、正交相机是必须掌握的,需要对其基本原理有准确的理解。多个相机的应用,可以锁定一个窗口中的相机位置,从而实现在三维窗口的左下角显示指北针的效果。

8.      光照

点光源、平行光、方向光等不同效果,需要较多的试验,在本次培训中点光源的效果与我们想像的效果不一致,这个问题一直没有解决。

9.      纹理

纹理填充的方向的控制很有技巧。

10.  SoAction

SoAction有许多派生类,最主要的可能是SoCallbackAction吧,对于SoGLRenderActionSoGetBoundingBoxActionSoGetmatrixActionSoWriteActionSoSearchActionSoHandleEventActionSoRayPickAction需要以后的深入理解和掌握。

11.  事件机制

事件的机制与常用的编程语言的思路是一致的,利用回调函数来实现事件的响应。

12.  传感器和引擎

利用这2种对象,可以实现三维对象的动画效果,同时引擎的灵活应用,能够将某个节点中的域与其它节点关联起来,而减少编写一些事件的工作量,使程序更加简洁,这时候才感觉到前面要深入理解“域”的概念是相当的重要。

13.  节点工具箱

节点工具箱能够对各类节点进行进一步的封装,使编程更方便,但很多设置都变成了命令行式的操作,程序较难调试。

14.  拖拽器和操纵器

2个类是实现对象选择和交互的重要类,在实际编程中通常需要我们自定义这些类来达到我们要求的交互效果。

15.  MeshViz

这个扩展组件包也是相当的庞大,里面的坐标轴、曲线、三维图表、网络等对象能够减少我们许多的编程工作量。

16.  VolumeViz

本次培训只是对这一部分的简介,实际编程中还会遇到较多的问题,比如坐标系的关系,切片、抽测线的交互操作等等。

17.  Qt

Qt可以完成跨平台的程序开发,另外设置图形界面的功能也是比较强大,在界面设计中都可以设置信号与槽的连接,能够减少一些编程量,但学习成本也增加了不少,Qt版本变化也较快,也有一个庞大的类库系统,想学好它也不是几天的功夫。

18.  自定义节点工具箱

这部分内容属于进阶性的课程,需要一定的编程经验积累后才能掌握。

posted @ 2010-04-14 08:24  申龙斌的程序人生  阅读(6068)  评论(10编辑  收藏  举报