#0 

19-10-2008 18:44:23

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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 smile )


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#1 

19-10-2008 19:09:52

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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...


Force et sagesse...

Hors ligne


#2 

19-10-2008 19:50:43

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#3 

19-10-2008 19:55:50

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

Sinon il est toujours possible de jouer sur les coordonnées de texture grâce à un vertex shader

Hors ligne


#4 

19-10-2008 20:14:37

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.

Code:

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).


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#5 

19-10-2008 20:28:17

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

J'ai aussi essayé ca mais rien non plus.

Code:

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)


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#6 

19-10-2008 20:42:42

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

en fait il faut écrire plutôt un truc du genre:

Code:

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)


Force et sagesse...

Hors ligne


#7 

19-10-2008 20:59:02

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Merci beaucoup tmyke, ca fonctionne à merveille.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#8 

20-10-2008 13:23:24

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#9 

20-10-2008 13:50:21

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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.
wink


Force et sagesse...

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
32 invités en ligne
Aucun membre connecté
RSS Feed