Pages: 1
Bonjour a tous,
J'explique mon problème : j'ai une scène ou je désire modifier à l'exécution (en fonction d'événements clavier) la texture de ISceneNodes.
L'idée est de leur appliquer une texture de couleur différente pour indiquer si ils sont sélectionné par l'utilisateur ou pas (ça ça n'est pas très compliqué)
Lors du rendu, le changement dynamique de texture est réalisé très aléatoirement, certains mesh prennent en compte ce changement et d'autres pas. Cependant, avec quelques mouvements de caméra on arrive à voir mes mesh qui se mettent à "clignoter" en switchant d'une texture à l'autre très rapidement. Donc, on se rend bien compte que les textures ont été appliquées. Ce que j'ai pu en plus vérifier avec un petit debug du type :
printf("Texture braunchLeft 0 : %s\n", monIsceneNode->getMaterial(0).getTexture(0)->getName());
Donc je ne comprend pas pourquoi ce changement n'est pas prit en compte.
Petite remarque : Cela marchait très bien avant, jusqu'à il y a quelque temps. :p
J'ai ajouté des animations (pas des animation irrlicht de base, des animations faites maison) sur ces ISceneNodes, et je soupçonne que c'est depuis cela que ça ne fonctionne plus. Mais je n'ai aucune idée de comment résoudre le problème. J'ai parcourus beaucoup de forum et aucune solution.
Je ne suis pas un expert Irrlicht et encore moins un expert 3D. Une idée pour forcer ou rafraichir l'affichage de mes textures ?
Ça vient des animations ? du mesh ? du rendu ? d'un rafraichissement que je ne fais pas ?
Je ne sais pas vraiment.
Merci par avance, d'essayer de m'apporter un peu d'aide
Hors ligne
Essaye de modifié la ligne 112 ça doit être elle qui pose problème
[Dsl pour les modos]
Le Code Bordel!!!
Et un peu plus qu'une ligne si tu veux qu'on t'aide
Hors ligne
wizad :
[Dsl pour les modos]
Le Code Bordel!!!
Et un peu plus qu'une ligne si tu veux qu'on t'aide
Tu as raison, j'aurais du fournir le code. Autant pour moi, mais ça n'est pas la peine d'être agressif.
Bref en farfouillant et en faisant varier mes Materials, j'ai résolu mon problème.
Le problème reste encore totalement obscur pour moi, mais j'en explique ma compréhension :
//creation d'un AnimatedMeshSceneNode a partir d'un mesh (non animé) créé sous blender IAnimatedMeshSceneNode *braunchNode = this->sceneManager->addAnimatedMeshSceneNode(this->braunch3DModel,parent,-1, braunchNodePosition, core::vector3df(0.,0.,0.), core::vector3df(1.,1.,1.),false); //chargement de la texture initiale ITexture* braunchTexture = this->videoManager->getTexture(resources::braunchTexture); if(!braunchTexture) { new Exception("Failed to load the \"braunch texture\". Please verify the path"); } braunchNode->setMaterialTexture(0,this->braunchTextureModel); braunchNode->setMaterialType(EMT_SOLID); ...
Premièrement il semblerait que si on créé un MeshSceneNode au lieu d'un IAnimatedMeshSceneNode on ne puisse pas changer de texture dynamiquement (j'ai dit "IL SEMBLERAIT", mais si ca peut se confirmer, c'est bon a savoir)
Je charge mes textures qui viennent se "plaquer" à l'exécution de la sorte (rien de bien sorcier) :
A l'exécution, je switche d'une texture à l'autre en fonction de divers évènements. Pour changer de texture voici ce que je fais :
... braunchNode->setMaterialTexture(0, this->braunchTexture); this->nodes[fatherNodeId]->braunchRightRepresentation->setMaterialTexture(0, this->braunchTexture); ...
Deuxièmement j'utilisais un Material de type EMT_TRANSPARENT_ALPHA_CHANNEL et ca ne fonctionné pas. Maintenant j'utilise un Material EMT_SOLID et tout va bien. Mais c'est quand même super contraignant.
Et enfin (le plus agaçant je pense), cette combinaison ne permet de faire du changement de texture à l'exécution uniquement avec le driver OPENGL et pas avec DIRECT3D9.
Je me pose la question de savoir si tout ca ne vient pas de mon mesh en fait. Je reste sans réponse.
Hors ligne
Les lignes que j'ai fourni sont réparties en plusieurs classes et factorys car ma scène est générée a partir d'une description XML.
Donc ça risque d'être un peu difficile de fournir 35 classes sur le forum.
Hors ligne
@Sakamakak : j'étais pas réellement agressif. C'était plus pour marquer les esprits. (je regarde tout à l'heure).
Hors ligne
Pas de problème, je te remercie d'essayer de m'aider
Hors ligne
En fait vu le comportement que tu décris je privilégierais un problème au niveau de ta boucle principale (par exemple une réinitialisation avec la texture initiale puis un rechangement en fonction des modifs) ce qui pourrais provoqué un clignotement.
Dernière modification par wizad (23-06-2008 21:02:56)
Hors ligne
wizad :
An fait vu le comportement que tu décris je privilirais un problème au niveau de ta boucle principale (par exemple une réinitialisation avec la texture initiale puis un rechangement en fonction des modifs) ce qui pourrais provoqué un clignotement.
Pas bête, mais après quelques tests, je pu vérifier que ça ne venait pas de ma boucle principale.
D'ailleurs si c'était ça pourquoi en passant d'un material EMT_TRANSPARENT a un EMT_SOLID, comme je l'ai fait ça marcherait ? La texture est bien appliquée et est bien prise en compte au bon moment, c'est lors de l'affichage du rendu qu'il se passe des choses étranges. :p
Hors ligne
Pourrais-tu fournir un screen ?
Es-tu sûr par ailleurs que tu ne superpose pas deux objets aux mêmes coordonnées ? (Ca peut faire glitcher et clignoter un peu la texture).
Hors ligne
Pages: 1