xna中用到的一些结构和函数

2009年4月18日:

        今天开始要学习xna了,拿到了第一本关于xna的书,感觉前面还是挺简单的。现在谈谈关于前面的一些准备和一些简单的函数和结构。

        在游戏开发中对矩阵的使用是很重要的,xna也不例外,它使用的是左手坐标系。在我们游戏中,常用的旋转其实是绕着y轴旋转。在xyz的比例上缩放原先的(2,3,5)倍的话,可以写成

MATRIX S=Matrix.CreateScale(2.0f,3.0f,5.0f),

MATRIX R=Matrix.CreateRotationY(MathHelp.Pi/2.0f),表示绕着y轴旋转90度

MATRIX S=Matrix.CreateTranslation(100.0f,50.0f,30.0f),表示把模型放到空间坐标(100,50,30)。

Matrix view = Matrix.CreateLookAt(new Vector3(-5.0f, 2.0f, -10.0f), Vector3.Zero, Vector3.Up);

表示在 Vector3(-5.0f, 2.0f, -10.0f)放置一个摄像机朝着Vector3.Zero看过去,Vector3.Up表示摄像机顶着的方向。

Matrix projection = Matrix.CreatePerspectiveFieldOfView((float)Math.PI / 4.0f, 800.0f / 600.0f, 1.0f, 1000.0f); 表示把3D世界中的物体正确的显示在2D画面上,这步称为投影转换。第一参数表示眼睛的视野,第二个参数表示3D画面的宽度除以高度的比例值。第三个参数表示看到的最近距离,第四个参数表示最远的距离。

 

          3D模型都是由不同的部件组成而成的,而每个部分都是由模型网格组成的(也就是用一群三角面来评凑这个物体的外观形状)。如果要画出整个模型就要画出所有的网格模型,在每个网格模型,都可以指定一个绘画用的effect类。3D模型一般会有个根轴,当它运动时,其他部件会随着移动。

 

代码如下protected override void Draw(GameTime gameTime)
  {
  graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

  // TODO: Add your drawing code here
  Matrix world = Matrix.CreateTranslation(0.0f, 0.0f, 0.0f);//这个函数用来建立位移矩阵,把物体移动到x,y,z位置
  Matrix view = Matrix.CreateLookAt(new Vector3(-5.0f, 2.0f, -10.0f), Vector3.Zero, Vector3.Up);
  Matrix projection = Matrix.CreatePerspectiveFieldOfView((float)Math.PI / 4.0f, 800.0f / 600.0f, 1.0f, 1000.0f);
  Matrix[] transform=new Matrix[car.Bones.Count];
  car.CopyAbsoluteBoneTransformsTo(transform);
  foreach (ModelMesh mesh in car.Meshes)
  {
  foreach (BasicEffect effect in mesh.Effects)
  {
  // 設定內定的打光方法,所以螢幕才不會一片漆黑
  effect.EnableDefaultLighting();
  // 數學座標轉換運算
  effect.World = transform[mesh.ParentBone.Index] * world;
  effect.View = view;
  effect.Projection = projection;
  // 實際把賽車模型畫到正確的地方
  mesh.Draw();
  }
  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值