解决:XNA 程序调试报错 NullReferenceException was unhandled

NullReferenceException was unhandled

3D Graphics with xna Game studio 4.0
06 Skinned Model
学习笔记


经代码跟踪发现产生该问题的原因为程序在加载三维模型后 model.Tag=null;引起下面这句编译不能通过。
即下面的这句:
Model manModel = Content.Load<Model>("dude");
            skinnedModel = new SkinnedModel(manModel,
            Vector3.Zero, new Vector3(0, MathHelper.Pi, 0), new Vector3(10),
            GraphicsDevice, Content);

出错的地方:
this.skinningData = model.Tag as SkinningData;

 

 

分析为模型加载没有得到model.Tag值,怀疑为模型加载错误引起。

经过对比,发现本程序中生成的dude.xnb(在"bin\x86\Debug\Content"文件夹中)比示例程序生成的少。
后将示例程序中的dude.xnb文件复制到本程序中后,即可正常运行。


究其原因,是dude.fbx 属性中的 素材处理器类 (content processor class)没有选择自定义专用的处理类,而是选用系统默认的素材处理类,如下图所示。

 

 

 

素材处理器类(content processor class)相关介绍:
http://shiba.hpe.sh.cn/jiaoyanzu/wuli/showArticle.aspx?articleId=363&classId=4
注意本例中的应选自定义的SkinnedModelProcessor类,用于将自定义的一些动画数据存储在
model.Tag中,否则如果选择默认或别的素材处理类,将会出现 model.Tag=null;因为选择默认的
素材处理器类他没有进行这样的处理。


参考:

   XNA的Model类有一个Tag属性可以将自定义的数据添加到模型中。使用dictionary作为Tag属性

,你可以将不同的自定义对象添加到Model类中,并可以实时通过使用string查询到这些对象。

    注意你设置在ModelContent对象Tag属性中的数据会一起存储在二进制的XNB文件中,当使用

content manager载入模型时这些数据会重新还原。

--

 

 

posted on 2011-10-10 14:57 DotNet编程 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/furenjun/archive/2011/10/10/xnaShinnedModel.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值