The current vertex declaration does not include all the elements required by the current vertex shad...

文章讨论了在使用XNA4.0进行3D游戏开发时遇到的一个常见问题:在加载带有贴图的mesh并调用Bump相关pass时,出现缺少切线数据导致的运行时错误。通过将Content项目中的默认设置从不生成TangentFrames更改为启用状态,成功解决了问题,并解释了这一更改对内存消耗的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xna4.0,ps2.0,PC平台使用hlsl定义结构体:

struct VS_INPUT  {     
float4 Position : POSITION0;     
float2 TexCoord : TEXCOORD0;     
float3 Normal : NORMAL0;     
float3 Tangent : TANGENT0;     
float4 BoneIndices : BLENDINDICES0;     
float4 BoneWeights : BLENDWEIGHT0;
}
载入一个简单的贴图mesh,调用Bump相关pass时,运行时在
mesh.Draw();
处跳出异常:
The current vertex declaration does not include all the elements required by the current vertex shader. Tangent0 is missing.
 

问题就在于这个切线数据Tangent丢失。

外事不决问google,找到答案

到Content项目中将默认为false的“Generate Tangent Frames”项目置为true,编译后约多出10%容量,问题解决。

貌似3.1时默认是开启的,可能因为大多数model不用到切线数据,所以4.0不再默认生成。找了一下午真够坑爹的。

各种效果:

cube2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值