
游戏设计中运动力学.ppt
41页游戏设计中的运动力学问题,2010年10月,主要内容,游戏中的运动问题 一维运动 二维和三维运动 旋转运动 游戏中的牛顿法则 力 牛顿定律 游戏中的能量变换 功和动能 能量守恒 能量和碰撞 与静止物体的碰撞 动量和冲量 物体之间的碰撞 旋转距的计算,游戏中的运动问题,一维运动问题 物体运动一定会有速度,在游戏中速度采用矢量描述在一维空间里,速度用正和负来区分其运动速度的大小和方向如果物体的速度恒定,速度和位移之间的关系如下: d=v*t 其中d表示物体移动的位移,v表示物体运动的速度,t表示运动的时间如果物体原来的位置在d0的位置,则运行t时间后的位置为: dt=d0+v*t 通过上述表达式,可以计算出游戏中具有相同方向的运动物体每隔一段时间之后所在的位置,也就是每帧之后物体的位置比如在笔直的公路上运行的多辆汽车的运动情况如果物体的运动速度不是恒定的,则可采用平均速度或即时速度来表示物体的速度平均速度的计算可采用如下的公式比如在很多赛车游戏中,往往需要显示赛车当前的平均速度,则可采用上面的公式进行计算 此外,赛车当前的运动速度则可能是变化的,因此会产生加速度,加速度的变化是由于游戏操作者加大汽车油门造成的。
以赛车游戏为例,如果加大油门,汽车将不断加速,如果停止踩油门,则汽车将会减速,同样,如果踩了刹车,则汽车将会以更快的速度减速 加速度的计算可采用如下公式:,如果我们设定踩油门或者刹车的大小与加速度成正比的关系,则可计算出任一时刻汽车的加速度,当然也可计算出任一时刻汽车的速度这样可计算出每一帧物体当前的运动速度,加速度以及当前位置 一般而言,在游戏中为简化运算的复杂度,可是两帧之间的加速度恒定,这样可利用如下公式计算其位移: dx=(vi+vf)/2*dt=vi*dt+1/2*a*dt*dt 其中vi是物体在前一帧的速度,a为物体在,前一帧的加速度,dt为两帧之间的时间间隔 在很多赛车游戏中,汽车的运动并不完全是直线运动,有可能做曲线运动,如下图所示同样可采用如下的公式计算其平均速度:,其中f(t)表示曲线的方程,a,b表示两个不同的时刻,在游戏中可用于表示相邻两帧所在的时刻 可用下面的公式计算汽车在某一时刻的速度:,其中a为某一帧所处的时刻,h为变量同样也可采用下面的表达式求解其当前速度同样在知道速度的情况下,也可求解其平均加速度和某一时刻的加速度在赛车游戏中,我们往往知道加速度,这就需要反过来求速度和位置。
二维和三维空间运动 二维和三维空间运动与一维直线或曲线运动不同的是在原来标量的基础上增加了方向,因此变成了矢量则包括速度,位置,加速度等 如下图所示的二维空间运动显然上图中∆r=rf-ri 其平均速度的计算可采用下面的公式:,其它的计算方法完全一样,需要注意的是表达式中除t之外均为矢量比如在3D空间中,已知当前物体的速度为[0,0,0],加速度为[3,0,2],则经过5秒之后,物体的位移为[37.5,0,-25],如果已知物体原来的位置,则可得到物体当前的位置旋转运动 在一些游戏中,物体可能做旋转运动,如下图所示物体绕某一点做旋转运动时,同样也需要一些参数来度量角位移q可用下面的公式来表示: ∆q= ∆ s/r 其中s表示移动的幅度,r表示旋转的半径这样就可以定义其平均角速度: ω=∆q/ ∆t=(qf-qi)/(tf-ti) 同样可通过下面的表达式求出其角加速度:,同样角速度和线速度之间的关系如下所示: ω=vt/r vt= ω*r 其中v为线速度,r为旋转半径 利用ω和vt的变化也可求出其角加速度和线加速度在幸运之轮(Wheel of fortune)游戏中需要根据角速度计算其角位移,并判断击中的位置。
力 游戏中的物体为什么会运动,是什么导致其运动?当然是力的作用既然涉及到力的作用,就离不开牛顿力学 物体重量的计算: w=mg 其中w为物体的重量,m为物体的质量,g为重力加速度在地球上g=9.8m/s2,不同的地方其重力加速度不同游戏中的牛顿力学,物体在运动过程中会受到地面的摩擦力,不同的地面其摩擦力不同摩擦力的计算方法如下: Fs=-msN 其中ms为摩擦系数,N为与作用面垂直方向上的力静态摩擦力的方向总是和运动方向相反 上述公式对于游戏中的某些场景的模拟具有很重要的意义比如我们要模拟一个在斜坡上的轮子的运动牛顿三大定律 1. 没有力的作用物体的运动速度不会改变 比如在Air Hockey游戏中如果假定桌面是光滑的,那么在一方击打球之后,该球的速度为[10,5], 如果没有对手击打该球,2秒钟后其速度为多少2. F=ma,该定律揭示了力和加速度之间的关系通过前面的计算方法可以求出其速度,位置等需要指出的是这儿的所有变量均可以是矢量,比如说在2D 空间中F=[Fx,Fy], 同样加速度a=[ax,ay],如果物体在平面上运动,则m相同 3. 作用力和反作用力相同也就是一个物体作用在另一个物体上的力的大小和另一个物体中用到该物体的力的大小相同。
这在一些碰撞类游戏中可用于计算碰撞后物体的速度能量守恒,功和动能 功的定义为: W=F* ∆x 其中W为物体移动所作的功,F为物体所受到的力,∆x为物体在力方向上移动的距离 需要注意的是上述公式中的每一个参数均为矢量 例如在某游戏中某个物体在某X-Y平面上自由移动,对物体的作用力为2000@60o,物体,的运动距离为3m@30o,请问物体做了多少的功? 动能的计算公式为:KE =1/2*m*V2 其中m为物体的质量,V为物体运动的速度 同样上面的计算也是基于矢量的关系 功和动能之间的关系: W=∆E=KEf-KEi 在棒球游戏中,投手需要用力将球投出,如果棒球的质量确定,投手投掷某物体所需的力及移动的距离已知,则可计算出该棒球手投掷棒球的初始速度重力势能的计算公式: PE=mg△h 其中m为物体的质量,g为重力加速度, △h 为物体的相对高度 机械能守恒 机械能包括物体的动能和势能物体在运动过程中不考虑其他因素对物体运动的影响,则机械能守恒 KEi+PEi=KEf+PEf 前者是物体在i位置的机械能,后者是物体在f位置的机械能如果考虑物体运动过程中能量的损耗或者其他物体对该物体所做的功,则可对上述能量守恒定律进行修改: KEi+PEi=KEf+PEf+E0 E0就是作用在本物体上的能量的大小。
通过上述修正公式后,物体的运动更加接近真实能量与碰撞,与静止物体的碰撞 入射角与反射角相同如果如何速度vi=[vix,viy],且碰撞面处于垂直状态,则Vf=[-vix,viy],如果碰撞面处于水平状态,则Vf=[vix,-viy] 当然如果碰撞面存在夹角的情况下,可采用矢量计算的方法求出Vf的大小: Vf=Vi+2*P 如果碰撞面的斜率K=Dy/Dx,则P的斜率为-1/K=-Dx/Dy,用矢量可表示为N=[Dy,-Dx],其方向矢量N’为N归一化后的矢量 P=(-Vi.N’)*N’ 其中(-Vi.N’)为Vi在N‘轴上的投影通过上面的表达式可以计算出与任意碰撞面发生碰撞后物体的速度 同样可以计算出在三维空间下物体发生弹性碰撞后的速度的变化 例如在某3D游戏中,如果某球以失量速度[100,-50,-50]与某空间面碰撞,该碰撞面由矢量【200,250,-300】和【50,200,-25】构成,请问碰撞后的速度矢量 可采用如下的方法求解: N=[200,250,-300]*[50,200,-25],=[53750,-10000,27500] 归一化以后的法向矢量为: N‘=[0.8783,-0.1634,0.4494] P=(Vi.N’)*N’ =[-64.5814,12.0148,-33.0444] 这样可计算出Vf=Vi+2*P=[-29.1628,-25.9704,-116.0888] 动量和冲量的计算及应用 动量的计算公式:P=mv 其中m为物体的质量,V为物体的运动速度。
冲量的计算公式:IP=Ft 其中F为力,t为力的作用时间,一般而言t的作用时间很短 动量和冲量之间有如下的关系: Ft=⊿P=m(Vf-Vi) 物体的碰撞 物体碰撞时一个物体对另一个物体的作用力和另一个物体对该物体的作用力相同,方向相反,作用时间也相同,也就是冲量相同,但方向相反,因此有如下的表达式成立 ⊿P1 =⊿P2,m1v1i+m2v2i=m1v1f+m2v2f 需要注意的是上述变量均为可矢量计算 同时考虑的计算公式和能量守恒公式可计算出物体碰撞后的速度 在大量的游戏中会利用到上面的物理学知识旋转距,切向加速度的计算 物体在旋转过程中,除了角加速度外还有切向加速度其计算方法如下: at=ar*r 其中ar为角速度,r为旋转半径 转矩 物体旋转过程中所受到的转矩的大小为: t=Ft.r=mat.r=marr.r=mar r2,其中ar 为物体旋转的角速度,r为物体旋转地半径而其中mr2为物体的惯量,因此上述表达式也可表示为: t=l*ar (类似于F=ma) 其中l为物体的惯量,ar为物体的角速度 物体旋转动能为: KER=1/2*l*ω2 旋转地物体即会做线性运动,也会做旋转运动,在势能上也可能发生变换,因此对应的能量守恒定律如下:,其中: PE表示物体的势能。
KET表示物体线性运动所产生的线动能,KER表示物体做旋转运动产生的的旋转动能 例如:在某游戏中,一个球从山顶滚动到了山脚已知球的质量为0.5Kg,球的起始速度为零,山顶的高度为10m,求物体到达山脚的线速度为多少? 角冲量可采用如下的公式计算: L=l*w,其中l为物体的惯性,w为物体的角速度 通过上面一系列的公式可以计算出物体在旋转情况下的速度,加速度以及位置等信息。












