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:
mais je ne sais pas à quoi correspondent les composants u et v d'une texture
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);
Partager