Salut je me creuse la tête pour mon shader de splatting et j'avoue que c'est bien mal parti.
Je m'explique : Je fais un terrain auquel j'ajoute trois textures : 0 1 2, ou 0 est une texture d'herbe, 1 de terre et 2 le masque noir et blanc pour faire la transition.
Le shader marche à merveille mais le hic c'est que l'ideal serait que l'herbe et la terre soient scalés mais pas le masque (normal non?). Malheuresement je ne sais passer une texture à un shader que par l'intermédiaire d'une textureLayer sur le node et je n'arrive pas à scaler une Layer indépendamment des autres.
J'ai éssayé ceci qui ne donne aucun résultat :
terrain->getMaterial(0).getTextureMatrix(0).setTextureScale(50,50);
Quelqu'un pourait m'éclairer de ses lumières svp
Hors ligne
Bon ben j'ai trouvé par moi-même la salution : il suffit de diviser les coordonées de la texture masque par le ratio appliqué en scaletexture.
ça sera plus parlant sur du code.
Après texturage du terrain :
terrain->scaleTexture(80,80);
et voici le pixel shader :
void main ( void ) { // Texture 1 : herbe vec4 herbe = texture2D ( Texture1 , gl_TexCoord[0] ); // Texture 2 : terre pour les chemins vec4 terre = texture2D ( Texture2 , gl_TexCoord[0] ); // Texture 3 : masque en noir et blanc vec4 mask = texture2D ( Texture3 , gl_TexCoord[0]/80 ); // divise par 80 vec4 color = mix(terre, herbe, mask.r); gl_FragColor = (color); }
Me voilà donc parti sur mon terrain editing pour faire un truc bien joli
Hors ligne