Huh, that is very interesting. After posting, I tracked down the VertexDeclaration for the vertices, and it was
private static VertexElement[] GenerateVertexElements()
{
VertexElement[] decl = new VertexElement[]
{
// Construct new vertex declaration with tangent info
// First the normal stuff (we should already have that)
new VertexElement(0, VertexElementFormat.Vector3,
VertexElementUsage.Position, 0),
new VertexElement(0, VertexElementFormat.Vector2,
VertexElementUsage.TextureCoordinate, 0),
new VertexElement(0, VertexElementFormat.Vector3,
VertexElementUsage.Normal, 0),
// And now the tangent
new VertexElement(0, VertexElementFormat.Vector3,
VertexElementUsage.Tangent, 0),
};
return decl;
}
Notice that all of the elements have an offset of 0?
Changing this to:
private static VertexElement[] GenerateVertexElements()
{
VertexElement[] decl = new VertexElement[]
{
// Construct new vertex declaration with tangent info
// First the normal stuff (we should already have that)
new VertexElement(0, VertexElementFormat.Vector3,
VertexElementUsage.Position, 0),
new VertexElement(sizeof(float)*3, VertexElementFormat.Vector2,
VertexElementUsage.TextureCoordinate, 0),
new VertexElement(sizeof(float)*5, VertexElementFormat.Vector3,
VertexElementUsage.Normal, 0),
// And now the tangent
new VertexElement(sizeof(float)*8, VertexElementFormat.Vector3,
VertexElementUsage.Tangent, 0),
};
return decl;
}
allowed it to work. Now, I have a whole other issue, but I will hopefully track that down soon.
Why would this have worked on XNA but not MonoGame? It seems that MonoGame likely has the correct behavior, but I know that this game did indeed work on XNA.