第10章 3D模型

  在前面的章节里你得到了工作的一个好的三角形和矩形,用到了迷人的颜色和酷的纹理。你准备出去并创作下一个伟大的游戏,当你23时赚到数百万的美元并退休,是吗?错了。不幸的是,我已得到了坏的消息:目前并没有一个3D三角形和矩形游戏的市场。你的“三角形战争”怎么和最新的射击游戏和角色扮演游戏竞争呢?唔...它不能。因此,为什么这些游戏有如此酷的图形画面而你的只是简单的三角形呢?但按在于三维模型。

使用3D模型

  通常,当画一个复杂的物体时你使用3D模型。3D模型是一组构成基本图元的点的集合。流行的建模工具有3D Studio Max,Maya,Blender,Lightwave,和Modo。Blender是一款做得很好的免费的工具。另一款免费的工具是XSI Mod Tool,它有一个XNA插件。

  XNA支持3D模型格式是.X和.FBX

添加模型到工程中

用BasicModel类绘制模型

  XNA 中Model类用ModelMesh对象表示网格,Model类在它的Meshes属性里包含一列的ModelMesh对象。

  一个网格能包含材质或颜色、纹理等等用于在那个网格里绘制。一个网格的各种不同部分不必以相同方式着色或贴纹理——你能在单个网格上有多种材质。为了储存这个数据,网格由多个部分组成。ModelMesh类在MeshParts属性中储存了一列ModelMeshParts,每一个MeshParts包含绘制MeshPart的材质还有效果对象。

  默认使,在模型的MeshPart中用的效果类是BasicEffect类型。BasicEffect派生玉Effect类,提供一种不必创建HLSL效果文件的方式来绘制3D物体。本书后面你将写你自己的效果文件。但此刻,那太高级了,因此我们局限于BasicEffect。

  最后,每个ModelMesh有一个变换,这会使网格移动到模型中的适当位置。

后面Quiz代码

1.{ 4,8,15,16,23}后的数字是42

2.飞机转向的关键代码是

Matrix eachTranslation = Matrix.Identity;
        Matrix totalTranslation = Matrix.Identity;
        Matrix rotation = Matrix.CreateRotationY(MathHelper.Pi/2);//我把模型旋转了90度,便于查看^_^

        Vector3 speed=new Vector3(0,0,-1);
        public override void Update()
        {          
            eachTranslation = Matrix.CreateTranslation(speed);
            totalTranslation *= eachTranslation;
            if (totalTranslation.M43 < -400 || totalTranslation.M43>0)          
            {
                //rotation = Matrix.CreateFromYawPitchRoll(MathHelper.Pi,0,0);
                rotation *= Matrix.CreateRotationY(MathHelper.Pi);
                speed.Z *= -1;             
            } 
           // rotation *= Matrix.CreateRotationY(MathHelper.PiOver4 / 180);    
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值