是否可以在Xna中更改模型(.fbx)的UV(纹理坐标)。而且我知道我可以将模型分解为网格并将网格划分为meshpart,因此我也可以将meshpart分解为顶点。请解释
谢谢。
答案 0 :(得分:1)
简短回答;这是可能的。
长; 你想做什么?
只想稍微改变纹理:您可以通过编写一个着色器来完成此操作,该着色器具有您添加到现有TexCoord的float2类型的参数UVOffset。
想要完全重做:我不确定这是你想在XNA中做的事情。您可能需要考虑在三维建模软件中编辑模型。
我还是想:模型有一个名为Meshes的属性。每个ModelMesh都有一个属性MeshParts。每个MeshParts都有一个VertexBuffer。每个VertexBuffer都有一个GetData-Method。
简而言之,您可以从MeshPart的VertexBuffer中获取顶点,根据需要进行修改,然后使用VertexBuffer.SetData方法应用更改。
如果您告诉我们您要实现的目标,我们可能会提供更具体的帮助:)
编辑:
基于此线程中找到的hlsl的示例:http://xboxforums.create.msdn.com/forums/p/1407/72515.aspx
在'texture Texture;'之后插入:
float2 UVMultiplier;
替换'output.TexCoord = input.TexCoord;'用:
output.TexCoord = input.TexCoord * UVMultiplier;