xna中使用自定义的shader来绘制model

XNA中的 Model.Draw()  函数会使用导入model所使用的Content Processor指定的Effect来进行绘制,因此,如果选择的默认的Content Processor,即Model - XNA Framework,则会使用BasicEffect来进行绘制。

若想用自定义的shader绘制model,需要创建一个自定义的ContentPipeline,在ContentPipeline中指定所用的shader,然后用此ContentPipeline来作为model的Content Processor。

步骤:

1.创建一个Content Pipeline Extension Library 项目,命名为CustomContentProcessor

2.CustomContentProcessor类重写为:

 [ContentProcessor(DisplayName = "CustomEffectModelProcessor.CustomContentProcessor")]
    public class CustomContentProcessor : ModelProcessor
    {


        protected override MaterialContent ConvertMaterial(MaterialContent material, ContentProcessorContext context)
        {
            EffectMaterialContent myMaterial = new EffectMaterialContent();

            string effectPath = Path.GetFullPath("MyEffect.fx");

            myMaterial.Effect = new ExternalReference<EffectContent>(effectPath);

            return base.ConvertMaterial(myMaterial, context);

        }
    }
3. 将model 的Content Processor指定为 CustomContentProcessor

4.自己写一个 MyEffect.fx 文件

5.绘制model的代码

            foreach (ModelMesh mesh in myModel.Meshes)
            {
                foreach (Effect effect in mesh.Effects)
                {
                    effect.Parameters["View"].SetValue(view);
                    effect.Parameters["Projection"].SetValue(projection);
                    effect.Parameters["World"].SetValue(Matrix.CreateRotationY(roty));
                    effect.Parameters["ColorMap"].SetValue(bodyTex);

                }

                mesh.Draw();
            }






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值