专利名称:与三维智能部件对接的方法和装置的制作方法
版权公告本专利文档的公开的一部分包含受到版权保护的材料。版权所有者对如其在专利和商标局的专利文件或记录中展现的、本专利文档或专利公开中的任何复制均无异议,但是保留所有的任何版权权利。
发明
背景技术:
领域总的来说,本发明涉及交互式多媒体,更具体地说,涉及用于与三维智能对象对接的方法和装置。
相关技术描述术语“多媒体”包括许多技术,比如视频和交互式三维(3D)技术。由于许多超越2维技术的益处和超越纯文本或视频的优点,近年来交互式3D已经得到普及。首先,交互式3D不同于3D电影之处在于交互式3D包含交互式经历的内容。也就是说,与计算机相结合使用的3D内容能够使用户在屏幕上移动对象和在屏幕上探索不同的空间。用户可以独立地检验对象并漫步“世界”,即3D空间。例如,为了彻底理解装配过程,一个教人装配部件的典型的教育视频将重运行多次。但是,使用交互式3D,用户装配物品,然后可以将该物品拆开并复原该物品,直到真正理解装配过程。使用交互式3D的第二个优点是用户的观点属于用户,并不属于内容的作者。因此,用户可以旋转对象或绕着对象走,以改变观看角度。第三,与按顺序观看在视频中出现的对象相反,用户可以以不同的顺序观看对象。
尽管交互式3D已经普及,但是交互式3D的广泛使用受限于目前交互式3D的存储、传输和应用软件集成的限制。一般为编程语言创建的3D对象的3D内容,通常作为文件存储在服务器上,然后在比如因特网的数据网络上通过应用程序(“插件程序”)显现给用户。该模型作为文件服务器模型是公知的。一般而言,文件服务器模型如现有技术
图1中的虚线15内部所示。现有技术图1是3D内容10的典型使用的方框图。在图1中,文件服务器模型15包括由内容开发者以编程语言开发的3D内容10。3D内容通常用称作虚拟现实建模语言(VRML)的编程语言编写。VRML的描述在出版物“The VirtualReality Modeling Language”,ISO/IEC 14772-11997中可以得到,在此作为参考引用。在下面的现有技术图2中提供一VRML的简要示例。回到现有技术图1中,内容开发者以VRML准备包含将要观看的3D内容的文件。希望观看3D内容10的因特网100上的浏览器使用通常加载到因特网100上的浏览器中的“插件程序”应用程序90,以便显现作为文件存储的3D内容10。
作为文件存储的3D内容存在的问题在于,除非开发者了解VRML,该3D内容才能由比如希望创建应用程序以便与3D内容10实现交互的应用程序开发者50的用户存取。实际上,对于希望使用3D内容创建套装软件产品70的应用程序开发者,以VRML编写的3D内容10是不透明的,或者是不可存取的。因此,将3D内容作为文件的存储和传输受到文件服务器模式的限制,因为应用程序开发者必须了解VRML以便同3D内容交互。
现有技术图2是说明创建与3D内容对接的应用程序、应用程序开发者所需的VRML的了解类型的、VRML的一个简要示例。现有技术图2是定义盒子(box)110的VRML的示例。在图2中,3D内容10定义应用程序开发者50希望将其合并到图形画面作为套装软件产品70(图1)的一部分的盒子110。应用程序开发者50为了在正在开发的套装软件产品70中使用3D内容10,应用程序开发者50必须非常熟悉VRML。
VRML是一种多数应用程序开发者50可能不太了解的复杂的编程语言。在图2中,盒子110由盒子110下面的VRML定义。通常,将盒子110看作VRML能够创建的、改变其他对象属性并与其他对象相连接的对象。在区段115,VRML已经创建了一个用DEF BOX GRP标号的新对象。在下一个区段120,定义并改变盒子的属性120。具体地说,在VRML行130,将盒子转译为特定3D坐标(4.2.1)。在VRML行140,将盒子旋转为特定方向(011.9)。在VRML行150,定义用“Children”标号的子组,以包括在VRML行160的形状(shape)、在VRML行170的盒子的几何结构、以及在VRML行180的具体外观。然后在VRML行190定义包括具体颜色的特定材料。第三区段接着创建路由125,匹配、移动或调整在插件应用程序(图1)的图形画面内的盒子110和其他对象。因此,VRML提供包含组115、属性120和路由125的3D内容,使盒子110得以定义。
但是,即使应用程序开发者50(图1)在一定程度上熟悉VRML,由于VRML的复杂性,所以由应用程序开发者50将3D内容10集成到正在开发的应用程序以创建套装软件产品70是非常困难的。应用程序开发者必须研究VRML以定位所需的3D内容,并将这些字段集成到正在开发的应用程序。该处理过程非常复杂并且花费时间。因此,存在如下需求,即用户能够快速并且方便地存取VRML的3D内容,而无需知道VRML或不用必须定位3D内容中的说明和操作。
对该应用程序集成问题的一种尝试解决是使用外部创作接口(ExternalAuthoring Interface,EAI)。EAI的描述在出版物“External Authoring Interface”,ISO/IEC 14772-11997,附录B中可以得到,在此作为参考引用。EAI尝试揭示3D内容给应用程序,但是没能提供类方法,用于提供应用程序集成。由于EAI象VRML一样非常复杂而且难于理解,所以EAI并不成功。EAI所具有的第二个问题在于它受到画面图形管理的限制。也就是说,除非应用程序开发者知晓复杂的VRML,否则EAI不能维持画面中对象的直接指针,并且不能确定对象的属性。第三,EAI没有为应用程序开发者提供与3D内容中每个对象的组、属性和路由方便对接的能力。因此,EAI受到应用程序集成限制,不能解决由希望与3D内容对接的应用程序开发者(用户)在3D内容和正在开发的应用程序之间集成的需求。
对该应用程序集成问题的第二种解决办法由位于华盛顿州、里蒙得(Redmond,Washington)的微软公司在其称作ChromeffectsTM的商业产品中给出。ChromeffectsTM是一种交互式多媒体技术,倾向于改善用于因特网和桌面应用程序的交互式多媒体的质量和性能。ChromeffectsTM以超文本链接标示语言(HTML)和扩展链接标示语言(XML)为基础,并以“组件(component)”模型代表3D内容。3D内容的组件模型是对前面已经使用的面向对象的模型的演变。3D内容的组件模型仅通过揭示描述3D对象的一组基本功能,将3D对象处理成简单的组件。也就是说,尽管面向对象的模型提供给用户所有的将被模拟的对象的所有细节,但是为了简单化用户和对象之间的交互,组件方法仅提供给用户从功能上并简单地描述对象的特定功能集。
ChromeffectsTM具有的问题在于基于HTML和XML的3D内容需要额外的外部脚本和接口脚本,以提供所需的功能集。因此,用HTML和XML创建的3D内容不是“智能”的,即实质上包含在3D内容之中,但是仍需要额外的内容脚本和接口脚本。该额外的脚本花费很多时间并且成本高、复杂。因此,ChromeffectsTM受限于额外的脚本或由脚本提供的“智能”以恰当地将3D内容集成到应用程序中。
由此尚有如下需求,即提供与3D内容的接口,而无需用户知晓VRML,并且不需要额外的外部脚本和接口脚本。
发明概述在此描述的本发明提供一种与所显示的三维对象对接的方法。该方法包括步骤将三维对象定义为具有组件接口的组件,显示该组件接口,然后通过该组件接口与三维对象对接。该组件固有地包含智能内容。
本发明还通过提供用于执行上述方法中的每一步的部件,提供一种用于与所显示的三维对象对接的装置。
在此还为本发明提供不同的实施例,包括与所显示的三维对象对接的计算机系统,该计算机系统包括显示部件;存储器,存储用于与显示在显示部件上的三维对象对接的计算机程序;以及处理器,用于与显示部件一起执行计算机程序。运行该计算机程序以执行与所显示的三维对象对接的方法。
本发明还提供一计算机可读介质,具有存储在该介质上的计算机程序,以便当将该介质加载到计算机上时,使计算机执行与显示在计算机上的三维对象对接的功能。该计算机通过执行将三维对象定义为具有组件接口的组件、显示该组件接口、然后并通过该组件接口与三维对象对接的步骤与三维对象对接。组件固有地包含智能内容。
附图的简要描述下面将针对具体的实施例描述本发明,并参照其中相同的标号指示相同的部分的附图,其中图1是3D内容的典型使用的现有技术的方框图;图2是表示盒子的现有技术VRML;图3是引用本发明的对接方法的计算机系统的高层方框图;图4是本发明的与三维对象对接的方法的实施例的方框图;和图5是本发明的与三维对象对接的方法的流程图。
详细描述在下面的描述中,将给出用于与智能3D组件对接的本发明的方法的各种实施例。还将给出标示本发明实际应用程序的本发明的可选实施例。因此,尽管本发明针对与所显示的三维对象对接的方法,但是也提供了实现该方法的可选实施例,包括装置、计算机系统和计算机可读介质,以便实际应用和从功能上详尽本发明的方法。但是,应该理解本发明总的来说是针对与所显示的3D对象对接的方法,其通过执行如下步骤实现将三维对象定义为具有组件接口的组件,显示该组件接口,然后并通过该组件接口与3D对象对接。组件固有地包含智能内容。下面将参照图3-5详细描述本发明。
图3以一个实施例示出用于实现本发明的方法的计算机系统的高层方框图。图3的计算机系统246包括处理器230和存储器225。处理器230可以包含单个微处理器,或可以包含多个微处理器,将计算机系统配置成多处理器系统。存储器225存储部分由处理器230执行的指令和数据。如果本发明的系统全部或部分地用包括计算机程序的软件实现,则当运行时存储器225存储可执行的代码。存储器225可以包括动态随机存取存储器(DRAM)存储器和高速缓冲存储器。
图3的系统还包括海量存储设备235、外围设备240、输入设备255、便携式存储介质驱动260、图形子系统270和显示器285。为了简单的目的,图3所示的组件用通过单根总线280相连表示。但是,这些组件可以通过一个或多个数据传送部件相连。比如,处理器230和存储器225可以通过局部微处理器总线相连,而海量存储设备235、外围设备240、便携式存储介质驱动260和图形子系统270可以通过一个或多个输入/输出(I/O)总线相连。海量存储设备235,通常用磁盘驱动或光盘驱动实现,是一种用于存储处理器230使用的数据和指令的非易失性存储设备。在另一实施例中,海量存储设备235存储实现与三维对象对接的本发明的方法的计算机程序,用于加载该程序到存储器225。本发明的方法也可以存储在处理器230中。
便携式存储介质驱动260与便携式非易失性存储介质、比如软盘或其他计算机可读介质一起工作,向并从图3的计算机系统输入和输出数据及代码。在一个实施例中,本发明的用于与三维对象对接的方法存储在此类便携式介质上,并通过该便携式存储介质驱动260输入到计算机系统246。外围设备240可以包括任何类型的计算机支持的设备,比如输入/输出(I/O)接口,以另外增加计算机系统246的功能。例如,外围设备240可以包括用于将计算机系统246连接到网络的网络接口卡、调制解调器等。
输入设备255提供部分用户接口。输入设备255可以包括用于输入字母-数字和其他键信息的字母-数字键盘,或者点击设备,比如鼠标、跟踪球、触针或指针方向键。此类设备提供在本发明的方法中用于与三维对象对接的附加部件。为了显示原文的和图形的信息,图3的计算机系统246包括图形子系统270和显示器285。显示器285可以包括阴极射线管(CRT)显示器、液晶显示器(LCD)、其他适宜的显示设备或能够使用户观看三维对象的用于显示的部件。图形子系统270接收原文的和图形的信息并处理该信息,以输出到显示器285。显示器285可以用于显示三维对象、组件接口,和/或显示其他部分用户接口信息。由于本发明的方法可以通过使用显示器285直接并且实际实现,所以显示器285提供本发明的与三维对象对接的方法的实际应用程序。图3的系统246还包括音频系统250。在一个实施例中,音频系统250包括从可以在外围设备240中找到的麦克风中接收音频信号的声卡。另外,图3的系统包括输出设备245。适宜的输出设备的示例包括扬声器、打印机等。
图3的计算机系统中包含的设备均为可以在普通目的的计算机系统中发现的典型设备,并且代表在本技术领域中公知的、广泛种类的这些计算机组件。图3的系统示出了能够实际实现本发明的方法的一个平台。多种其他平台也能够满足,比如可以从苹果计算机公司得到的基于Macintosh的平台、具有不同总线配置的平台、网络平台、多处理器平台、其他个人计算机、工作站、大型机、导航系统等。
与计算机系统246相结合,使用本发明的方法的可选实施例还包括使用其他用于监视的显示部件,比如CRT显示器、LCD显示器、投影显示器等。与此类似,除了存储器225之外,可以使用任何类似种类的存储器。除了组件接口之外,也可以使用其他接口部件,包括字母-数字键盘、其他键信息,或者任何点击设备,比如鼠标、跟踪球、触针、指针或方向键。
图4是本发明的与三维对象对接的方法的实施例的方框图。在图4中,所示的样本三维对象340为一立方体。该三维对象可以在任何显示部件中显示,包括CRT显示器、LCD显示器、投影显示器、监视器等。但是,应该理解使用本发明的方法对接的三维对象可以是任何一个三维对象。使用一种诸如VRML之类的三维对象内容语言将三维对象340定义为组件。3D内容300是所观看的3D对象340的程序语言等价。通过将3D对象定义为组件,将该组件处理成简单的组件,而不是详细的对象,比如在3D对象的面向对象的描述中所使用的。在可选实施例中,3D内容语言是任何一种“智能”的虚拟现实编程语言,也就是说,不再需要额外的内容脚本或与应用程序的接口。但是,应该理解也可以使用其他的3D内容语言,只要该3D内容语言固有地包含“智能”内容,即不需要对接或存取3D内容的额外的外部脚本或接口脚本。因此“智能”3D内容是在该语言内固有地包含与用户对接所需的内容而无需额外脚本的3D内容。3D内容300通常由内容开发者(未示出)准备。在一个实施例中,3D内容300实际上在计算机系统246(图3)的一个设备中实现,比如在图3的计算机系统的存储器225中。还应该理解的是,3D内容300和计算机程序310、EAI 315以及COM包装(wrapper)320都可以位于存储器之内。但是,应该理解3D内容300也可以存储在图3的含有存储器的计算机系统的一部分中,比如(图3中的)处理器230、海量存储设备235和便携式存储介质驱动260。
计算机程序310包含可执行软件,利用EAI 315和COM包装320桥接为3D内容300生成组件接口331。如前面所论述的,在一个实施例中,计算机程序310定位于图3的各种存储部件中(比如存储器225、海量存储235或便携式存储260)。在其他实施例中,计算机程序310可以定位于计算机可读介质上,比如其他便携式或非便携式存储设备的软盘。在下面将要论述的另外的实施例中,计算机程序310可以定位于在比如因特网的网络上传输的电子信号中。计算机程序310在显示器285上生成组件接口331,并能够通过针对3D内容300的组件接口与用户/应用程序开发者330对接。3D内容300使用EAI 315以将由3D内容300形成的画面图形揭示给应用程序开发者330。EAI的描述在出版物“External Authoring Interface”,ISO/IEC 14772-11997,附录B中可以得到,在此作为参考引用。
同样存储在与计算机程序310类似的位置、比如存储器225中的COM包装320是一种包围计算机程序310的通用接口,以使计算机程序310通过EAI 315与3D内容300通信。COM包装是一种工业标准,可以在出版物“TheComponent Object Model Specification”草案版本0.9,1995年10月24日,微软公司和数字装备公司中找到,在此作为引用参考。3D内容300、EAI 315、计算机程序310和COM包装320都利用比如计算机系统246的存储或如前所述的可选存储设备来定位。应该理解的是,在计算机系统246中,以一个实施例实际实现了本发明的与三维设备对接的方法,但是没有必要一定在该系统中实现,只要可以完成如下所述的方法步骤即可。
组件接口331是计算机程序310的一部分,但是由于组件接口通常显示在显示部件285上而不显示计算机程序310,所以将其在图4中与计算机程序310中分开示出。用于显示组件接口331的显示部件包括阴极射线管(CRT)显示器、液晶显示器(LCD)、监视器(比如计算机监视器)、投影屏幕或能够可视化地显示3D对象的其他任何类型的屏幕或监视设备。组件接口331包括组接口338、可拾取接口332、可变形接口333、颜色接口334、纹理接口336和其他组件接口335。
组件接口331提供下述功能以便存取3D内容300中的具体内容。可拾取接口332提供对3D内容300中的鼠标事件的存取,正如该鼠标事件在VRML中通常是可用的那样。可变形接口333提供对3D内容300的位置、比例或旋转属性的存取。颜色接口334提供对3D内容300的颜色和材料属性的存取。纹理接口336提供对3D内容300的表面图像的应用程序的存取。组接口338如本领域所公知的、提供存取对象画面图形分层的操作。
这些组件接口显示在显示器上,用于比如应用程序开发者330的用户与比如对象340(图3)的三维对象对接。为了执行本发明的方法,处理器230与显示器285一起用于执行计算机程序310。应该理解的是,尽管在此仅描述了有限的组件接口,但是组件接口可以包括无限多个从功能上描述3D对象的接口。此类组件接口的一个示例在下面的表2中提供。
组件接口331还包括其他组件接口335,称作可扩展的计算机接口335。其他的组件接口335允许应用程序开发者或用户以除了列为组件接口332-334、336、338的标准选择之外的方式与三维对象对接。扩展接口的扩展的列表提供在表3的示例中。具有扩展接口的优点在于应用程序开发者330或用户能够以所列的组件接口331之外的方式与三维对象对接。但是应该理解的是,可以使用用于扩展用户接口的其他附加组件接口。
在使用时,3D对象340显示在显示部件235上,比如监视器、CRT显示器、LCD显示器、屏幕、投影设备等。与3D对象340一起,显示器285还通过使用执行计算机程序310以显示组件接口331的处理器230,显示组件接口331。希望与3D对象340对接的用户或应用程序开发者330可以从组件接口331中选择用户所希望存取的接口(332-336,338)。一旦选择了一个接口,计算机程序就通过COM包装320与组件接口对接,然后并通过EAI 315与3D内容300对接,以存取3D内容300的合适的“智能”内容。3D内容300的一个示例示于下面的表1中。
本发明的方法存在如下显著的优点。首先,应用程序开发者300无需知晓VRML(包含在3D内容中),并且应用程序可以方便地与VRML对接,以便与三维对象340对接,来开发用于3D对象的附加3D应用程序。第二,由于3D内容是“智能”的,即3D内容或组件固有地包含智能内容,所以应用程序开发者或用户无需为了提供附加的3D内容或与3D内容对接而附加脚本。由此,可以显著地节约时间。第三,示于图4的本发明的方法的实施例允许用户通过所示的其他组件接口335扩展组件接口。因此用户不会受限于组件接口331的“短列表”。本发明的另一优点在于三维对象可以是已经在VRML 3D内容300中定义过的任何一个对象,同样地,可以是任一组件接口可能应用的组件,而不考虑需要接口的三维对象。
下面的表1是图4的3D内容300的一个示例。该示例并不是一个可编译或可执行的程序、一个完整的程序语言或包含上述的所有特征。它是在与上述发明的原理相一致的本发明的对接方法中实现的各种功能和处理过程的VRML例证。表1以及表2和3受在上述的版权公告中展开描述的版权保护。
表1<pre listing-type="program-listing"><![CDATA[ 3D Content PROTO spinningBox [ #To store any proto info exposedField MFString protoInfo ["G3dBox"] #Transform fields with default values #IG3dTransformableObj exposedField SFVec3f center 0 0 0 exxposedField SFVec3f translation 0 0 0 exposedField SFRotation rotation 0 1 0 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 field SFVec3f bboxCenter0 0 0 field SFVec3f bboxSize -1-1-1 #IG3dGrroup eventIn MFNode addChildren eventIn MFNode removeChildren exposedField MFNode children[] #Material fields #IG3dColoredObjexposedField SFFloat arnbientIntensity 0.2exposedField SFColor diffuseColor .8.8.8exposedField SFColor ernissiveColor0 0 0exposedField SFFloat shininess 0.2exposedField SFColor specularColor 0 0 0exposedField SFFloat transparency 0#ImageTexture fields#IG3dTextureexposedField MFString url []field SIBool repeatS TRUEfield SFBool repeatT TRUE#textureTransform fieldsexposedField SFVec2f centerTexture 0 0exposedField SFFloat rotationTexture 0exposedField SFVec2f scaleTexture 1 1expogdFieldSFVec2f translationTexture0 0#TouchSensor#IG3dMouseEventsexposedField SFBool enabledFALSEeventOut SFBoolisActiveeventOut SFBoolisOvereventOut SFTimetouchTimeeventOut SFVec3f hitPoint_changed#Box fields#IG3dBoxfield SFVec3f size 2 2 2#IG3dExtensionexposedField SFBool animationEnabled FALSEexposedField SFFloat animationDuration 10#Extemion MetaData describing the additional Extension propertiesexposedField MFString Properties[ "animationEnabled","Enable the Animation","SFBool", "animationDuration","The duration of the animation","SFFloat"]]{DEF TRANSFORM Transform { center IS center translation IS translation rotation IS rotation scale IS scale scaleOrientation IS scaleOrientation bboxCenter IS bboxCenter bboxSize IS bboxSize children [ Shape { appearance Appearance { material Material { ambientIntensity IS ambientIntensity diffuseColor IS diffuseColoremissiveColor IS emissiveColor shininess ISshininess specularColor IS specularColor transparency IS transparency } texture ImageTexture { #for simplicity, no #MovieTextures or PixelTextures #we could expose the texture #node to all these url IS url repeatS IS repeatS repeatT IS repeatT } textureTransform TextureTransform { center IS centerTexture rotation IS rotationTexture scale IS scaleTexture translation IS translationTexture } } #Appearance geometry Box { size IS size } } TouchSernsor { enabled IS euabled isActive IS isActive isOver IS isOver touchTime IS touchTime hitPoint_changed IS hitPoint_changed } Group { renoveChildren IS removeChildren addChildren IS addChildren children IS children }]#children DEF TIMER Timesensor { enabled IS animationEnabled loop TRUE cycleInterval IS animationDuration } DEF INTERPOLATOR OrientationInterpolator{ #for rotation key
keyValue
} ROUTE TIMER.fraction_changed TO INTERPOLATOR.set_fraction ROUTE INTERPOLATOR.value_changed TO TRANSFORM.set_rotation} #transform}#proto definition]]></pre>
下面的表2是本发明组件接口331的一个示例。该示例并不是一个可编译或可执行的程序、一个完整的程序语言或包含在此论及的所有特征,它是本发明方法的各种功能和处理过程的一个例证。
表2<pre listing-type="program-listing"><![CDATA[Component Interfaces [ object, uuid(A20A988C-B7FC-11D1-B0A6-00A024CBE637), dual, helpstring("IG3 dGroup Interfac"), pointer_default(unique) ] interface IG3dGroupIUnknown [id(1),helpstring("method AddChild")] HRESULT AddChild(LPUNKNOWN pObj); [id(2),helpstring("method GetChild")] HRESULT GetChild(int idx,LPUNKNOWN* ppObj); [id(3),helpstring("method RemoveChild")] HRESULT RemoveChild(int idx); [id(4),helpstring("method RemoveChiildByRef")] HRESULT RemoveChildByRef(LPUNKNOWN pUnk); [id(5),helpstring("method RemoveAllChildren")] HRESULT RemowAllChildren(); [id(6), helpstring("method RenderChildren")] HRESULT RenderChildren(IG3dContext* pContext); [id(7), helpstring("method GetNumChildren")] HRESULT GetNumChildren(int* pNum); }; [ object, uuid(42D25EC0-B98F-11d1-B0A6-00A024CBE637), dual, helpstring("IG3dColoredObj Interface"), pointer_default(unique) ] interface IG3dColorredObjIUnknown { [propget,id(1),helpstring("propaty DiffuseColor")] HRESULT DiffuseColor([out,retval]OLE_COLOR*pVal); [propput,id(l),helpstring("property DiffuseColor")] HRESULT DiffuseColor([in] OLE_COLOR newVal); [propget,id(2),helpstring("property AmbientIntensity")] HRESULT AmbimtIntmsity([out,retval] float*pVal); [propput,id(2),he1pstring("property AmbientIntensity")] HRESULT AmbientIntensity([in] float newVal); [propget,id(3), helpstring("property EmissiveColor")] HRESULT EnissiveColor([out,retval] OLE_COLOR *pVal); [propput,id(3),helpstring("property EmissiveColor")] HRESULT EmissiveColor([in] OLE_COLOR newVal); [propget,id(4),helpstring("propertyShininess")] HRESULT Shininess([out, retval] float *pVal); [propput,id(4),helpstring("property Shininess")]HRESULT Shininess([in]float newVal); [propget,id(5),hapstring("property SpecularColor")] HRESULT SpecuarColor([out,retval]OLE_COLOR*pVal [propput,id(5),helpstring("property SpeoularColor")] HRESULT SpecularColor([in]OLE_COLOR newVal); [propget,id(6),helpstring("property Transparency")] HRESULT Transparency([out,retval] float*pVal); [propput,id(6),helpstring("property Transparency")] HRESULT Transparency([in]float newVal);};[ object, uuid(D198B9A0-BA67-11d1-B0A6-0A024CBE637), helpstring("IG3dTransformableObj Interface"), pointer_default(unique)]interface IG3dTransformableObjIunknown{ [propget,id(1),helpstring("property Center")] HRESULT Center([out,retval]LPUNKNOWN*pVal); [propput,id(1),helpstring("property Center")] HRESULT Center([in] LPUNKNOWN newVal); [id(2),helpstring("method put_Rotatinon")] HRESULT put_Rotation(LPUNKNOWN pRot); [id(3),helpstring("method get_Rotation")] HRESULT get_Rotation(IG3dRotation**pRot); [propget,id(4),helpstring("property Scale")] HRESULT Scale([out,retval]LPUNKNOWN*pVal); [propput,id(4),helpstring("property Scale")] HRESULT Scale[in] LPUNKNOWN newVal); [id(5),helpstring("method put_scaleOrientation")] HRESULT put_ScaleOrientation(LPUNKNOWN pRot); [id(6),helpstring("method get_ScaleOrientation")] HRESULT get_ScaleOrientation(IG3dRotation**ppRot); [propget,id(7),helpstring("property Translation")] HRESULT Translation([out,retval]LPUNKNOWN*pVal); [propput,id(7),helpstring("property Translation")] HRESULT Translation([in] LPUNKNOWN newVal); [propget,id(8),helpstring("property BBoxCenter")] HRESULT BBoxCenter([out,retval]LPUNKNOWN*pVal); [propput,id(8),helpstring("property BBoxCenter")] HRESULT BBoxCenter([in]LPUNKNOWN newVal); [propget,id(9),helpstring("property BBoxSize")] HRESULT BBoxSize([out,retval]LPUNKNOWN*pVal); [propput,id(9),helpstring("property BBoxSize")] HRESULT BBoxSize([in] LPUNKNOWN newVal); [propget,id(10),helpstring("property ScaleFactor")] HRESULT ScaleFactor[out,retval]LPUNKNOWN*pVal); [propput,id(10),helpstring("property ScaleFactor")] HRESULT ScaleFactor[in] LPUNKNOWN newVal); object, uuid(889ED240-CE15-11d1-B0A6-00A024CBE637), helpstring("IG3dTextureInterface"), pointer_default(unique)]interface IG3dTextureIUnknown{ [id(1),helpstring("method put_Center")]HRESULT put_Center(fioat x, float y); [id(2),helpstring("method get_Center")] HRESULT get_Center(float* x,float* y); [propget,id(3),helpstring("property Rotation")] HRESULT Rotation([out,retval]float *pVal); [Propput,id(3),helpstring("property Rotaion")] HRESULT Rotaion([in] float newVal); [id(4),helpstring("method put_Scale")] HRESULT put_Scale(floa x, float y); [id(5),heystring("method get_Scale")] HRESULT get_Scale(float* x,float* y); [id(6),helpstring ("method put_Translation")] HRESULT put_Translation(float x,float y); [id(7),helpstring("method get_Translation")] HRESULT get_Translation(float* x,float* y); [id(8),helpstring("method SetTextureType")] HRESULT SetTextureType(int iType); [propget,id(9),helpstring("property Url")] HRESULT Url([out,retval]BSTR *pVal); [propput id(9),helpstring("property Url")] HRESULT Url([in] BSTR newVal); [propget,id(10),hapstring("property RepeatS")] HRESULT RepeatS([out,retval]BOOL *pVal); [propput,id(10),helpstring("property RepeatS")] HRESULT RepeatS([in] BOOL newVal); [propget,id(11),helpstring("property RepeaT")] HRESULT RepeatT([out,retval]BOOL *pVal); [propput,id(11),helpstring("property Repcat'T")] HRESULT RepeatT([in]BOOL newVal); [id(12),helpstring("method GetTextureType")] HRESULT GetTextureType(int* piType);};interface IG3dPiokableIUnknown{ [propget,id(1),helpstring("property PickHandler")] HRESULT PickHandler([out,retval]LPUNKNOWN *pVal); [propput,id(1),helpstring("property PickHandler")] HRESULT PickHandler([in]LPUNKNOWN newVal);}; object, uuid(CC5C92C0-DDF5-11d1-B0A6-00A024CBE637), dual, helpstring("IG3dPickHandler Interface"), pointer_default(unique)]interface IG3dPickHandlerIUnknown{ [id(1),helpstring("method OnPick")] HRESULT OnPick(WORD wMouseMsg,LPUNKNOWN pUnkObj);};[ object, uuid(48DE9F34-DE24-11D1-A2FC-0000C0D05EF9), dual, helpstring("IG3dColorBvr Interface"), pointer_default(unique)]]]></pre>
下面的表3能够使用户扩展组件接口331的图4中的其他组件接口335的一个示例。该示例并不是一个可编译或可执行的程序、一个完整的程序语言或包含上述的所有特征。它是在与上述发明的原理相一致的本发明的对接方法中实现的各种功能和处理过程的VRML例证。其他组件接口335通常包括下述扩展灵巧属性列表、灵巧属性、灵巧窗口小部件、灵巧加工厂、属性、属性列表、扩展和扩展加工厂,更详细的描述见下面的表3。这些扩展的使用为应用程序提供除组件接口332-334、336、338之外的附加接口,从而使接口更加可扩展。进行这些扩展的方式在表3中详细描述。
表3<pre listing-type="program-listing"><![CDATA[Other Interfaces ∥SmartView.idlIDL source for SmartView.dll ∥ ∥This file will be processed by the MIDL tool to ∥produce the type library (SmartView.tlb) and marshalling code. import"oaidl.idl"; import"ocidl.idl"; [ object, uuid(4E08E3E3-917D-11D1-A290-00C04FB6CD35), dual, helpstring("IMFSCtring Interface"), pointer_default(unique) ] interface IMFStringIDispatch { [id(1),helpstring("method SetValue")]HRESULT SetValue([in] BSTR batrNewValue,short uIndex); [id(2),helpstring("method GetCount")]HRESULTGetCount([out,retval] short* pCount); [id(3),helpstring("method GetValue")]HRESULT GetValue([in] short uIndex,[out,retval]BSTR* pStringOut);};[ objct, uuid(62D197A0-0ABF-11D2-A291-00C04FB6CD35), dual, helpstring("ISmartProperty Interface"), pointer_default(unique)]interface ISmartPropertyIDispatch{ [id(1),helstring ("method GetName")] HRESULT GetName[out,retval] BSTR* pstrPropertyName); [id(2),helpstring("method GetDescription")] HRESULT GetDescription([out,retval]BSTR*pstrPropertyDesc); [id(3),helpstring("method SetValue")] HRESULT SetValue[in]VARIANT vDataValue); [id(4),helpstring("method GetValue")] HRESULT GetValue([out]VARIANT*pDataValueOut, [out,retval]short* psFieldType); [id(5),helpstring("method Advise")] HRESULT Advise([in] IUnknown* pSmartNotifySink); [id(6),helpstring("method Unadvise")] HRESULT Undvise(); [id(7),helpstring("method GetFieldType")] HRESULT GetFieldType[out,retval]short* pFieldType); [id(8),helpstring("method GetPropertyType")] HRESULT GetPropertyType([oout,retval]short* pPropertyType);};[ object, uuid(344AC98A-EFC4-11D1-A291-00C04FB5CD35), helpstring("ISmartPropertyList Interface"), pointer_default(unique)]interface ISmartPropertyListIDispatch { [id(1),helpstring("method GetCount")] HRESULT GetCount([out,retval]short* pPropertyCount); [id(2),helpstring("method GetNameByIndex")] HRESULT GetNameByIndex([in]short sIndex, [out,retval] BSTR* pstrPropertyName); [id(3),helpstring("method GetNames")] HRESULT GetNames([out,retval]IMFString** ppNames); [id(4),helpstring("method GetDescription")] HRESULT GetDescription([in]short sIndex, [out,retval]BSTR* pstrDescription); [id(5),helpstring("method GetDescriptionByName")] HRESULT GetDescriptionByName[in]BSTR strPropertyName, [out,retval]BSTR*pstrPropertyDesc); [id(6),helpstring("method GetProperty")] HRESULT GetProperty([in]short sIndex, [out,retval]ISmartProperty**ppProperty); [id(7),helpstring("method GetPropertyByName")] HRESULT GetPropertyByName([in]BSTR strPropertyName, [out,retval]ISmartProperty**ppProperty); [id(8),helpstring("method GetPropertyType")]HRESULT GetPropertyType(short sIndex,short *pFieldType);};[ object, uuid(344AC980-EFC4-11D1-A291-00C04FB6CD35), dual, helpstring("ISmartWidget Interface"), pointer_default(unique)]interface ISmartWidgetIDispatch{ [id(1), helpstring("method Shutdown")] HRESULT Shutdown(); [id(2), helpstring("method GetPropertyList")] HRESULT GetPropertyList([out,retval] ISmartPropertyList** ppPropertyList); [id(3),heipstring("method Initialize")] HRESULT Inititalize(); [id(4),hapstring("method GetChildCount")] HRESULT GetChildCount([out,retval]short* psCount); [id(5),hapstring("method GetChild")] HRESULT GetChild(in]short sIndex, [out,retval]ISmartWidget** ppChildWidget); [id(6),helpstring("method AddChild")] HRESULT AddChild([in] BSTR strSouroeUrl, [in]BSTR strDefName, [out,retval]ISmartWidget** ppChildWidget); [id(7),hapstring("method GetName")] HRESULT GetName([out,retval] BSTR* pstrWidgetName); [id(8),helpstring("method GaVRMLString")] HRESULT GetVRMLString[out,retval] BSTR* pstrVRML); [id(9),helpstring("method AddChild2")] HRESULT AddChild2([in]ISmartWidget* pChildWidget); [id(10),helpstring("method GetPropertyByName")] HRESULT GeaPropertyByName]BSTR strPropertyName, [out,retval]ISmartProperty** ppProperty); [id(11),helpstring("method RemoveChild")] HRESULT RemoveChild(short sIndex,ISmartWidget** pRemoved); object, uuid(DCCBEA22-2AEE-11D2-A298-00C04FB6122D), dual, helpstring("ISmartFactory Interrface"), pointer_default(unique)]interface ISmartFactoryIDispatch{ [id(1),helpstring("method CreateBlankWorldWidget")] HRESULT CreateBlankWorldWidget([ [out,retval]ISmartWidget **ppWorldWidget); [id(2)helpstring("method CreatFieldType")] HRESULT CreateFieldType([in]short sFieldType, [out,retval]IUnknown **ppNewFrield); [id(3),helpstring("method CreateSmarExtension")] HRESULT GreateSmartExtension([in] BSTR lpGuid, [out,retval] IUnknown **pSmartEx); [id(4),helpstring("method CreateSmartWidget")] HRESULT CreateSmartWidget[in] BSTR bsUrl, [in] BSTR bsDefName,[in] BSTR bdFieldValues, [out,retval] ISmartWidget **ppNewWidget),} typedef [ uuid(5C6BD5A0-E653-11d1-A291-00C04FB6CD35), helpstring("Field Type constants") ] enum { [helpstring("Unknown Field Type")] UnknownType= 0, [helpstring("SFBool Field Type")] SFBool =1, [helpstring("SFImage Field Type")] SFImage=2, [helpstring"SFTime Field Type")] SFTime =3, [helpstring("SFColor Field Type")] SFColor=4, [helpstring("MFColor Field Type")] MFColor=5, [helpstring("SFFloat Field Type")] SFFloat=6, [helpstring("MFFloat Field Type")] MFFloat=7, [helpstring("SFInt32 Field Type")] SFInt32=8, [helpstring("MFlnt32 Field Type")] MFInt32=9, [helpstring("SFNode Field Type")] SFNode =10, [helpstring("MFNode Field Type")] MFNode =11, [helpstring("SFRotation Field Type")] SFRotation =12, [helpstring("MFRotation Field Type")] MFRotation =13, [helpstring("SFString Field Type")] SFString =14, [helpstring("MFString Field Type")] MnFString=15, [helpstring("SFVec2f Field Type")] SFVVec2f =16, [helpstring("MFVcc2f Field Type")] MFVec2f=17, [helpstring("SFV=3f Field Type")] SFVec3f=18, [helpstring("MFVec3f Field Type")] MFVec3f=19, [helpstring("MFTime Field Type")] MFTime =20 } FieldTypes;Iinterface IG3dPropertyIUnknown{ HRESULT Initialize(LPUNKNOWN pObject,BSTR strName,BSTR strDesc,short sType, short g3dPropId); HRESULT ExtensionObject[out,retval] LPUNKNOOWN *pVal); HRESULT ExtensionObject([in] LPUNKNOWN newVal); HRESULT GetStringValue(BSTR* newVal); HRESULT SetValue([in] VARIANT vDataValue);HRESULT GetValue([out] VARIANT* pDataValueOut,[out,retval] short* psFieldType); HRESULT GetName([out,retval] BSTR* pstrPropertyName); HRESULT GetDescription([out,retval] BSTR* pstrPropertyDesc); HRESULT GetFieldType([out,retval] short* pFieldType); HRESULT GetPropertyType[out,retval] short* pPropertyType);}interface IG3dPropertyListIUnknown{ HRESULT GetCount([out,retval] short* pPropertyCount); HRESULT GeaNameeByIndex([in] short sIndex,[out,retval] BSTR* pstrPropatyName); HRESULT GetDescription([in] short sIndex,[out,retval] BSTR* pstrDescription); HRESULT GetDescriptionByName(BSTR strPropertyName,BSTR* pstrPropertyDesc); HRESULT GetProperty([in] short sIndex,[out,retval]IG3dPropcrty**ppProperty); HRESULT GetPropertyByName(BSTR strPropatyName,IG3dProperty** ppProperty); HRESULT GetPropertyType(short sIndex,short *pFieldType); HRESULT AddProperty(IG3dProperty* pProp);};interface IG3dExtensionIUnknown{ HRESULT SetPropertyValue(IG3dProperty* pProp,VARLANT vVarIn); HRESULT GetPropertyValue(IG3dProperty* pProp,VARIANT* pVarOut); HRESULT GetPropertyList([out,retval] IG3dPropertyList** ppPropertyList); HRESULT G3dObject([out,retval] LPUNKNOWN *pVal); HRESULT G3dObject([in] LPUNKNOWN newVal); HRESULT GetPropertyByName(BSTR strPropertyName,IG3dProperty** ppProperty);};interface IG3dExtensionFactoryIUnknown{ HRESULT CreateG3dExtension(CLSID clid,BSTR bsUrl,IG3dExtension** ppObj);};]]></pre>图5是本发明方法的流程图。在模块350,本发明方法的第一步包括将3D对象定义为具有组件接口的组件。在一个实施例中,定义步骤350以三维内容语言比如VRML执行,并包括以三维内容语言定义组件和定义至少一个描述该组件的属性的步骤。描述组件属性的示例可以在作为3D内容300的表1中找到。属性在VRML中有时称作字段,通常包括颜色、形状、变形、行为、事件处理和分组。在步骤350中还至少定义一个将该组件与第二组件(未示出)对接的路由。第二组件可以代表除最初的三维对象(比如图4的立方体340)之外的任何其他的用户想连接的三维对象,否则将第二组件移至与最初的组件相关。路由包括事件和动作。事件指由3D内容300中的具体对象发送的消息。动作接收该消息并基于收到的事件执行功能。路由是连接事件和动作的机制。本发明的属性和路由都包括在图4的3D内容300(表1)中,并认为它们是“智能”内容。也就是说,3D内容不需要定义内容或提供与该3D内容的接口的附加脚本。由此,当在3D内容300或VRML自身之内提供所有的属性、路由和定义时,认为描述三维对象的3D内容或VRML是“智能”的。这与需要为内容创建外部脚本和与3D内容或其他应用程序对接的外部脚本、并由此被认为不是“智能”的其他3D语言不同。
回到图5,下一步360显示图4的组件接口331。该显示通常在计算机系统的监视器上完成,但是也可以显示在能够显示三维对象的任何其他显示部件上。此类设备包括CRT、LCD、计算机屏幕、电视、投影屏幕等,或能够视觉上展现数字表现的画像的任何其他显示设备。显示步骤360在本发明的实际实现和功能中是非常重要的一步,将本发明方法转换为用户可以对接的部件。这样,计算机程序就成为可与三维对象对接的实际应用程序,并担当起用户和3D对象之间接口的作用的编程的计算机,而不用知晓3D内容的编程语言,比如VRML。由此,通过本发明的方法将计算机变形为带有复杂的VRML的接口。
本发明方法的图5的下一步包括通过组件接口与三维对象对接。在一个实施例中该对接按如下执行,首先在显示器上向用户提供多个组件接口,然后用户选择该多个组件接口中的一个,以存取3D智能内容300(图4)。在一个实施例中,用户通过图3的包括字母-数字键盘或诸如鼠标、跟踪球、触针、指针或方向键之类的点击设备的计算机系统的接口设备,可以选择多个接口组件中的一个。从而应用程序开发者或用户能够通过所选择的多个组件接口中的一个与三维对象对接。
在另一实施例中,本发明可以通过使用常规的普通目的的计算机实现,比如图3的计算机系统,或通过依据本公开材料编程的专用数字计算机或微处理器实现,这对于计算机领域的技术人员是显而易见的。基于本公开的材料,程序员可以容易地准备适当的软件代码,并且对于软件领域的技术人员是显而易见的。本发明也可以通过准备应用程序专用集成电路或通过将常规的组件电路交互连接成适当的网络来实现,并且对于该技术领域的人员是显而易见的。
在另外的实施例中,本发明还包括计算机程序产品,其是具有在其上/其中存储有能够使计算机执行本发明的对接方法的指令的存储介质(媒体)。该存储介质可以包括、但并不限于任何类型的盘,包括软盘、光盘、DVD、CD ROM、磁光盘;RAM;EPROM;EEPROM;磁卡或光卡;或任何类型的适宜存储电子指令的媒体。在该介质/媒体上,可以电子存储图4的计算机程序、3D内容、EAI和COM包装。
本发明包括存储在任何类型的计算机可读介质(媒体)上的软件,用于控制普通目的/专用计算机或微处理器的硬件,并用于使计算机或微处理器与利用本发明结果的人类用户或其他机构相互交流。该软件可以包括但并不限于设备驱动器、操作系统和用户应用程序。最后,该计算机可读介质还包括执行如上所述的本发明的对接方法的软件。
仍旧在另一实施例中,本发明还包括用于与所显示的三维对象对接的装置。三维对象显示在监视器上或如上所述包括CRT显示器、LCD显示器、计算机监视器、屏幕、投影设备等的其他显示部件上。该装置首先包括一用于将三维对象定义为一个组件的部件。此部件包括任何类型的盘,包括软盘、光盘、DVD、CD ROM、磁光盘;RAM;EPROM;EEPROM;磁卡或光卡;或任何类型的适宜存储电子指令的媒体。在一个实施例存储在上述定义部件上的电子指令包括3D内容300、EAI 315、计算机程序310和COM包装320。在该实施例中,该装置还包括用于显示组件接口331的部件。用于显示组件接口的部件通常为监视器,但是也可以使用其他的显示部件,包括CRT显示器、LCD显示器、计算机监视器、电视机监视器、其他监视器、屏幕、投影设备等。
本发明的装置还包括用于通过组件接口与3D对象对接的部件。该对接部件包括观看3D对象的如上所述的显示部件、存储3D内容300的存储部件、EAI 315、计算机程序310、COM包装320和处理器230。在另一实施例中,该对接部件还包括用于输入字母-数字和键信息的字母-数字键盘、或诸如鼠标、跟踪球、触针、指针或方向键之类的点击设备。
在另外的实施例中,本发明的方法可以在数据网络上执行。也就是说,图5的定义步骤350以三维内容语言将三维对象定义为组件,其中该组件具有组件接口并且固有地具有智能内容。然后通过在网络上(例如诸如因特网的数据网络、帧中继网络、ATM、或甚至在该网络上传输电子信号的局域网)传输电子信号执行显示组件接口的显示步骤360。电子信号在网络上传输比如3D内容300、计算机程序310、COM包装320和EAI315。但是,应该理解的是,可以在网络上单独地、或一起传输这些项目中的一项或多项,并实现权利要求所主张的本发明的方法。一旦已经在网络上传输了电子信号,可以执行对接步骤370,通过组件接口使用上述结合其他实施例描述的对接部件和对接的子步骤执行与3D对象的对接。非常重要的是应该理解,仅在网络上传输计算机程序310和相关的项目,而不是如图3所示的作为计算机系统的一部分,这并没有超出权利要求所主张的本发明的范围。
很明显,在上述材料的指引下可以对本发明进行各种修改和变化。由此应该理解在所附权利要求的范围之内,可以不同于在此的具体描述来实施本发明。
权利要求
1.一种与所显示的三维对象对接的方法,所述方法包括步骤将所述三维对象定义为具有组件接口的组件,所述组件固有地包含智能内容;显示所述组件接口;和通过所述组件接口与所述三维对象对接。
2.如权利要求1的方法,其中所述定义步骤还包括下列步骤以三维内容语言定义所述组件;定义描述所述组件的至少一个属性;和定义将所述组件与第二组件对接的至少一个路由,以便所述至少一个属性与所述至少一个路由包含所述智能内容的部分。
3.如权利要求2的方法,其中所述三维内容语言是虚拟现实建模语言。
4.如权利要求2的方法,其中所述至少一个属性从由颜色、形状、变形、行为、事件处理和分组构成的组中选择。
5.如权利要求2的方法,其中所述至少一个路由从由事件和作为用于组件的事件模型的动作构成的组中选择。
6.如权利要求1的方法,其中所述组件接口从由组、可拾取、可变形、颜色和纹理构成的组中选择。
7.如权利要求1的方法,其中所述组件接口从由灵巧属性列表、灵巧属性、灵巧窗口小部件、灵巧加工厂、属性、属性列表、扩展和扩展加工厂构成的组中选择。
8.如权利要求1的方法,其中所述显示步骤还包括在阴极射线管显示器上显示所述组件接口。
9.如权利要求1的方法,其中所述对接步骤还包括下列步骤提供多个组件接口;从所述多个组件接口中选择一个以存取所述智能内容;和通过所述选择所述多个组件接口中的一个与所述三维对象对接。
10.一种与所显示的三维对象对接的装置,包括用于将所述三维对象定义为具有组件接口的组件的部件,所述组件固有地包含智能内容;用于显示所述组件接口的部件;和用于通过所述组件接口与所述三维对象对接的部件。
11.如权利要求10的装置,其中所述定义部件还包括在其上存储了计算机程序的计算机可读介质。
12.如权利要求10的装置,其中所述显示部件还包括阴极射线管显示器。
13.如权利要求11的装置,其中所述计算机程序用虚拟现实建模语言编写。
14.一种与所显示的三维对象对接的计算机系统,包括用于显示所述三维对象的部件;存储器,存储用于与显示在所述显示部件上的三维对象对接的计算机程序,运行的所述计算机程序执行下列步骤将所述三维对象定义为具有组件接口的组件,所述组件固有地包含智能内容,在所述的显示部件上显示所述组件接口,和通过所述组件接口与所述三维对象对接;以及处理器,用于与所述监视器一起执行所述计算机程序。
15.如权利要求14的计算机系统,其中所述定义步骤还包括下列步骤以三维内容语言定义所述组件;定义描述所述组件的至少一个属性;和定义将所述组件与第二组件对接的至少一个路由,以便所述至少一个属性与所述至少一个路由包含所述智能内容的部分。
16.如权利要求15的计算机系统,其中所述三维内容语言是虚拟现实建模语言。
17.如权利要求14的计算机系统,其中所述组件接口从由组、可拾取、可变形、颜色和纹理构成的组中选择。
18.如权利要求14的计算机系统,其中所述组件接口从由灵巧属性列表、灵巧属性、灵巧窗口小部件、灵巧加工厂、属性、属性列表、扩展和扩展加工厂构成的组中选择。
19.如权利要求14的计算机系统,其中所述对接步骤还包括下列步骤提供多个组件接口;和从所述多个组件接口中选择一个以存取所述智能内容。
20.一计算机可读介质,具有存储在该介质上的计算机程序,以便当将该介质加载到计算机上时,使所述计算机执行与显示在所述计算机上的三维对象对接的功能,所述计算机通过执行下列步骤与所述三维对象对接将所述三维对象定义为具有组件接口的组件,所述组件固有地包含智能内容;显示所述组件接口;和通过所述组件接口与所述三维对象对接。
21.如权利要求20的计算机可读介质,其中所述定义步骤还包括下列步骤以三维内容语言定义所述组件;定义描述所述组件的至少一个属性;和定义将所述组件与第二组件对接的至少一个路由,以便所述至少一个属性与所述至少一个路由包含所述智能内容的部分。
22.如权利要求21的计算机可读介质,其中所述三维内容语言是虚拟现实建模语言。
23.如权利要求20的计算机可读介质,其中所述组件接口从由组、可拾取、可变形、颜色和纹理构成的组中选择。
24.如权利要求20的计算机可读介质,其中所述组件接口从由灵巧属性列表、灵巧属性、灵巧窗口小部件、灵巧加工厂、属性、属性列表、扩展和扩展加工厂构成的组中选择。
25.如权利要求20的计算机可读介质,其中所述对接步骤还包括下列步骤提供多个组件接口;和从所述多个组件接口中选择一个以存取所述智能内容。
全文摘要
一种与所显示的三维对象对接的方法,包括步骤:将三维对象定义为具有组件接口的组件(图5,要素350),显示该组件接口(图5,要素360),然后通过该组件接口与三维对象对接(图5,要素370)。组件固有地包含智能内容。本发明还提供具有完成本发明步骤的部件的装置以及实现本发明方法的计算机系统和计算机可读介质。
文档编号G06T15/00GK1342301SQ99814206
公开日2002年3月27日 申请日期1999年11月3日 优先权日1998年11月5日
发明者帕特里克·林恩, 约翰·费尔利, 卡马尔·沙, 克莱·格雷厄姆 申请人:电脑联合想象公司