Bonjour, je calcule les tangents de mes meshs par cette fonction (pour faire du Parallax Bump Mapping) :
private void GenerateTN()
{
VertexElement[] elements = new VertexElement[]
{
new VertexElement(0, 0, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position, 0),
new VertexElement(0, 12, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Normal, 0),
new VertexElement(0, 24, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0),
new VertexElement(0, 36, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Tangent, 0),
new VertexElement(0, 48, DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.BiNormal, 0),
VertexElement.VertexDeclarationEnd,
};
VertexDeclaration decl = new VertexDeclaration(CDXCore.D3DDevice, elements);
Mesh tempMesh = D3DMesh.Clone(MeshFlags.Managed, elements, CDXCore.D3DDevice);
D3DMesh.Dispose();
D3DMesh = tempMesh;
try
{
D3DMesh.ComputeTangentFrame(TangentOptions.GenerateInPlace);
}
catch (DirectXException ex)
{
MessageBox.Show("Can't Generate Tangents ");
}
}
Certains mesh passe sans soucis mais d'autres renvoie une erreur "InvalidDataException".
Ma procédure est-elle correcte ? Quelles sont les conditions ou les règles à observer lors de la création du mesh pour que DirectX puisse générer les tangets sans problème ?
Merci pour votre aide
Partager