Bonjour,
J'aimerais savoir s'il était possible de "bouger" une texture sur un mesh afin de donner un effet dynamique.
Ma première application serait de réaliser un champ de force (transparence + mouvement de texture + non réactif à la lumière).
Le seul point sur lequel je bloque est le mouvement de la texture. Y a t'il une fonction dans irrlicht qui permette de le faire ou doit-on faire la fonction soit même ? Dans ce dernier cas, avec quelles fonctions ?
Merci d'avance pour vos réponses ! (des bouts de codes seraient les bienvenus... si posssible )
Hors ligne
Je ne suis pas un pro du domaine, mais il existe des fonctions tel que
SMaterial->setTextureMatrix() par exemple, une fonction aussi comme buildTextureTransform() devrait
aussi t'aider, dans le descriptif est dans la doc. J'avoue ne pas avoir d'exemple sous la main par contre, si tu galères
vraiment, je verais pour voir si j'ai le temps de pondre un truc...
Hors ligne
J'avais vu setTextureMatrix() mais je ne vois pas comment l'utiliser.
Je sait récupérer le material d'un node et buildTextureTransforme() pourrait être la solution pour gérer la matrice de la texture plus facilement.
Je vais plancher dessus et on verra. Sinon si quelqu'un d'autres à une idée je suis preneur!
Merci tmyke.
Hors ligne
Sinon il est toujours possible de jouer sur les coordonnées de texture grâce à un vertex shader
Hors ligne
J'ai essayé ca mais ca n'a pas l'air de fonctionner. map01 est le mesh dont je veux translater la texture. J'ai placer le code dans la boucle de rendu pour voir mais ca ne fait rien.
matrix4 mat01 = map01->getMaterial(0).getTextureMatrix(0); mat01.setTranslation(vector3df(1.0f,1.0f,1.0f)); map01->getMaterial(0).setTextureMatrix(0, mat01);
Je ne vois pas ce qui bloque! Si quelqu'un voit une erreur, je suis preneur de remarque (j'entends par là des remarques constructives bien sûr).
Hors ligne
J'ai aussi essayé ca mais rien non plus.
matrix4 mat01 = map01->getMaterial(0).getTextureMatrix(0); mat01.buildTextureTransform(0.0f, vector2df(0,0),vector2df(10,0),vector2df(1,1)); map01->getMaterial(0).setTextureMatrix(0, mat01);
Dernière modification par johnplayer (19-10-2008 20:39:05)
Hors ligne
en fait il faut écrire plutôt un truc du genre:
float transx=0.0f ... (puis dans ta boucle) matrix4 mat01 = map01->getMaterial(0).getTextureMatrix(0); mat01.setTextureTranslate(transx, 0); map01->getMaterial(0).setTextureMatrix(0, mat01); transx += 0.01f;
et là cela fonctionne.
Dernière modification par tmyke (19-10-2008 20:44:56)
Hors ligne
Merci beaucoup tmyke, ca fonctionne à merveille.
Hors ligne
Sinon pour l'animation image par image il y a ca (dans la doc irrlicht ISceneManager) :
ISceneNodeAnimator * createTextureAnimator (const core::array< video::ITexture * > &textures, s32 timePerFrame, bool loop=true)=0
Creates a texture animator, which switches the textures of the target scene node based on a list of textures.
Hors ligne
En effet c'est une autre méthode pour animer les texture, mais cette fois façon 'dessin animé', toujours très intéressant pour réaliser
certains type d'effets sur les mesh.
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 35 invités en ligne Aucun membre connecté RSS Feed |