.处理器102可以是中央处理单元(CPU)、图形处理单元(GPU)或能够执行模拟引擎106的其他类型的微控制器。显示器104可以是阴极射线管(CRT)显示器、液晶显示器(IXD)或能够在多维虚拟环境中对一个或多个图形对象108进行图形渲染的其他类型的设备。
[0026]参照图1B,图形对象108可被近似为复杂粒子,所述复杂粒子包括如图所示的一组简单粒子,可选地,这些简单粒子是相同的。简单粒子的相对位置可以是固定的,以保持各种形状的图形对象108的原始物理性质。例如,如果图形对象108是块状的,则简单粒子的位置根据特定形状可以是固定的。根据实现的不同,简单粒子的数量和相对位置可基于图形对象108的形状、大小或其他物理性质来确定。
[0027]图形对象108可被用于表示可变形的或不可变形的对象。即,图形对象108可以是对象的表示,该对象在与另一对象碰撞时可能出现凹痕、毁坏或损坏。在一些实施例中,图形对象可表示有弹性的对象,该弹性对象由于碰撞可能发生形变,然后变回近似原始形状。
[0028]参照图1A、1B和2,根据一个实施例,模拟引擎106可由处理器102来执行以使得在显示器104上渲染图形对象108。取决于实现方式,例如,模拟引擎106可例如从简单或复杂粒子(P200)构建出一个或多个图形对象。互相合作的粒子按需以均匀的方式对图形对象108的图形表示进行近似。同样,模拟引擎106可用于在显示器104上渲染一个或多个所构建的图形对象108(P210)。
[0029]在一个实施例中,模拟引擎106可响应于诸如碰撞之类的某些事件而周期性地或部分地重新渲染图形对象108。碰撞指的是两个图形对象之间的相互作用,该相互作用可导致至少一个图形对象的外观或运动方向发生改变。在示例性实施例中,可在基于组成图形对象的多个三维粒子的定位所定义的碰撞检测几何体的情境中,在显示器104上渲染图形对象108。此外,可利用渲染几何体来定义组成图形对象108的三维粒子的集合的三角形表面。
[0030]组成图形对象108的三维粒子可具有任何三维形状(例如,立方体、球形等)。在一个实现中,实现碰撞网格以允许模拟引擎106检测组成即将发生碰撞的图形对象的粒子之间的碰撞或潜在碰撞。碰撞网格可实现为表格、阵列、矢量或其他数据结构。如果在不同图形对象内的至少两个粒子在碰撞网格中位于彼此的预定接近距离内,则可检测到碰撞。
[0031]在一个实施例中,模拟引擎106使用碰撞网格来检测简单粒子情境中的碰撞(P220)。即,模拟引擎106可使用碰撞网格,基于粒子属性来确定至少第一对象中的第一粒子和第二对象中的第二粒子之间是否存在任何潜在碰撞,所述粒子属性定义了碰撞粒子的三个自由度。一旦检测到潜在碰撞,模拟引擎106就执行距离计算(例如,简单的欧几里德计算)以确定碰撞是否即将发生(即,实际碰撞)。
[0032]参照图3,响应于确定了潜在碰撞是实际碰撞,模拟引擎106基于与该碰撞所涉及的粒子相关联的各种因素(例如,速度、压力、摩擦等)来计算施加于这些粒子上的力。在一个实现中,模拟引擎106计算在简单粒子情境中作用在所涉及粒子上的压力或摩擦力,该简单粒子情境将在下文中详细描述(P230)。
[0033]根据一个实现,在该简单粒子情境中,通过例如忽略不适用于简单粒子的复杂粒子的空间特性(例如,旋转属性),而将图形对象中的复杂粒子视为或简化为简单粒子。由于与简单粒子相关联的属性的计算比复杂粒子的属性的计算要更为简单,当在简单粒子情境中(即,基于与三个自由度相关联的属性,而不是六个自由度)计算施加于复杂粒子的力时,可保持更有效的处理环境。
[0034]换言之,由于简单粒子具有三个自由度,因此与复杂粒子的六个自由度相比,可更有效地计算简单粒子情境中的碰撞结果。在一个实施例中,模拟引擎106也可在复杂粒子情境计算施加于碰撞对象的力(P240)。例如,可通过计算施加于复杂粒子的扭矩和线性力来执行对施加于复杂粒子的力的计算。即,与图形对象中的复杂粒子相关联的扭矩和线性力可被用于计算该图形对象的线性速度和角速度的变化。
[0035]在一个实施例中,模拟引擎106基于复杂粒子的相应线性速度和角速度(即,积分速度)的变化来计算包括有这些复杂粒子的图形对象的新的位置和方向(P250)。在一个实现中,如果复杂粒子或图形对象在运动,则模拟引擎106还可更新碰撞网格(P260)。如果复杂粒子或图形对象在网格单元之间运动,则模拟引擎106也可更新碰撞网格。
[0036]参照图4A至图4D,根据一个实施例,上述所公开的计算可按照如下文进一步详述的示例性伪代码的形式来实现。复杂粒子可具有一个或多个属性,所述属性包括但不限于:位置、速度、加速度、角位置、角速度和角加速度。可定义其他的粒子属性和参数以指示图形对象中的例如粒子数量、粒子形状(例如,球形)或半径。
[0037]例如,如图4B中所示的,简单粒子也可与位置、速度、加速度以及复杂粒子(例如,包括该简单粒子的物主(owner)粒子)相关联。例如,如图4C所示的,可使用连续循环来实现碰撞检测、力计算、粒子积分和网格更新。例如,如图4D所示的,可通过计算定义复杂粒子的简单粒子的转动惯量和加速度并更新其速度来实现对粒子的积分。
[0038]值得注意的是,在一个实施例中,上述提供的处理可由能够多任务处理的一个或多个处理器(例如,拉拉比(Larrabee)或英特尔多核处理器)来执行。在此实施例中,可与其它简单粒子无关地对一简单粒子进行碰撞分析,从而实现关于简单粒子的线程级并行性。同样,可与其他复杂粒子无关地执行对一复杂粒子的累计或积分,以实现关于复杂粒子的线程级并行性。
[0039]在一个实施例中,计算系统100可包括矢量处理器。矢量处理器涉及能够执行单指令多数据(SMD)指令的处理器。矢量处理器可以是多处理器,所述多处理器支持加载到多个矢量寄存器中的数据的并行处理。在此实施例中,模拟引擎106可与其他简单粒子无关地计算一简单粒子的力、速度或位置,以实现数据级并行性。
[0040]参照图5,矢量处理器可被用于例如在碰撞后更新粒子的速度。为了说明的目的,假设有16个粒子。在简单粒子情境中,在碰撞之前的一个或多个粒子的速度可被分别加载到矢量寄存器Ai+(l、Ai+2、...Ai+15*,并且一个或多个粒子的速度的变化可被分别加载到矢量寄存器Bi+(l、Bi+2、...Bi+15中。一旦先前的速度和速度的变化被加载,就可执行计算操作(例如,宽SIMD操作)以计算碰撞后的简单粒子的速度。例如,碰撞后的简单粒子的速度可被分别储存在矢量寄存器Si+(l、Si+2、...Si+15中。
[0041]如上所述,使用复杂粒子的图形对象模拟提供了在包括可变形对象和相撞对象的对象之间的快速物理交互,至少部分地由于应用于简单和复杂粒子的多级计算,该模拟具有较低成本和较高可扩展性。理想地,在小范围的一组图形对象上(例如,在简单粒子情境下)预先执行计算以根据碰撞网格来确定碰撞接近距离。在此计算中,以相对低计算开销来对诸个力进行计算。
[0042]例如,当两个潜在碰撞的图形对象是对称的且在碰撞网格的预定距离或预定数量的粒子内,则施加于这些图形对象的力可通过计算施加于组成对象的粒子上的力而导出。取决于实现方式,复杂粒子的积分包括单次迭代以解析碰撞。此外,除了其他力之外,对摩擦力的考虑阻止图形对象的跳动或扩展。
[0043]取决于实现方式,本发明可能采取完全硬件实施例、完全软件实施例或同时包含硬件和软件的实施例的形式。软件实施例可包括但不限于固件、驻留软件、微代码,等等。
[0044]此外,本发明可采取可从计算机可用或计算机可读介质所获得的计算机程序产品的形式,该计算机可用或计算机可读介质提供了由计算