sur une Mesh.Sphere je plaque une texture.

Pour cela j'utilise préalablement la méthode suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void CalculateTextureCoordinatesForThisSphereMesh(Mesh sphereMesh)
        {
            using (VertexBuffer vb = sphereMesh.VertexBuffer)
            {
                CustomVertex.PositionNormalTextured[] verts = 
                    (CustomVertex.PositionNormalTextured[])vb.Lock(0,
                            typeof(CustomVertex.PositionNormalTextured), LockFlags.None, sphereMesh.NumberVertices);
                try
                {
                    for (int i = 0; i < verts.Length; i++)
                    {
                        verts[i].Tu = Convert.ToSingle(Math.Asin(verts[i].Nx) / Math.PI + 0.5);
                        verts[i].Tv = -1 * Convert.ToSingle(Math.Asin(verts[i].Ny) / Math.PI + 0.5);
 
                    }
                }
                finally
                {
                    vb.Unlock();
                }
            }
        }

le probleme c'est que la texture est mal orientée.
Si par exemple je plaque une texture de la Terre, les pôles sont situés à l'Equateur et donc la texture est mal placée par rapport à la rotation de la sphere.



Quelqu'un a une solution ?


j'ai bien essayé de bidouiller:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
verts[i].Tu = Convert.ToSingle(Math.Asin(verts[i].Nx) / Math.PI + 0.5);
verts[i].Tv = -1 * Convert.ToSingle(Math.Asin(verts[i].Ny) / Math.PI + 0.5);
mais je ne sais pas à quoi correspondent les composants u et v d'une texture