HLSL:处理缺乏TexCoords的问题?

| 我正在编写我的前几个着色器,通常是编写一个着色器来完成功能,因为我意识到主要的XNA库不支持它们。 我遇到的麻烦是,并非我在特定场景中的所有模型都在其中包含纹理数据,而我不知道该如何处理。 XNA主要库似乎通过对BasicEffect使用包装器类来处理它,通过内容管理器加载它,并相应地有选择地启用或禁用纹理处理。 对于自定义着色器,完成此操作有多困难?我正在写的是一个通用的“色相偏移”效果,也就是说,我希望使用此技术绘制的任何内容都具有一定的纹理颜色(如果有)和顶点色相偏移。我是否需要编写单独的着色器,一个着色器带有纹理,而另一个不带纹理?如果是这样,当我遍历我的MeshParts时,有什么方法可以检测给定零件是否具有纹理坐标,以便我可以应用正确的效果?     
已邀请:
是的,您将需要单独的着色器,或者需要不同的“技术”-它仍然可以具有相同的效果并使用许多相同的代码。通过阅读源代码,您可以了解
BasicEffect
(至少是XNA 4.0之前的版本)是如何做到的。 要检测模型网格零件是否具有纹理坐标,请尝试以下操作:
// Note: this allocates an array, so do it at load-time
var elements = meshPart.VertexBuffer.VertexDeclaration.GetVertexElements();
bool result = elements.Any(e => 
        e.VertexElementUsage == VertexElementUsage.TextureCoordinate);
内容管道设置其“ 0”的方式是通过“ 3”。如果设置了
Texture
,则仅打开
BasicEffect.TextureEnabled
属性。     

要回复问题请先登录注册