软件名,为专业
3D图形开发工具包,面向的对象包括工业强度的开发、交互和通过C++、.NET或Java构建的专业3D图形化应用程序。具有以下几个特征,
面向对象的3D应用程序端口、 优化的3D渲染、先进的基于OpenGL的着色器、先进的开发帮助5. 全面的3D内核、大型模型的可视化、远程渲染、
虚拟现实功能和多屏显示、
多线程技术、
GPU的广泛应用。可用于商业图形、机械CAE和CAD等领域。
简介
Open Inventor 9 by Mercury:
——专业3D图形开发工具包-北京中遥云图息技术有限公司代理
Mercury公司的Open Inventor 7软件是一个
面向对象的、跨平台的专业3D图形化工具包,面向的对象包括工业强度的开发、交互和通过C++、.NET或Java构建的专业3D图形化应用程序。易于使用的应用程序端口、可拓展的结构和功能强大的全组件式架构给开发人员提供了一个高级平台的
快速原型设计、高端开发和先进的3D图形应用程序。
Mercury公司的Open Inventor 7软件提供了加强的开发效率、显示质量、灵活性和可信度来快速开发您迫切需要的程序,这些程序要求稳定且不断优化的技术来迎接3D可视化领域的最高挑战。
“人类的3D工程”:
·高速发展高性能交互式的应用软件
·支持C++, Java 与 .NET 接口(API)
·支持所有平台从笔记本到进入式可视化
·具有功能强大的全组件式构架的工具箱
·在条件苛求的软件上依然具有良好的性能
·具有良好的可扩展性、兼容性和开放性
·专业的工具包、高附加值
·体数据可视化、科学数据可视化、高质量描绘显示、
虚拟现实Open inventor 支持大量3D的特征:
·高级多通道处理能力并支持多通道扩展
·体数据的交互式切割与漫游
·大模型的可视化
·处理大数据集的能力
·实时性交互分析
面向工业强度的专业3D图形开发工具包
·加快您的应用程序设计、开发和维护的周期
·通过先进的
三维可视化和程序设计来提高您的显示质量
·提供先进的基于领先的开放标准的支持
应用领域:
商业图形、机械CAE和CAD、绘画、建筑设计、医学和科学图像、化学工程设计、地理科学、
虚拟现实、科学数据可视化、AEC和仿真、动画
主要特征:
1. 面向对象的3D应用程序端口:
Mercury公司的Open Inventor 7提供了一个最广泛的
面向对象集(超过1300个易于使用的类),并集成了一个用户友好的系统架构来快速开发。规范化的场景图提供了现成的图形化程序类型,其
面向对象的设计鼓励可拓展性和个性化功能来满足具体的需求。Mercury公司的Open Inventor 7是应用最广泛的
面向对象的专业3D图形开发工具包。
2. 优化的3D渲染:
Mercury公司的Open Inventor 7通过利用OpenGL的最新的功能集和拓展模块优化了渲染效果,自动基于OpenGL的最优化技术来提供一个大大改善的高端的
应用程序接口。
3. 先进的基于OpenGL的着色器
OpenGL的阴影渲染技术可应用于Open Inventor的任何版本,通过特效来获得更深入的三维视觉体验。Mercury公司的Open Inventor 7嵌入了一个超过80个阴影渲染程序列表,完全支持ARB语言、NVIDIA-Cg 和 OpenGL 绘制语言,以此来获得更先进的视觉效果,进一步提高终端用户的
三维可视化视觉体验。
4. 先进的开发帮助:
IvTune ®是一个交互的绘图工具,当程序正在运行的时候对3D程序进行校正和调试。它允许开发人员交互式视图和修改场景图。
5. 全面的3D内核:
除了其完整的3D几何内核之外,Open Inventor 7提供了强有力的先进的3D功能集支持,如NURBS曲面和碰撞检测。完全支持NURBS曲线和任意的裁剪曲面,可实现快速、持续高效的NURBS镶嵌。Open Inventor 7也提供了一个快速的物体间和摄影间、场景间的快速碰撞检测应用,哪一个是可以,例如,在漫游类型的应用程序中摄影穿透其他物体。这种优化的碰撞检测应用,已被证明是有效的,甚至面对非常复杂的场景。
6. 大型模型的可视化
Open Inventor 7通过更少的三角形来构建新的几何模型,并自动生成LOD(层次细节)和保存外表的简化节点来提高显示质量和使交互渲染成为可能。它可以将几何模型转换成更高效的三角形条块和将对象重新排序来尽量减少状态的变化。复杂场景的快速编辑也是支持的。
Open Inventor 7提供高端的浸入式组件来提供易于使用的且有力的解决方案来共同面对3D高级程序开发领域中棘手的问题。您可以和最尖端的技术与时并进,事半功倍,也包括需要额外的低端的应用程序端口的下一代硬件的优化的显示效果。
多线程技术相比采用多个处理器和利用单一的高端处理器都能增加整体的显示效果。这种特性也适用于多种图形通道,每个图形通道都有自己的渲染线程。
9. GPU的广泛应用
Open Inventor 7的可视化解决方案对
程序员们提供了一个独特的解决方案,这个方案能实现先进的三维可视化和强大的计算功能间的交互,这些计算一般是在一个工作站上进行的
并行计算。
通过拓展模块来定制功能:
Open Inventor 7软件的集成包提供了一套完整的拓展模块使得面向具体市场需求或特殊应用需要的功能定制更为容易。
通过打包的这些拓展模块的创新的知识产权(IP)技术,Open Inventor 7可以让您随时获得最新的
可视化技术:面向
体绘制的大型数据处理、通过渲染分布和远程模型的终端可伸缩性、先进的2D/3D科学数据可视化技术、现实的光线追踪渲染和更多。
Open Inventor基本模块:
基本模块中除了提供一些基于open GL (open Graphics library)开发的所有图形工具外,同时还提供多线程计算处理能力、立体像对浏览、远程三维漫游、NURBS工具、大场景投影支持、体数据内部损伤检测、3D纹理叠加、支持HTML格式发布、支持VRML数据发布、海量数据漫游等功能。
MeshViz™ XLM 拓展模块:
MeshViz XLM是Open Inventor 的一个扩展模块。包括两部分:MeshViz拓展模块和MeshViz Interface拓展模块。
MeshViz包括3DdataMaster和GraphMaster。
MeshViz Interface包括:Mesh Extraction和Data Mapping。
MeshViz™ 拓展模块:
MeshViz™包含了高级的数据可视化设计组件,主要面向2D/3D数据科学、制造、有限元、流体力学、通讯、金融、
地理信息系统和OLAP的可视化系统。
MeshViz™可用于所有类型的工程分析、可视化及通信应用,并允许开发人员快速整合先进的可视化功能。先进的数据提取和制图技术使得MeshViz的应用程序端口能处理百万计的二维或三维的元数据。
MeshViz™ Interface拓展模块
MeshViz Interface是一个用来提取和可视化对象特征的应用程序端口,在应用科学领域,可以提取和查看
有限元分析(FEA)和
计算机辅助工程(CAE)的
网格特征,提供了和3DDataMaster一样的基本的网格特征描述,同时消除了原有的应用程序端口的大部分应用限制,直接支持所有类型的网格(二维或三维的、笛卡尔网格、三角形网格、六面体网格、多面体网格、二次网格、结构型网格或索引类型的网格),并可以对任意的标量和矢量数据集进行显示、分析(包括正在处理过程中的隐性数据)。
MeshViz Interface主要包含相互独立的网格提取和数据匹配两部分:网格提取是指可以从高维度的网格中提取一个低维度的网格;数据匹配是指利用先进的渲染技术对创建提取出来的网格的图形化描述。
VolumeViz™ LDM 拓展模块:
VolumeViz™ LDM能在一个单独的Open Inventor开发的应用程序中实现海量数据集的交互式可视化、
体绘制、切片、等值面提取和嵌入3D几何图形等功能。
提供了一种从笔记本到先进的
计算机集群的可升级的解决方案,VolumeViz™ LDM模块为应用处理多达数百GB的数据集制定了一个新的里程碑。
VolumeViz™ LDM提供多个数据集的数据转化和
数据整合技术,也将渲染技术整合起来以获得更快速和更高质量的可视化效果。采用最新的GPU着色器,信息采集和三维感知在切片上相比体数据可视化和凹凸映射都进一步改善。
ScaleViz™ 拓展模块:
ScaleViz是一套处理渲染场景和
图像合成分布的数据集的突破性技术,目的是在海量数据集上实现交互式加速处理以解决最具挑战性的需求,提供优化的、分布式可视化方案,ScaleViz提供了以下的先进的解决方案:
平板显示在提供最佳性能的同时提高了分辨率
平板合成加速解决依赖分辨率的显示效果
深度合成加速解决依赖数据的显示效果
远程应用程序通过可视化服务器来远程可视化处理大量数据
ReservoirViz LDM拓展模块:
ReservoirViz LDM是Open Inventor 7的一个新的拓展模块,这个拓展模块是一个重大的改进,因为它提供了一个用于管理和可视化石油天然气领域的水库资料仿真的
整体解决方案。
通过创新的数据管理和先进的视觉重现,来可视化和管理探针大型数据库一般超过数以亿计的元数据。和本地切片进行实时交互。界定感兴趣的目标区域。将多种性能融合在一起或通过运行您自己的基于CPU或GPGPU着色器的计算模块衍生出新的着色功能。您甚至可以构建包含了独立的时间属性的4维智能数据及通过数以千计的时序步骤预取来进行交互。
DirectViz™拓展模块:
DirectViz™允许Open Inventor 7的应用程序进行非常高的现实性和可拓展性的三维场景可视化,这个过程是通过采用OpenRTRT的实时光线跟踪引擎来代替OpenGL实现的。
DirectViz提供的功能已经超出了现有的
图形处理器和OpenGL的功能,包括造型和设计理念、虚拟原型和可视化仿真。
HardCopy拓展模块:
HardCopy允许应用程序输出几个向量格式图形:CGM 、HPGL、PostScript、 GDI/EMF。和一般的图像不一样,这些
图像格式提供高品质的图像,并解决了独立输出,适合大幅面绘图机,甚至对复杂场景的高性能显示。
Data Converter拓展模块:
Data Converter提供了集成的各种CAD/CAM浮点型文件格式转换到Open Inventor 7的浮点型文件。这些拓展允许开发人员在现有应用程序的基础之上添加先进的输入功能。
Data Converter能在windows、Linux和UNIX操作系统上进行。工作在CAD/CAM领域的用户也可以通过
批量处理模式使用软件。
支持下面几个
浮点型输入数据:IGES 5.1, VDA-FS ,STL ASCII,DXF R14, Catia v5。
Specifications规格:
支持C++平台:
Windows XP/Vista 32 .NET 2003/.NET 2005 ·
Windows XP/Vista 64.NET 2005 ·
Linux 32/ EM64T/ AMD64™ (RH-WS4/5) ·
SGI Irix ®/ Linux Itanium ® 2 ·
Sun Solaris™ 9
支持的.NET平台
Windows XP/Vista 32 .NET 2005 ·
Windows XP/Vista 64.NET 2005 ·
Windows XP/Vista 32 ·
Linux 32/ EM64T/ AMD64™ (RH-WS4/5) ·
Sun Solaris 9 ·
其他平台:
Contact us for details.
Corporate Headquarters公司总部
199 Riverneck Road
Chelmsford, MA 01824-2820 USA
+1 (978) 967-1401 / +1 (978) 967-1401
Fax +1 (978) 256-3599
www.mc.com
各位用户,大家好!下面是我转载的一篇关于OIV的一些简单的介绍,有兴趣可以看一下:
Open Inventor(以下简称OIV)是SGI公司开发的基于OpenGL的面向对象三维图形软件开发包。使用OIV开发包,
程序员可以快速、简洁地开发出各种类型的交互式三维图形软件。OIV具有平台无关性,它可以在Microsoft Windows、Unix、Linux等多种操作系统中使用。OIV允许使用C、C++、Java、DotNet多种
编程语言进行程序开发。经过多年的发展,OIV已经基本上成为
面向对象的3D图形开发“事实上”的工业标准。广泛地应用于机械工程设计与仿真、医学和科学图像、地理科学、石油钻探、
虚拟现实、科学数据可视化等领域。
学习过OpenGL的人应该有一种感觉,就是OpenGL入门容易,提高很难。OpenGL提供的函数并不多,不过区区一百多个核心函数。OpenGL的编程思想比较简单,就是一个
有限状态机的思想。因此学习OpenGL往往入门很快。但是在入门之后,要想进一步提高编程功力,很多人就会感觉无从下手。这种情况一部分归咎于编写三维图形软件需要了解的知识比较多,另一部分的原因恐怕就是OpenGL提供的功能过于基本和底层了。而且OpenGL使用的是“
面向过程”的编程方法,对于我们广泛使用的“面向对象”的编程思想没有提供支持。当然这里我们不是说OpenGL的功能不强大,看看无数多个使用OpenGL编写的应用程序,我们不得不惊叹OpenGL的表现能力。但关键是我们不能指望每个程序员都成为“约翰.卡马克”(ID 公司的3D天才程序员,是Doom,Quake的主要设计师)。
正是看到了OpenGL在应用上的不便,SGI公司在OpenGL库的基础上开发了面向对象三维图形
软件开发工具包——Open Inventor。OIV是面向对象的,因为它本身就是使用C++编写的,它允许用户从已存在的类中派生出自己的类,通过派生的方式可以很容易地扩展OIV库。OIV支持“场景”,“观察器”和“动作”等高级功能,用户可以把3D物体保存在“场景”中,通过“观察器”来显示3D物体。利用“动作”可以对3D物体进行特殊的操作(例如,拾取操作,选中操作等)。正是因为有了这些高级功能,才使得普通程序员也能编写出功能强大的三维交互式
应用软件。
OIV 是由一系列的对象模块组成的,通过利用这些对象模块,开发人员有可能以花费最小的编程代价,开发出能充分利用强大的图形硬件特性的程序。OIV是一个建立在OpenGL基础上的对象库,开发人员可以任意使用、修改和扩展对象库。Inventor 对象包括:数据库图元、形体、属性、组、和引擎等对象;还有例如像手柄盒和轨迹球等操作器、材质编辑器、方向灯编辑器、examiner观察器等组件。Inventor提供了一个完整且经济高效的
面向对象系统。
Open Inventor与OpenGL之间的差别
在OIV的主要参考书《 The Inventor Mentor 》中,有一段文字生动形象地介绍了OIV与OpenGL之间的差别。在书中,作者假设要建造一栋房子,她把使用砖头、水泥、沙子来建造房屋的原始方式比作使用OpenGL来开发程序,而将利用预制水泥构件、成套室内设备来建造房屋比作使用OIV来开发程序。这种比喻形象地说出了OIV开发程序具有简单、高效的特点。值得注意的一点是,OIV和OpenGL是相容的。在OIV中提供了多种方法允许直接调用OpenGL的命令,这使得OIV的功能变得更加强大。
可以再举一个程序员比较熟悉的例子。我们知道,使用C++语言编写
Windows程序的时候,基本上可以有两种方法:第一种方法是直接使用Windows API开发程序;第二种方法是使用Microsoft Visual C++中的MFC类库开发。使用API开发程序就和使用OpenGL来开发3D应用程序一样。而使用MFC就像是使用OIV。我们知道,如果使用API来开发程序的话,程序员需要做程序初始化,创建窗口,消息分发,程序框架等大量的代码。这点和使用OpenGL来开发3D程序几乎是一样的,程序员必须对程序中的所有部分负责。而使用MFC开发程序就轻松很多了,因为MFC内部已经为程序提供了尽可能的方便,包括像初始化,创建窗口,消息分发,程序框架等等这些都已经是内建的了,程序员只需要实现自己的功能就可以了。同时MFC也允许用户直接调用Windows API,并且MFC运行效率和Windows API的效率不相上下。
其实对我们程序员来说,再详细的说明也比不上程序代码来得直接。下面将使用OpenGL和OIV同时编写一个显示红色立方体的简单程序,通过这两个例子的比较,就可以很比较容易地了解OIV与OpenGL之间的差别了。
使用OpenGL 显示一个红色立方体
#include
GLfloat mat_diffuse[] = {1.0,0.0,0.0,0.0};
GLfloat mat_specular[] = {1.0,1.0,1.0,1.0};
GLfloat high_shininess[] = {100.0};
void myInit(void)
{
GLfloat light_position[] = {0.0,3.0,6.0,0.0};
glLightfv(GL_LIGHT2,GL_POSITION,light_position);//设置光源
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHTING);
glEnable (GL_LIGHT0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//为光照模型指定材质参数
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,high_shininess);
glColorMaterial(GL_FRONT,GL_AMBIENT);//使材质色跟踪当前颜色
glEnable(GL_COLOR_MATERIAL);
glPushMatrix();
glRotatef(40,1.0,1.0,1.0);
glutSolidCube(2);
glDisable(GL_COLOR_MATERIAL);
glPopMatrix();
glFlush();
}
void myReshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w <= h)
glOrtho(-5.5,5.5,-5.5*(GLfloat)h/(GLfloat)w,5.5*(GLfloat)h/(GLfloat)w,-5.5,5.5);
else
glOrtho(-5.5*(GLfloat)w/(GLfloat)h,5.5*(GLfloat)w/(GLfloat)h,-5.5,5.5,-5.5,5.5);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc,char ** argv)
{
//初始化
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
//创建窗口
//绘制
myInit();
glutReshapeFunc(myReshape);
glutMainLoop();
return 0;
}
程序运行的结果:
注意,为了简单起见,我们使用了OpenGL的glut库。
在
main函数中,首先做了初始化OpenGL的工作,然后又创建了一个窗口。在myInit函数中主要是设置光源,启动深度检测等工作。最主要的函数是display函数。在这个函数中,首先设置材质,然后在设置旋转矩阵,最后显示立方体。我们假设阅读本文的读者应该熟悉OpenGL的开发,因此我们将不再详细说明这个程序。
从上面OpenGL的例子可以看到,仅仅为了显示一个立方体,使用OpenGL来开发就需要如此多的代码,要是开发一个大型的3D程序,其难度可想而知了。
使用Open Inventor 显示一个红色立方体
#include
#include
#include
#include
int main(int, char **argv)
{
//初始化Inventor
HWND myWindow = SoWin::init(argv[0]);
//创建观察器
SoWinExaminerViewer *myViewer = new SoWinExaminerViewer(myWindow);
//创建场景
SoSeparator *root = new SoSeparator;
SoMaterial *myMaterial = new SoMaterial;
myMaterial->diffuseColor.setValue(1.0, 0.0, 0.0);//红色
root->addChild(myMaterial);
root->addChild(new SoCube);//增加上一个立方体
//观察器和场景相关联
myViewer->setSceneGraph(root);
//显示主窗口
myViewer->show();
SoWin::show(myWindow);
// 主循环
SoWin::mainLoop();
return 0;
}
程序运行的结果:
这两个程序很明显的差别就是使用OIV开发程序的代码要远小于使用OpenGL开发的程序。当然这不是使用OIV唯一的一点好处。上面OIV例子代码中,一开始也是先初始化OIV,然后创建一个观察器窗口,接着创建场景,向场景增加上材质对象(材质对象设置为红色),再向场景增加上立方体对象。最后显示场景,进入程序主循环。我们可以看到,OIV的程序逻辑性比较好,不像OpenGL那样带有太多的
回调函数,导致我们的思路跳来跳去的。
OIV与OpenGL程序之间一个最大的差别就是OIV不需要程序员“画”3D模型。在上面的OIV例子中,我们只是向场景中增加上一个立方体对象,至于在那里显示,以及何时显示立方体都是OIV自己来决定的,不需要程序员来考虑。作为对比,在OpenGL程序中,我们需要在display
回调函数中一条一条地调用OpenGL命令,只有这样才能将立方体显示出来。
使用OIV的另外一个好处是,OIV的程序是“活”的。我们可以使用鼠标来操作场景中的物体。例如,我们可以在观察器窗口上按住鼠标左键,移动鼠标来任意旋转立方体,也可以上下移动鼠标来放大或缩小立方体。也就是说上面的OIV例子代码其实是一个交互式的3D程序,而我们没有做任何的工作就自动获得了这种交互功能。相对来说,使用OpenGL就没有这么幸运了,我们的OpenGL例子只是显示了一个立方体,无论用鼠标怎样操作,立方体都不会动。当然,我们也可以使OpenGL程序具有交互的功能,但要开发一个操作非常顺手的交互式软件不是一件容易的事情。
读者或许认为上面的OIV例子中有一些错误,在例子中,我们使用C++的new 操作符创建了多个对象,但在整个程序中没有调用一次delete操作符来删除对象。这样做不会产生
内存泄漏吗? 这点请不要担心,OIV有自己的内存管理方式,它使用
引用计数的技术来管理内存。每个对象都有一个
引用计数的
变量,只要它被使用过一次,引用计数就加1,不再使用时,引用计数就减1,如果引用计数变成0,那么这个对象就自动被删除。这种内存管理的方式有些类似于微软的COM接口引用方式。正是因为OIV具有自动管理内存的功能,才使得利用OIV开发大型3D应用程序相对变得相对轻松。我们都知道,
内存泄漏始终是C++程序员心中抹不去的一块阴霾。
Open Inventor的开发环境
目前世界上比较成熟的OIV开发包有三个,它们分别由SGI,TGS和SIM公司开发的,它们在遵循OIV接口规范的基础上各有特点。
OIV最早是由SGI提出并开发的。SGI的OIV主要用在UNIX操作系统下,在SGI公司的操作系统中已经集成了OIV
开发环境,所以只要使用SGI的UNIX操作系统就可以直接在上面开发OIV程序。但对于其它的UNIX系统或Linux操作系统,必须手工安装。2000年左右,SGI开放了OIV的源码。
SIM公司开发的Coin3D OIV可以同时在UNIX和Microsoft Windows下使用。它是基于GNU的
开源项目,更新比较缓慢(一般1年左右才有一个小版本更新),基本只有核心模块和体渲染模块,性能不是太高,但完全可用,开发一般的3D应用程序还是绰绰有余的。而且它是一个开放源码的OIV开发包,可以让我们了解OIV内部运行的机理。所以Coin3D OIV比较适合普通用户。如果你是一名爱好和使用者,建议下载Coin3d库,当然,也可以试着编译下,有问题随时可以翻看源代码,的确是不错的选择。
TGS公司是最早将OIV由Unix系统移植到
Microsoft Windows下的公司。TGS的OIV是目前世界上使用最多的OIV版本。它具有功能强大,性能优异等优点。而且TGS为了满足不同应用领域的要求,对OIV做了大量的扩展,这也大大促进了OIV的应用。TGS是一家商业公司,它们开发的OIV是一个商业软件开发包,不适合普通用户学习和使用。不过,如果读者的项目费用比较充裕的话,我们还是建议采用TGS的OIV版本。中国总代理的网站:www.ncg.ac.cn。
Open Inventor的开发资料
OIV的开发资料不多,而且都是英文资料。主要的开发书籍有三本:
1:Open Inventor C++ Reference Pages,Open Inventor C++参考手册。这类似于
微软的MSDN,里面介绍了Open Inventor中的所有C++类和方法。
2:The Inventor Mentor。 这本书是OIV的主要入门书籍。所有学习使用OIV的用户都应该首先阅读此书。通过阅读此书,用户可以循序渐进地掌握OIV的基本开发过程。
3:The Inventor ToolMaker。这是一本适合OIV高级用户的书籍,书中主要讲述如何扩展、定制OIV。
题外话
也许很多人对OIV不是很了解。但可能很多人都听说过VRML文件格式。VRML文件是浏览器用于在网页中显示3D物体的一种通用文件格式。其实VRML文件格式就是OIV的iv文件格式的一个子集。当年VRML格式的创建者参考了OIV的iv文件格式。所以OIV自动支持VRML文件的导入。而Java 3D借鉴了很多VRML的思想。因此Java 3D和OIV在设计思想上也是很相近的。
国内外流行起“设计模式”的编程概念,在“设计模式”里有一种叫做MVC(模型-视图-控制器)的设计模式。其实我们细想一下,MVC和“场景”,“观察器”、“动作”这些概念是相通的。不过在SGI设计OIV的时候,“设计模式”的思想恐怕还没有流行起来。从这点可以看出,在那些面向对象编程方面的大师们的骨髓中早已藏有“设计模式”的思想,只不过他们没有表达出来而已。这也说明了,我们不应该刻意地去套用“设计模式”,而应该像“春梦了无痕”那样将“设计模式”的思想融会在自己的程序中。