本发明涉及图像显示技术领域,具体是一种虚拟行驶车辆模型及车辆模型运动过程的图像显示方法。
背景技术:
随着图形渲染技术和游戏引擎技术的进步,使我们能在屏幕上绘制出越来越接近真实的世界的画面的同时,物理模拟仿真技术,也被更多的应用在虚拟世界对象之间的交互与物理互动的仿真上。游戏中通常采用物理引擎对虚拟世界中对象的物理表现进行模拟与仿真。而对真实车辆载具的模拟与仿真,在以现代及科幻为故事背景的游戏中得到了广泛的应用,并极大的丰富了游戏玩法。
车辆的物理模拟,包括对车辆整体的的重力/重心/速度/姿态的模拟,以及对车轮相对车身的位置变化,车轮的旋转及转向,车轮与路面摩擦力大小的模拟。而在真实世界中的车辆,位于车轮与车身之间的是车辆的悬挂系统,链接轮胎并支持整个车身。因此对车轮相对车身的位置变化的模拟,可被描述为对车辆悬挂系统运动的模拟。同时,由于物理引擎中对每个车轮是单独进行模拟的(如physx物理引擎,查看源码可证明此结论),单个车轮与车轮之间的相对位置不存在相互的限制与约束,仅限于车轮与车身的相对位置变化,而缺少对独立悬挂系统内部机械结构变化的视觉上的表现,与实际不符,存在画面失真。
技术实现要素:
本发明所要解决的技术问题在于克服现有技术的不足,而提供一种画面逼真的用于图像再现的车辆模型及车辆模型图像显示方法。
一种基于图像显示的车辆模型,其特征在于,包括:
车身模型,输出车身参数;
车轮模型,输出车轮参数;
以及悬架模型,该悬架模型由与车轮衔接的第一装置、与车身衔接的第二装置以及衔接第一装置和第二装置的第三装置组成;
所述第一装置根据所述车轮模型输出的车轮参数输出第一装置参数;所述第二装置根据所述车身模型输出的车身参数输出第二装置参数;所述第三装置根据所述第一装置参数和第二装置参数输出第三装置参数。
所述车轮参数包括位置参数以及转向参数,所述第一装置参数包括与所述车轮参数相对位置不变的位置参数;所述车身参数包括车身位置,所述第二装置参数包括与所述车身参数相对位置不变的位置参数;所述第三装置参数为:
mk=mk’*mq*ma
式中,ma为车身a当前帧的世界空间矩阵;mk为第三装置的当前帧的世界空间矩阵;mk’为第三装置初始转换到车辆模型空间的矩阵;mq为第三装置当前帧的旋转矩阵;
其中mk’/mq的求解步骤如下:
车辆模型v,包括车身a、车轮b、第一装置j、第二装置l以及第三装置k,其中第一装置j链接在车轮b上,第二装置l链接在车身a上,第三装置k链接在第一装置j和第二装置l之间;车辆v/车身a/车轮b/装置jlk,在世界空间中,都会有初始的位置,用矩阵表示为:mv,ma,mb,mj,mlmk,每个矩阵都可通过矩阵的逆运算,获得相应的逆矩阵:mv-1,ma-1,mb-1,mj-1,ml-1,mk-1;
步骤1:
将装置k,通过逆矩阵mv-1,转换到车辆v模型空间中,获得矩阵mk’:
mk’=mk*mv-1
将装置j,通过逆矩阵mb-1,转换到车轮b的模型空间中,获得矩阵mj’:
mj’=mj*mb-1
将装置l,通过逆矩阵ma-1,转换到车身a的模型空间中,获得矩阵ml’:
ml’=ml*ma-1
步骤2:
取第三装置k上的,最接近第二装置l的世界空间位置,作为参考点k1;取最接近第一装置j的世界空间位置,作为参考点k2;
将参考点k1,通过逆矩阵ml-1,转换到装置l的模型空间中,获得参考点l:
l=k1*ml-1
将参考点k2,通过逆矩阵mj-1,转换到装置j的模型空间中,获得参考点j:
j=k2*mj-1
将参考点k1,通过逆矩阵mv-1,转换到车辆v的模型空间中,获得参考点b1:
b1=k1*mv-1
将参考点k2,通过逆矩阵mv-1,转换到车辆v的模型空间中,获得参考点b2:
b2=k2*mv-1
步骤3:
随着车辆的运行,通过物理引擎,可获得新的车身a在车辆v模型空间中的矩阵ma’,及车轮b在车辆v模型空间中的矩阵mb’;
将矩阵mj’,通过矩阵mb’,转换到车辆v的模型空间中,获得装置j在车辆v模型空间中的矩阵mj”:
mj”=mj’*mb’
将矩阵ml’,通过矩阵ma’,转换到车辆v的模型空间中,获得装置j在车辆v模型空间中的矩阵ml”:
ml”=ml’*ma’
将参考点l,通过矩阵ml”,转换到车辆v的模型空间中,获得参考点b1’:
b1’=l*ml”
将参考点j,通过矩阵mj”,转换到车辆v的模型空间中,获得参考点b2’:
b2’=j*mj”
步骤4:
通过车辆v模型空间中参考点b1,b2,获得车辆初始创建时,从车身指向车轮方向的向量v1:
v1=b1-b2
通过车辆v模型空间中参考点b1’,b2’,获得车辆运行的某一帧,从车身指向车轮方向的向量v2:
v2=b1’-b2’
通过向量v1和v2的叉积运算,获得垂直于两向量的旋转轴axis:
通过向量v1和v2的点积运算以及向量点积公式,获得两向量之间夹角的弧度值
v1·v2=|v1||v2|cosθ
angle=arccos(v1·v2)
通过旋转轴axis及旋转弧度angle,获得旋转四元数q,设这个转换操作为quat(axis,angle)
q=quat(axis,angle)
由于四元数与矩阵之间可以互相转换,设转换操作为quattomatrix(quat)
与现有技术相比,本发明对车辆模型进行了优化设计,将悬挂模型设计成三个装置,三个装置中的中的第三装置随车身及车轮的变化而变化,使游戏中车辆的悬挂模拟更加逼真,增强游戏中载具在不同地形上行驶时的表现能力,增强用户体验及带入感。
附图说明
图1是本发明图像显示方法的流程图。
图2是本发明车辆模型的原理图;
图3是本发明车辆模型运行状态示意图;
图4是图3的简易分析图;
图5是本发明悬吊系统运行示意图。
图6为4轮小车模型简图。
具体实施方式
下面结合附图,对本发明作详细说明:
如图6所示,本发明车辆模型为四轮小车v,包括一个车身a、4个车轮b1~b4、车身a与车轮b1~b4之间的独立悬吊系统s,包括s1~s4。
独立悬吊系统s1~s4,分别是小车v的一个子集,包含有独立悬吊系统内的各种机械部件。
独立悬吊系统s中包含了三种装置分别用j/k/l表示,参见图2-图5,j/k/l的功能定义如下:
第一装置j:链接在车轮b上,不会随车轮转动而转动,相对位置始终与车轮b保持不变。
第二装置l:链接并固定在车身a上,相对位置和角度始终与车身a保持不变。
第三装置k:链接于装置l与装置j之间,位置和姿态随装置l和装置j相对位置改变而改变。
在本实施例中,用s代表一个单独的独立悬吊系统,用b代表独立悬吊系统s一侧的车轮,并取车身a以及独立悬吊系统s中的装置j/l/k进行描述。
本实施例中所提到的,模型坐标系:也称为“模型空间”或者“对象空间”,这个坐标系对应某个局部模型并且仅用于该模型。模型的顶点数据一般保存在该坐标系内。
本实施例中所提到的,世界坐标系:也称为“世界空间”,是一种全局坐标系,它将所有的对象空间联系到一起。模型的绝对位置一般保存在该坐标系内。
本发明中描述的矩阵是4x4的方阵。矩阵可表示3种参数,位置、旋转和缩放。世界空间矩阵m[4][4],它的m41、m42、m43、m44组成的向量v=(m41,m42,m43,m44),代表的就是物体在世界空间中的位置。m[4][4]坐上角的3x3方阵,包含物体在世界空间中的旋转与缩放参数。
本发明中描述的矩阵变换,通过矩阵乘法实现。
本发明中描述的第三装置k模型,在美术制作时有特殊要求,要求第三装置k的模型坐标系原点,位于第三装置k与第二装置l相互链接的位置上。
本发明车辆模型悬吊系统的模拟方法具体如下,包括:
步骤1:获取车辆v,包括车身a、车轮b、第一装置j、第二装置l以及第三装置k的初始世界空间矩阵,分别用mv,ma,mb,mj,mlmk表示,通过矩阵的逆运算可获得相应矩阵的逆矩阵:mv-1,ma-1,mb-1,mj-1,ml-1,mk-1
步骤2:通过车辆v世界空间矩阵的逆矩阵mv-1,将第三装置k从世界空间转换到车辆v的模型空间中,获得第三装置k在车辆v模型空间中的矩阵mk’:
mk’=mk*mv-1
步骤3:通过车轮b世界空间逆矩阵mb-1,将第一装置j从世界空间转换到车轮b的模型空间中,获得第一装置j在车轮b模型空间中的矩阵mj’:
mj’=mj*mb-1
步骤4:通过车身a世界空间逆矩阵ma-1,将第二装置l从世界空间转换到车身a的模型空间中,获得第二装置l在车身a模型空间中的矩阵ml’:
ml’=ml*ma-1
步骤4:在第三装置k的上分别取,最接近第二装置l的世界空间位置k1,最接近第一装置j的世界位置k2;
步骤5:通过第二装置l的世界空间逆矩阵ml-1,将世界空间位置的参考点k1,转换到装置l的模型空间中,获得k1在装置l模型空间中的参考点位置l。
l=k1*ml-1
步骤6:通过第一装置j的世界空间逆矩阵mj-1,将世界空间位置的参考点k2,转换到装置j的模型空间中,获得k2在装置j模型空间中的参考点位置j。
j=k2*mj-1
步骤7:通过车辆v的世界空间逆矩阵mv-1,将世界空间位置的参考点k1和k2,转换到车辆v的模型空间中,获得k1和k2在车辆v模型空间中的参考点位置b1和b2。
b1=k1*mv-1
b2=k2*mv-1
步骤8:随着车辆v的运行,通过物理引擎,可获新的一帧,车辆v的世界空间矩阵mv,车身a在车辆v模型空间中的矩阵ma’,车轮b在车辆v模型空间中的矩阵mb’。
步骤9:将第一装置j在车轮b模型空间中的矩阵mj’,通过矩阵mb’,将装置j从车轮b的模型空间中,转换到车辆v的模型空间中,获得装置j在车辆v模型空间中的矩阵mj”。
mj”=mj’*mb’
步骤10:将第二装置l在车身a模型空间中的矩阵ml’,通过矩阵ma’,将装置l从车身a的模型空间中,转换到车辆v的模型空间中,获得装置l在车辆v模型空间中的矩阵ml”。
ml”=ml’*mb’
步骤11:将第一装置l模型空间内参考点位置l,通过装置l在车辆v模型空间中的矩阵ml”,转换到车辆v的模型空间中,获得车辆v模型空间中参考点b1’。
b1’=l*ml”
步骤12:将第一装置j模型空间内参考点位置j,通过装置j在车辆v模型空间中的矩阵mj”,转换到车辆v的模型空间中,获得车辆v模型空间中参考点b2’。
b2’=j*mj”
步骤13:通过车辆v模型空间中的参考点b1和b2,获得车辆初始创建时,从车身a指向车轮b方向的向量v1:
v1=b1-b2
步骤14:通过车辆v模型空间中的参考点b1’和b2’,获得车辆v新的一帧,从车身a指向车轮b方向的向量v2:
v2=b1’-b2’
步骤15:通过向量叉积计算公式:
可获得垂直于向量v1和v2,的两向量旋转轴axis:
步骤16:通过向量点积计算向量夹角公式:
a·b=||a||||b||cosθ
θ=arccos(a·b)
可获得向量v1和v2,夹角的弧度值angle:
angle=arccos(v1·v2)
步骤17:设向量v1与v2之间,旋转四元数为q=[x,y,z,w],其中w为实部。根据四元数的基本数学方程:
q=cos(θ/2)+i(x*sin(θ/2))+j(y*sin(θ/2))+k(z*sin((θ/2)))
其中θ为旋转弧度,(x,y,z)为旋转轴。
旋转四元数q可通过旋转轴axis和旋转弧度angle表示为:
q.x=axis.x*sin(angle/2)
q.y=axis.y*sin(angle/2)
q.z=axis.z*sin(angle/2)
q.w=cos(angle/2)
设通过旋转轴和旋转弧度获得旋转四元数的操作为quat(axis,angle),则:
q=quat(axis,angle)
步骤18.四元数和矩阵之间可以互相转换,根据推倒出的式子:
其中r为旋转矩阵,四元数=[vx,vy,vz,w]
设这种转换操作为quattomatrix(quat),设转换后的旋转矩阵为mq,则mq:
步骤20.计算第一装置j,当前帧世界空间矩阵mj
mj=mj’*mb’*mv
其中mj’为装置j在车轮b模型空间中矩阵。mb’为当前帧,车轮b在车辆v模型空间中的矩阵。mv为车辆v当前真世界空间矩阵。
步骤21.计算第二装置l,当前帧世界空间矩阵ml:
ml=ml’*ma’*mv
其中ml’为装置l在车身a模型空间中矩阵。ma’为当前帧,车身a在车辆v模型空间中的矩阵。mv为车辆v当前真世界空间矩阵。
步骤22.计算第三装置k,当前帧世界空间矩阵mk:
mk=mk’*mq*mv
其中mk’为装置k在车辆v模型中间中矩阵。mq为步骤18中,计算得到的装置k在车辆v模型空间中的旋转矩阵。mv为车辆v当前真世界空间矩阵。
步骤33.将mj/ml/mk,分别传入装置j/l/k模型绘制的顶点着色器(vertexshader),即可看到悬吊系统s内,装置j/l/k的变化。