salut,
voila d'abord ce que je souhaite faire :
le but est d'appliquer une texture (image chargée) sur un mesh (un perso dans mon cas, pour faire des effets d'hématomes) quand je clique sur l'endroit spécifié du mesh... pour plus de compréhension, on va la nommer TexDecal
mon idée de départ :
je fait un rendu du mesh (sans lumieres AlphaBlendEnable = false; CullMode = none dans un texture (rendutarget déclaré Color), en appliquant comme couleur, l'UV de chaque vertex via les shadders :
ensuite, je récupère la couleur dans la texture du rendutarget préalablement transformé en tableau Color, en fonction des coordonnées de la souris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part output.Color = float4(input.TexCoord.x, input.TexCoord.y, 0.0, 1);
puis j'utilise un shader HLSL pour appliquer ma texture TexDecal (déclarée CLAMP) aux coordonées dans mon pixel shader:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public virtual Vector2 GetUV(Point point) { if (point.X < 0 || point.X >= viewport.Width) return Vector2.Zero; if (point.Y < 0 || point.Y >= viewport.Height) return Vector2.Zero; Color t = rendutargetarray[point.X + point.Y * viewport.Width]; Vector4 v4 = t.ToVector4(); v4.Normalize(); Vector2 v2 = new Vector2(v4.X,v4.Y); return v2; }
sauf que bon... ça ne positionne pas ma texture la où je clique...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 float2 scaleCenter = float2(0.5f, 0.5f); float scale = 10; float2 tall = (pin.TexCoord - scaleCenter) * scale; float2 UVdecal = tall + TexCoordH1; //TexCoordH1 = le retour de GetUV(souris) float4 color = SAMPLE_TEXTURE(Texture, pin.TexCoord); // texture original color += SAMPLE_TEXTURE(TexDecal,UVdecal);
alors je me pose certaines questions :
1) la méthode est elle bonne et logique, et dans ce cas ou est l'erreur? sur la récupération de l'uv dans le tableau, ou au moment de l'appliquer dans le shader ....
2) dois je plutôt m'orienter vers les textures 3d, comme dans l'exemple http://www.humus.name/index.php?page=3D&ID=83, mais je ne sais pas si c'est bon pour mon cas, dans le cas où j'applique une rotation de l'objet...
merci pour votre aide...
Partager