3实现模型跟随地形的效果.docx

上传人:b****0 文档编号:259505 上传时间:2022-10-08 格式:DOCX 页数:15 大小:32.82KB
下载 相关 举报
3实现模型跟随地形的效果.docx_第1页
第1页 / 共15页
3实现模型跟随地形的效果.docx_第2页
第2页 / 共15页
3实现模型跟随地形的效果.docx_第3页
第3页 / 共15页
3实现模型跟随地形的效果.docx_第4页
第4页 / 共15页
3实现模型跟随地形的效果.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

3实现模型跟随地形的效果.docx

《3实现模型跟随地形的效果.docx》由会员分享,可在线阅读,更多相关《3实现模型跟随地形的效果.docx(15页珍藏版)》请在冰豆网上搜索。

3实现模型跟随地形的效果.docx

3实现模型跟随地形的效果

36.实现模型跟随地形的效果

这个教程是对引擎中的示例Sample03的一点解释,这个示例实现了一个坦克模型跟随地形移动的效果。

因为我要控制坦克的炮塔、炮管、轮子的ModelMesh,所以需要从ModelSceneNode类继承实现一个tankModel类,因为事先不可能知道所使用的模型的结构,所以这个类没有放在引擎中,在实际制作游戏时需要从引擎的ModelSceneNode基类派生出你所使用的模型的类,代码如下:

namespaceSample03

{

///

///坦克模型,从ModelSceneNode继承,添加了层次模型的支持

///

publicclasstankModel:

ModelSceneNode

{

#region成员变量、属性和构造函数

//需要跟随的地形

SimpleTerrainSceneNodeterrain;

//坦克各部件的Bone。

ModelBoneturretBone;

ModelBonecannonBone;

ModelBonelSteerEngineBone;

ModelBonerSteerEngineBone;

ModelBoneleftBackWheelBone;

ModelBonerightBackWheelBone;

ModelBoneleftFrontWheelBone;

ModelBonerightFrontWheelBone;

//坦克各部件Bone的转换矩阵

MatrixturretTransform;

MatrixcannonTransform;

MatrixlSteerEngineTransform;

MatrixrSteerEngineTransform;

MatrixleftBackWheelTransform;

MatrixrightBackWheelTransform;

MatrixleftFrontWheelTransform;

MatrixrightFrontWheelTransform;

//车轮自转的旋转矩阵

MatrixwheelRollMatrix;

//各部件的旋转量

floatturretRotationValue;

floatcannonRotationValue;

floatsteerRotationValue;

floatwheelRotationValue;

///

///炮管、炮塔旋转的最大角速度

///

publicconstfloatMaxCannonSpeed=1f;

///

///炮塔的旋转范围

///

privateconstfloatMaxTurretAngle=1.0f;

privateconstfloatMinTurretAngle=-1.0f;

///

///炮管的旋转范围

///

privateconstfloatMaxCannonAngle=0.0f;

privateconstfloatMinCannonAngle=-0.9f;

///

///获取或设置车轮的旋转量

///

publicfloatWheelRotationValue

{

get{returnwheelRotationValue;}

set{wheelRotationValue=value;}

}

///

///获取或设置前轮轴的旋转量

///

publicfloatSteerRotationValue

{

get{returnsteerRotationValue;}

set{steerRotationValue=value;}

}

///

///获取或设置炮塔旋转量

///

publicfloatTurretRotation

{

get{returnturretRotationValue;}

set

{

if(value>MaxTurretAngle)

turretRotationValue=MaxTurretAngle;

elseif(value

turretRotationValue=MinTurretAngle;

else

turretRotationValue=value;

}

}

///

///获取或设置炮管旋转量

///

publicfloatCannonRotation

{

get{returncannonRotationValue;}

set

{

if(value>MaxCannonAngle)

cannonRotationValue=MaxCannonAngle;

elseif(value

cannonRotationValue=MinCannonAngle;

else

cannonRotationValue=value;

}

}

///

///创建一个ModelSceneNode对象。

///

///引擎

///模型名称

publictankModel(StunXnaGEengine,ScenesetScene,stringmodelAssetName,SimpleTerrainSceneNodeterrain)

:

base(engine,setScene,modelAssetName)

{

this.terrain=terrain;

}

#endregion

///

///初始化节点。

///

publicoverridevoidInitialize()

{

base.Initialize();

//获取坦克各部件的Bone。

turretBone=model.Bones["turret_geo"];

cannonBone=model.Bones["canon_geo"];

lSteerEngineBone=model.Bones["l_steer_geo"];

rSteerEngineBone=model.Bones["r_steer_geo"];

leftBackWheelBone=model.Bones["l_back_wheel_geo"];

rightBackWheelBone=model.Bones["r_back_wheel_geo"];

leftFrontWheelBone=model.Bones["l_front_wheel_geo"];

rightFrontWheelBone=model.Bones["r_front_wheel_geo"];

//获取坦克各部件的转换矩阵

turretTransform=turretBone.Transform;

cannonTransform=cannonBone.Transform;

lSteerEngineTransform=lSteerEngineBone.Transform;

rSteerEngineTransform=rSteerEngineBone.Transform;

leftBackWheelTransform=leftBackWheelBone.Transform;

rightBackWheelTransform=rightBackWheelBone.Transform;

leftFrontWheelTransform=leftFrontWheelBone.Transform;

rightFrontWheelTransform=rightFrontWheelBone.Transform;

}

publicoverridevoidUpdate(GameTimegameTime)

{

base.Update(gameTime);

//根据旋转量重新计算变换矩阵

turretBone.Transform=Matrix.CreateRotationY(turretRotationValue)*turretTransform;

cannonBone.Transform=Matrix.CreateRotationX(cannonRotationValue)*cannonTransform;

lSteerEngineBone.Transform=Matrix.CreateRotationY(steerRotationValue)*lSteerEngineTransform;

rSteerEngineBone.Transform=Matrix.CreateRotationY(steerRotationValue)*rSteerEngineTransform;

wheelRollMatrix*=Matrix.CreateRotationX(wheelRotationValue);

leftBackWheelBone.Transform=Matrix.CreateRotationX(wheelRotationValue)*leftBackWheelTransform;

rightBackWheelBone.Transform=Matrix.CreateRotationX(wheelRotationValue)*rightBackWheelTransform;

leftFrontWheelBone.Transform=Matrix.CreateRotationX(wheelRotationValue)*leftFrontWheelTransform;

rightFrontWheelBone.Transform=Matrix.CreateRotationX(wheelRotationValue)*rightFrontWheelTransform;

}

///

///绘制坦克。

///

///

publicoverrideintDraw(GameTimegameTime,booluseReflect)

{

model.CopyAbsoluteBoneTransformsTo(modelTransforms);

retur

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1