优选实施例的详细描述
以下讨论一般涉及使用管理在生成和呈现中所使用的传送工具的通信协议来生成和呈现动画(即,随时间推移而修改图形对象的功能)的计算机系统。图形对象可包括窗口、对话框等等。如本文中所使用的,术语“计算机系统”可指单个计算机或是一起工作的多个计算机。计算机系统包括多个不同的动画/呈现系统—或子系统—其中每一个都聚焦在特定的动画或呈现功能上。
在以下讨论中,在两个动画系统或子系统的环境中描述通信协议。但是注意,这些仅仅是示例,并且可与两个以上不同的动画系统或子系统一起使用该通信协议。
在本文中所介绍的通信协议的讨论中使用术语“呈现”。“呈现”可被视为动画过程中为显示定义动画和/或显示动画的步骤。“呈现系统”可以是包括呈现功能的系统。可将其严格定义为描述仅执行呈现功能的系统,或可将其宽泛地定义为描述诸如动画系统等除了一个或多个呈现功能以外还执行其它功能的系统。
类似地,如本文中所使用的术语“动画系统”是指包括动画功能的系统。“动画系统”可以是仅执行动画功能的系统,或者可以是执行诸如呈现功能等一个或多个动画功能以及其它功能的系统。
使用“呈现系统”或“动画系统”这两个特定术语中的任何一个并不意味着限制与其相关联的体系结构和/或功能的范围。所使用的术语的正确范围可从使用该术语的上下文中推导。
全特征的动画系统包括复杂的定时结构,其中每个动画可由单独的时钟驱动,而这些时钟由应用程序开发者所指定的任意一组规则联系。例如,可指定一个动画(A)恰好在一个不同的动画(B)结束的同时开始,或可指定一组动画以其正常速度的半速运行。在更加一般的意义上,这一系统还可通过将一时钟与每一件线性媒体相关联,来处理动画与诸如音频和视频等其它类型的线性媒体的同步。
此外,时钟是交互式的,因为它们可在任何时候被启动、暂停或停止,并且那些交互可能会引起如同步规则所指示地贯穿整个定时分层结构传播的改变。接前例,如果动画(B)被暂停,并在五秒钟后重新开始,则动画(A)将比原始计划晚五秒钟开始。这进而可能引起其它时钟中的定时改变,从而可能贯穿整个定时结构传播。
计算对定时结构的改变是成本高昂的无界操作,因此这一操作不适用于具有达到可预测的帧速率的目标的实时呈现系统。这两个目标(提供全特征的动画系统和维持可预测的帧速率)是矛盾的。一个解决方案是将系统分成两个部分:一个知道诸时钟之间的同步规则,而另一个将每个时钟视为完全独立的实体。
本文中要求保护的通信协议将两个不同的动画系统维持在同步,以使动画可用高显示刷新速率运行而不会牺牲交互性,反之亦然。
本文中所描述的动画系统至少包括两个组件,即主要与交互和复杂的定时结构相关的高级动画子系统、以及主要与以高且恒定的显示刷新速率在显示器上呈现一个或多个动画相关的低级动画子系统。术语“高级”是指此动画系统更靠近用户这一事实,而“低级”动画系统更靠近裸机(或是机器)。
高级动画子系统的一个示例是根据从应用程序本身或从用户所接收的数据来控制动画的应用程序。低级动画子系统的示例是控制动画数据到物理显示的动画的显示设备系统。显示设备系统包括硬件组件、以及可被包括在显卡硬件(未明确示出)或被包括在不是物理地驻留在显卡上的组件中的软件组件。
在本讨论中,将把显示设备作为是显示系统或者动画系统或子系统来参考。但是注意,显示系统的所有组件和处理并非都必须物理地驻留在该显示设备上。如本文中所使用的术语“显示设备”还包括控制显示器和任何种类的显示存储器的处理器操作。
通常认为动画过程在包括高级动画子系统和低级动画子系统两者的单个机器上的进程中运行(使用单个动画系统)。但是,本文中针对两个不同的动画系统所描述的通信协议预期高级和低级动画子系统:(1)作为单个进程中的两个线程运行,(2)作为单个机器上的两个不同进程运行;或者(3)在被网络分开的两个不同机器上运行,诸如在客户机-服务器体系结构中。
示例性服务器-客户机系统
图1是根据本文中所描述的系统和方法的示例性服务器-客户机系统100的框图。服务器-客户机系统100包括通过诸如因特网等网络106通信的服务器102和客户机104。
服务器102包括存储器108、处理器110、用于控制通过网络106的通信的网络接口卡112、以及服务器执行标准服务器功能通常所需要的其它杂项硬件114。存储器110包括操作系统116和提供服务器功能的杂项软件组件118。
应用程序120还被存储在存储器108中,并且包括收编了控制一个或多个动画功能的计算机代码的高级动画子系统122。动画功能可以是窗口、对话框等等。高级动画子系统122主要被聚焦在交互和复杂的定时结构上。如在以下讨论中将看到的,应用程序120可包括用户编写的计算机代码和与用户代码隔离的系统计算机代码,其中用户代码经由一个或多个应用程序编程接口(API)来访问系统计算机代码。
客户机104包括存储器130、处理器132、控制往来于网络106的通信的网络接口卡134、以及显示器136。客户机104还包括显示设备138以及客户机104正确运作所需的杂项硬件140。
存储器130存储被配置成提供对网络106的访问和导航的浏览器142、以及控制客户机104的基本功能的操作系统144。杂项软件组件146也被存储在存储器130中,并且包括提供必要的客户机104功能和客户机服务的软件。
显示设备138包括低级动画子系统148,它可被存储在显示设备存储器(未示出)、显示设备硬件组件(未示出)或客户机104中所包括的存储器130中。图1示出显示设备138组件中至少有一部分可驻留在客户机104的主存储器130中。低级动画子系统148主要被聚焦在达到高刷新帧速率(三十(30)帧每秒的最小刷新速率)的呈现目标上。支持高刷新帧速率提供了极好的结果,并且能取悦观众,而这正是动画系统的终极目标。
防碍支持动画的高刷新帧速率的两个障碍是(1)等待时间、以及(2)带宽。当通过网络发送数据时,可将数据的目标定为世界上的任何地方,这就可能造成很长的等待时间。等待时间的问题防碍适当的消息和反馈准时到达,并且这可能使刷新速率受损并降低用户体验。这对被配置成单个实体的动画系统而言是更大的问题,因为必须有规律地发送大量数据才能控制动画。
带宽问题对单实体系统也带来更大的问题。对于复杂的动画,为每一帧都必须跨越特定边界(线程、进程、网络)而发送巨大量的数据。即使对本文中所描述的包括两个不同动画子系统的系统而言,使用固有地限制带宽的调制解调器或是对于服务大量客户机的服务器,使用带宽也可能是一个问题。即使服务器仅需为简单的动画发送相对少量的数据,但如果必须将该数据供应给例如四百个客户机,则它就成为带宽问题。
本文中所描述的系统和方法提供一种在维持高刷新速率的同时将带宽利用最小化的有效方法。
示例性动画呈现系统体系结构
图2是根据本文中所描述的系统和方法的示例性动画呈现系统体系结构200的框图。图2所示的元素中一些是图1中也包括的元素。为参考目的,在图2中用图1中的元素所用的相同参考标号来示出两个图中均包括的元素。
示例性体系结构200包括应用程序120和显示设备138。应用程序120根据以下将更加详细讨论的通信协议216,经由通信通道204与显示设备138通信。如前文所讨论的,通信通道204穿越了边界,该边界可能是线程、进程或机器之间的边界。例如,对于机器之间的边界,通信通道204可以是如前所示的网络106。
用户代码202经由API边界206与应用程序120一起运作,API边界206是想要使用具有用户代码202的特征的应用程序128的开发者用来提供对应用程序120的访问的一组系统API。
如前文所讨论的,应用程序120包括高级动画子系统122。高级动画子系统122包括高级图形组件208、高级动画对象数据库210和高级定时引擎212。定时引擎212创建和控制存储在高级动画对象数据库210中的一个或多个高级时钟214。
高级定时引擎212负责建立和同步高级时钟214。因此,例如,如果假定有十个(10)高级时钟214要一起运行,则高级定时引擎212同步十个(10)高级时钟214以同步地显示动画。
高级图形组件208存储动画中所使用的类型的图形。高级动画对象数据库210存储与一个或多个动画相关联的动画值(和/或与一个或多个媒体相关联的媒体对象)。动画值至少包括与动画相关联的时间线(即,时钟)。(注意,如本文中所使用的术语“时钟”和“时间线”是可互换的)。动画值基于高级时钟214的值来影响动画呈现的输出。每个动画修改高级图形组件208的一个或多个方面。
例如,对于创建从点P1到点P2的线的简单动画,动画对象数据库210将为P1在时间=0处存储一值,并为P2在时间=1处存储一值。(P1和P2之间的所有点都是内插的)。
示例性动画呈现系统体系结构200的显示设备138包括图1中所示的低级动画子系统148。低级动画子系统148是高级动画子系统122的等价结构,并且包括低级图形组件218、低级动画对象数据库220和低级定时引擎222。定时引擎222创建一个或多个低级时钟224,它们被存储在低级动画对象数据库中。
低级动画子系统148的组件(218-224)类似于高级动画子系统122的组件(208-214),并且它们的功能和互操作性和前述类似。
如示例性动画呈现系统体系结构200的体系结构,即把动画系统分解成两个子系统的体系结构有几个优点。如果应用程序在交互上成本高昂并且花费大量额外开销,则动画可以继续;它不必在动画能够继续以前等待交互部分完成。在非分解的系统中,如果应用程序不向显示器提供有规律的数据更新,则显示器可能会绘制静态图像而不是运动的动画。
在系统处理信息的同时所显示的状态带状指示器表征了该问题的一个常见示例。通常,指示器按照例如指示某个处理正在进行的从左到右的方向进展。但是,有时状态指示器停止,而用户不能分辨系统是已经锁住了还是仍在处理某些事务。这就是动画器的交互部分没有及时向显示部分提供更新的数据来满足帧速率刷新的结果。
这一系统对视频来说尤其糟糕。对于视频,帧可能被丢失-从而导致假信号或伪影-这仅仅是因为系统正忙于照管另一个任务(可能和移动鼠标光标一样的不重要)。
在分解的动画系统中,低级动画子系统148与高级动画子系统122异步地运行,因此即使当高级动画子系统122被使其不能在帧被刷新以前重新绘制该帧的任务所束缚时,低级动画子系统也继续运行(即,绘制)。因此,分解的动画系统无缝地显示动画操作,并因而提供优越的用户体验。
示例性方法实现:基本操作
图3是描绘诸如图1和图2中所示的分解的动画/呈现系统的基本操作的流程图。在以下讨论中,将连续参考图1和2中所示的元素和参考标号。
在分解的动画系统(即,被分解为彼此异步运作的至少两个不同的动画子系统的动画系统)中,用户(应用程序)通过系统API告诉高级系统假定图形应如何在显示器上显现。高级系统使用专门的通信协议来指导低级系统创建与在高级系统中所建立的结构相似的结构。
因为高级系统被配置成在低级系统中创建若干元素,所以必然有以下参考图4更加详细讨论的通信协议包括若干“创建”消息或命令。图3中所示的流程图覆盖了当高级动画子系统122与低级动画子系统148通信以在其中建立结构时发生的一些基本步骤。
在框300,高级动画子系统122发送消息以在低级动画子系统148中创建动画对象220。然后高级动画子系统122与低级动画子系统148通信以创建要与刚才创建的动画对象220包括在一起的时钟224(即,时间线)(框302)。
注意,动画对象和时间线之间并非必须要有1∶1的比例。换言之,一条时间线可控制一个以上的动画对象。因此,在以上对框302所描述的步骤中,如果已经存在一条时间线且如果可将新创建的动画对象与现有的时间线相关联,则不需创建时间线。
在这个时间点上,应用程序120可创建另一个动画对象或修改现有动画。如果应用程序120被配置成创建另一个动画对象(“动画对象”分支,框304),则高级动画子系统122在框300向低级动画子系统138发送通信协议消息以创建另一个动画对象220。然后高级动画子系统122在框302发送消息以将一时间线与新创建的动画对象220相关联。该时间线可被创建或可以是现有的时间线。
应用程序120还被配置成支持修改。高级动画子系统122可发送消息以修改动画对象220和/或与其相关联的时间线(“修改”分支,框304)。除了修改动画的方面的直接修改以外,“暂停”操作和“停止”操作也可以是修改。“暂停”操作可根据典型的修改来编码,例如,“在时间0,时钟为10;并且在时间10,时钟为10。”“停止”操作是用“移除动画”消息来发起的。
如果修改是“移动动画”消息(“是”分支,框306),则在框308停止动画。否则(“否”分支,框306),高级动画系统122发送被配置成修改现有动画的一个或多个消息(框310)。修改现有动画还可意味着修改与现有动画相关联的时间线。
如前文所提及的,上述流程图描绘了通过从高级动画子系统122发送通信协议消息来配置低级动画子系统148的一般方法。以下在讨论了通信协议的细节以后,将更详细地讨论使用该通信协议的至少一个更具体方法实现。
通信协议
图4a、4b和4c是概述用于管理高级动画系统和低级动画系统之间的的传送的通信协议的消息/命令的表。在以下讨论中,将连续参考图1和图2中所示出并描述的元素和参考标号。
图4a描绘了描述从高级定时引擎212向低级定时引擎222发送的消息的表400。“创建时钟”消息402使低级定时引擎222为动画创建时钟。“创建时钟”消息402包括“创建时钟参数”404,这些参数是初始时钟属性。时钟属性可包括,但不限于,持续时间(从开始时间起)、父时钟(此时钟中的所有时间与其相关)、速度(相对于其父时钟)、加速和减速。加速和减速参数指定“持续时间”中用在“加速”或“减速”动画上的百分比。
“更新属性”消息406提供对现有时钟的属性的更新。“更新属性参数”408包括目标时钟(即,具有要被更新的属性的时钟)、以及更新后的属性和值。“添加间隔”消息410指令低级定时引擎向现有动画(对象)添加间隔,并且包括“添加间隔参数”412,它们标识目标时钟、以及被添加到目标时钟的间隔的属性。
该协议包括“重置同步滑动”消息414和相关联的“重置同步滑动参数”416,它们被用来维持高级动画子系统122和低级动画子系统148之间的同步。如何实现此部分是关乎特定系统设计的问题。
在至少一个实现中,同步过程由以下示例描述。如果低级动画子系统148正在控制视频文件,并且它检测到视频落后(由于,例如网络通信量),则低级动画子系统148向高级动画子系统122发送“与媒体滑动同步”消息和参数(见以下图4b),并存储已发生滑动这一事实以及滑动的大小。
当高级动画子系统122(具体而言,高级定时引擎212)结束更新间隔以考虑滑动时,它发送“重置同步滑动”消息414和相关联的“重置同步滑动参数”416,来告诉低级动画子系统148将滑动偏移量重置为0。
关于这一特定协议消息的其它信息请参见以下图4b。
可向低级定时引擎222发送“移除所有间隔”消息418来移除与特定时钟相关联的任何现有间隔。目标时钟在“移除所有间隔参数”420中被标识。该通信协议中还包括“删除时钟”消息422,它被发送给低级定时引擎222以移除“删除时钟参数”424中所标识的目标时钟。
图4b描绘了描述该通信协议中从低级定时引擎222发送到高级定时引擎212的消息的表430。“与媒体滑动同步”消息432为高级定时引擎212提供高级定时引擎212与媒体组件同步而应滑动特定时钟的量。***注意,这更接近正确吗?***“与媒体滑动参数同步”消息434包括目标时钟,即要滑动的时钟、以及标识滑动的大小的滑动量。
该消息将数据从低级动画子系统发回高级动画子系统122。这是必要的,因为通信通道204中存在等待时间。此情形可能发生的一种情况是在用户激活“暂停”命令的时候。因为系统彼此异步地通信,所以在高级动画子系统能赶上低级动画子系统以前,低级动画子系统可处理若干个帧。结果是,低级系统始终运行。
但这是用“与媒体滑动同步”消息432来处理的,它把与动画相关联的时钟需要“滑动”或与低级时钟224“同步”来把子系统恢复到同步的消息带给高级动画子系统122。
图4c描绘了从高级动画对象210发送到低级动画对象220的消息的表440。表440包括“创建动画”消息442,它命令低级动画子系统148创建新的动画对象。“创建动画参数”444包括标识正被动画表现的属性的类型的输出值类型、动画函数、动画函数以及控制时钟。
例如,如果旋转变换的角度被动画表现,则输出类型是“双精度浮点数”。如果线的一个端点被动画表现,则输出类型是“点”。如果矩形的颜色被动画表现,则输出类型是“颜色”。
动画函数在本领域中是公知的,并且此处可指定任何此类动画函数。简单的动画函数的示例是“从5到10”。这意味着在间隔的开始,动画函数输出值5,在结束它输出10,并且在中途动画函数输出值7.5等等。更加复杂的动画函数是“从5到6到10”。在此,动画中途的输出值是6。可通过不仅指定值列表,还指定函数应输出那些值的时间列表(之间的所有值是内插的)来使函数更加复杂。
注意,上述动画函数仅仅是示例性的,并且它们并不试图将所附权利要求书的范围限于这些动画函数。在此上下文中可使用能被视为“动画函数”的任何计算机操作。
最后,如前文所讨论的,新的动画对象的控制时钟可以是新的时钟,或者可以是可以控制或不可以控制一个或多个其它动画对象的现有时钟。
表440还包括“更新动画”消息446,它提供用于更新低级动画子系统148中的现有动画的信息。“更新动画参数”448包括目标动画(即,要被更新的动画)、以及更新属性(要被更新的属性以及属性的更新值)。
“创建动画集合”消息450标识低级动画对象[数据库]220中要被分组为集合的多个动画。“创建动画集合参数”452标识要被分组为集合的动画的初始列表。
动画集合在本领域中也是公知的。动画集合的存在允许开发者创建不能用单个线性内插表达的复杂动画行为。例如,一个动画可能将点重复地上下移动,而另一个动画可能将点移到右边。当两个动画一起运行时,该点表现为按照波型图向右。可以编辑动画集合,因此协议中存在如下所述的消息。
“将动画添加到集合中”消息454告诉低级系统把“将动画添加到集合中参数456”中所标识的动画添加到也在“将动画添加到集合中参数”456中所标识的动画集合中。类似地,“将动画从集合中移除”消息458和标识目标动画集合与要从该集合中移除的集合中的动画的“将动画从集合中移除参数”460包括在一起。
表440还包括“创建静态值”消息462。静态值是在低级动画子系统148不能支持由应用程序120所提供的动画的情形中使用的。以下参考图6更详细地描述这一情况。和“创建静态值”消息462相关联的是为所创建的静态值标识值类型和初始值的“创建静态值参数”464。
“更新静态值”消息466为静态值提供更新。“更新静态值参数”468标识目标静态值对象、以及对应于所标识的静态值的新值。
图4(a-c)中所示的消息和参数提供一种可由高级动画子系统异步地控制由低级动画子系统148呈现的动画的流线型的、高效的方法。因为无须在每个呈现刷新帧中发送一个或多个消息,所以显示可以用高的、恒定的速率来呈现帧。与此同时,高级系统可在有处理时间可用时使用处理时间来向低级系统提供数据,即,以较慢和变动的刷新速率。
示例性方法实现:完全连接的系统
图5是描绘具有完全连接的高级动画系统和低级动画系统的呈现系统中的动画过程的示例性方法实现的流程图。
图5中所描绘的情形是:应用程序开发者想要绘制从一固定锚点到另一随时间移动的点的动画表现的直线。开发者需要提供三样东西:(1)呈现操作(例如,在静态点A和动画点B之间绘制一条线);(2)动画函数(例如,点B从(0,0)走到(100,100));以及(3)动画的定时(例如,在5秒后开始,并运行10秒,然后反向重复一次)。
图5示出高级动画子系统122对包含上述信息的应用程序120的响应。在框500,高级动画子系统122从应用程序接收这些信息。在框502,高级动画子系统122创建呈现对象,该呈现对象表示一条线。在框504,高级动画子系统122创建输出从(0,0)到(100,100)的值的动画函数。在框506,高级动画子系统122创建在5秒后开始,运行10秒然后反向运行的时钟。
低级动画子系统148可支持这些对象,因此高级动画子系统120向低级动画子系统148发送在通信通道204上生成在框510-518中所描绘的通信的消息(框508)。
框510:创建时钟1;为时钟1设置参数,持续时间=10。
框512:为时钟1添加间隔;从“现在+5”到“现在+15”,从t=0走到t=10。
框514:为时钟1添加间隔:从“现在+15”到“现在+25”,从t=10向下走到t=1。
框516:创建动画1;为动画1设置参数,从(0,0)到(100,100),时钟=时钟1。
框518:创建引用动画1的[DrawLine](画线)指令。
在此例中,DrawLine函数表示用于呈现动画的协议所支持的任何绘制指令。DrawLine指令只是示例性的。
在这些消息已从高级动画子系统122发送到低级动画子系统148时,低级动画子系统148独立于高级子系统148运行,并以可能达到的最高的帧速率更新该线的位置。两个子系统122、148之间无需再发送任何其它消息。
如所示出的,本文中所介绍的通信协议通过简化被放进通信通道204中的数据量来优化通信通道204。如果不使用上述短消息和参数,则将必须通过管道发送大量操作来同步系统。
但是,本质上,被放进通信通道204中的是若干时钟的间隔的列表。对于时钟而言,间隔是定义好的,例如,如‘在时间0和时间10之间,该时钟从0走到10’(这定义了真实世界的时钟)。或者,可能需要时钟慢一倍。在此情形中,则‘在时间0和时间10之间,时钟从0走到5’。
通过定义定时间隔的列表,就可定义时钟上的每一个操作。例如,可用时钟间隔来定义暂停操作:‘在时间0,时钟是10,且在时间10,时钟是10’。因此,每个操作都可被表达为一个线性间隔。
示例性方法实现:部分连接的系统
图6是描绘具有部分连接的高级动画系统和低级动画系统的呈现系统中的动画过程的示例性方法实现的流程图。
这一示例的情形是:应用程序开发者想要绘制从固定锚点走到在自定义路径上随时间移动的另一个点的动画表现的直线。开发者需要提供以下:(1)呈现操作(例如,在静态点A和动画点B之间绘制一条线);(2)自定义动画函数(例如,调用自定义动画1来计算点B的位置);以及(3)动画的定时(例如,在5秒后开始,并运行10秒,然后反方向重复一次)。
在框600,高级动画子系统122接收应用程序信息。响应于应用程序的请求,高级动画子系统122创建表示该线的呈现对象(框602),被配置成调回用户代码202的动画函数(框604),以及在5秒后开始、运行10秒然后反方向运行的时钟(框606)。在框608,适当的消息被发送到低级动画子系统148。
因为自定义动画需要用户代码,所以它不能由低级子系统处理,因此这就在通信通道上生成了以下初始通信:
框610:创建静态点值1。
框612:创建引用点值1的[DrawLine](画线)指令。(DrawLine指令仅仅是示例性的;见上)。
在框614,低级动画子系统148接收从高级动画子系统122发送的数据。低级动画子系统148将动画视为静态线。
在数据的初始发送后的每一帧上,高级动画子系统122调用用户代码202来计算点B的位置(框620)并在框622接收新的位置值。然后高级动画子系统122通过通信通道204将以下消息发送到低级动画子系统以更新静态点值1的值:
框626:用点B的新值来更新静态点值。
示例性计算机环境
本文中所描述的各种组件和功能是用计算系统来实现的。图7示出由标号700所指的此类计算系统,即计算机的典型示例的组件。图7中所示的组件仅仅是示例,而并不试图对本发明的功能范围提出任何限制;本发明无须依赖于图7中所示的特征。
一般而言,可使用各种不同的通用或专用计算系统配置。可能适用于本发明的公知的计算系统、环境、和/或配置的示例包括,但不限于,个人计算机、服务器计算机、手持式或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子设备、网络PC、小型机、大型机、包括以上任何系统或设备的分布式计算环境、等等。
在许多情形中,计算机的功能由诸如程序模块等计算机所执行的计算机可执行指令来具体化。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。任务还可由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可位于本地和远程计算机存储介质中。
指令和/或程序模块在不同的时间存储在或是作为计算机的部件、或可由计算机读出的各种计算机可读介质中。程序通常被分布在例如软盘、CD-ROM、DVD或诸如已调制信号等某种形式的通信介质上。它们从那里被安装或加载到计算机的次级存储器中。在执行时,它们至少被部分地加载到计算机的主电子存储器中。当这些及其它各种类型的计算机可读存储介质包含用于实现以下联合微处理器或其它数据处理器描述的步骤的指令程序和/或模块时,本文中所描述的发明包括此类介质。当根据以下所描述的方法和技术来对计算机编程时,本发明还包括该计算机本身。
为说明起见,本文中将诸如操作系统等程序及其它可执行程序组件示为离散的框,尽管可认识到,此类程序和组件在各个时候驻留在计算机的不同存储组件中,并且由计算机的(一个或多个)数据处理器执行。
参考图7,计算机700的组件可包括,但不限于,处理单元702、系统存储器704、以及将包括系统存储器在内的各种系统组件耦合到处理单元702的系统总线706。系统总线706可以是数种类型的总线结构中的任何类型,包括存储器总线或存储器控制器、外围总线、以及使用各种总线体系结构中的任何体系结构的局部总线。作为示例,而非限制,此类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISAA)总线、视频电子标准协会(VESA)局部总线、以及也称为Mezzanine总线的外围部件互连(PCI)总线。
计算机700通常包括各种计算机可读介质。计算机可读介质可以是可由计算机700访问的任何可用介质,并包括易失性和非易失性、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。“计算机存储介质”包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术,CD-ROM、数字多功能盘(DVD)或其它光盘存储,磁带盒、磁带、磁盘存储或其它磁存储设备,或任何其它可被用来存储所需信息并可由计算机700访问的介质。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传递介质。术语“已调制数据信号”是指以在信号中将信息编码的方式设置或改变其一个或多个特征的信号。作为示例,而非限制,通信介质包括诸如有线网络或直接连线连接等有线介质,以及诸如声学、RF、红外及其它无线介质等无线介质。以上任何组合也应被包括在计算机可读介质的范畴之内。
系统存储器704包括诸如只读存储器(ROM)708和随机存取存储器(RAM)710等易失性和/或非易失性存储器形式的计算机存储介质。包含诸如在启动期间帮助在计算机700内诸元件之间传递信息的基本例程的基本输入/输出系统712(BIOS)通常存储在ROM 708中。RAM 710通常包含可由处理单元702立即访问和/或现在正由其操作的数据和/或程序模块。作为示例,而非限制,图7示出操作系统714、应用程序716、其它程序模块718和程序数据720。
计算机700还可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图7示出读或写不可移动、非易失性磁介质的硬盘驱动器722,读或写可移动、非易失性磁盘726的磁盘驱动器724,以及读或写诸如CD ROM或其它光介质等可移动、非易失性光盘730的光盘驱动器728。可在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,磁带盒、闪存卡、数字多功能盘、数码录像带、固态RAM、固态ROM、等等。硬盘驱动器722通常通过诸如接口732等不可移动存储器接口连接到系统总线706,而磁盘驱动器724和光盘驱动器728通常由诸如接口734等可移动存储器接口连接到系统总线706。
以上所讨论并在图7中示出的各驱动器及其相关联的计算机存储介质为计算机700提供计算机可读指令、数据结构、程序模块和其它数据的存储。在图7中,例如,硬盘驱动器722被示为存储了操作系统715、应用程序717、其它程序模块719和程序数据721。注意,这些组件可与操作系统714、应用程序716、其它程序718和程序数据720相同或不同。此处操作系统715、应用程序717、其它程序模块719和程序数据721被赋予不同的标号以说明至少它们是不同的副本。用户可通过诸如键盘736和定位设备738(通常指鼠标、轨迹球或触摸垫)等输入设备将命令和信息输入到计算机700中。其它输入设备(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这些及其它输入设备通常通过被耦合到系统总线的输入/输出(I/O)接口740连接到处理单元702,但也可由诸如并行端口、游戏端口或通用串行总线(USB)等其它接口和总线结构连接。监视器742或其它类型的显示设备也经由诸如视频适配器744等接口连接到系统总线706。除了监视器742以外,计算机还可包括其它外围输出设备(例如扬声器)以及一个或多个打印机748等,它们可通过I/O接口740连接。
计算机使用到诸如远程计算设备750等一个或多个远程计算机的逻辑连接在联网环境中操作。远程计算设备750可以是个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并通常包括以上相对于计算机700所描述的许多或全部元件。图7中所示的逻辑连接包括局域网(LAN)752和广域网(WAN)754。尽管图7中所示的WAN 754是因特网,但是WAN 754还可以包括其它网络。此类网络环境常见于办公室、企业范围的计算机网络、内联网等。
当在LAN网络环境中使用时,计算机700通过网络接口或适配器756连接到LAN 752。当在WAN网络环境中使用时,计算机700通常包括调制解调器758或其它用于通过因特网754建立通信的装置。可内置或外置的调制解调器758可经由I/O接口740或其它适当机制连接到系统总线706。在联网环境中,相对于计算机700所描述的程序模块或其部分可被存储在远程计算设备750中。作为示例,而非限制,图7示出远程应用程序760驻留在远程计算设备750上。可以认识到,所示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它装置。
结论
如所描述的系统和方法所使用的通信协议由此提供一种将高级动画系统与低级动画系统同步的方法,从而低级系统可以用快的、恒定的帧刷新速率运行,而与此同时高级系统可以用为交互优化的可变帧速率运行。无需牺牲任何交互能力就可实现优越的图形。该协议还将在两个动画系统之间发送的数据量最小化,由此节省了额外开销,并优化了性能。
尽管以上描述了特定实现和实施例的细节,但是这些细节旨在满足法定的公开义务,而不是要限制所附权利要求书的范围。因此,如所附权利要求书所定义的本发明并不局限于以上所描述的特定特征。相反,按照落入根据等效教义适当解释的所附权利要求书的适当范围的任何形式或修改来要求保护本发明。