#1 

19-10-2008 16:44:23

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.90.174
Courriel

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


#2 

19-10-2008 17:09:52

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.33.191.157
Courriel

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


#3 

19-10-2008 17:50:43

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.90.174
Courriel

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


#4 

19-10-2008 17:55:50

Aranoth
Membres
Avatar de Aranoth
Date d'inscription:
Messages: 242
IP: 90.60.178.238
Courriel  Site web

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

Hors ligne


#5 

19-10-2008 18:14:37

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.90.174
Courriel

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


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 18:28:17

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.90.174
Courriel

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


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


#7 

19-10-2008 18:42:42

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.33.191.157
Courriel

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.


Force et sagesse...

Hors ligne


#8 

19-10-2008 18:59:02

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.90.174
Courriel

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


#9 

20-10-2008 11:23:24

johnplayer
Membres
Avatar de johnplayer
Date d'inscription:
Messages: 431
IP: 83.192.86.152
Courriel

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


#10 

20-10-2008 11:50:21

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 81.51.25.131
Courriel

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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
117 invités en ligne
membre en ligne: -
RSS Feed