salut
alors la me viens un gros doute. Lorsque l'on exporte un objet dans un format quelconque on se retrouve avec 1 seul mesh. Lorsque l'on exporte plusieur objet dans un seul et meme fichier on a toujours un seul et unique mesh. ????
Est il possible dans irrlicht de récupérer un élément particulier d'un fichier ? Par exemple j'exporte mon perso et son épée dans un fichier 3ds. Est il possible de manipuler l'épée sans toucher au perso ?
++
j'ai édité
Dernière modification par Dragonblood (07-01-2009 19:19:49)
Hors ligne
ben getMesh demande un nom de fichier. Donc pour moi Irrlicht associe Mesh au fichier total. Il ne différent ci pas les différents éléments composant le fichier. Enfin c'est ce que je pense, j'en suis quasi sur mais je peux me tromper.
Vous connaissez le jeu Oblivion ? au début il y a une phase de création de personnage assez détailler ou on peut choisir la longueur du nez, la position des joues, la tailles des yeux, la distance bouche menton et compagnie. Ben j'aimerais faire un truc un peu pareil mais je crois que pour faire ca ils déplacent les vertex correspondant a la partie du corps. par exemple je veux une grande bouche, ben il me déplace les vertex de la bouche. Bon tout ca pour dire que apparement normalement y a moyen de de séléctionner des sous-objet( arretes, vertex, face, mesh) d'un fichier mais que Irrlich ne le fait pas apparement.
++
Hors ligne
Dragonblood :
...Lorsque l'on exporte plusieur objet dans un seul et meme fichier on a toujours un seul et unique mesh. ????
Non, tes objets sont toujours séparés, et tu peux récuper donc les différents objets en théorie. Par contre, la tout de suite, je ne sais pas comment on fait
sous Irrlicht, je me demande si il ne faut pas passer par les AnimatedMeshSceneNode...
Hors ligne
ben si tu trouve tu me le dis et tiens pendant que t'es la tu sais si on peut manipuler directement les vertex d'un objets (ou arete, face,..)?
Hors ligne
Il faut passer par les fonctions du scenemanager->getMeshManipulator
Hors ligne
ben juste pour les vertex alors. Et ca s'applique sur l'ensemble des vertex et pas pour un en particulier donc pas possible de déplacer un vertex en particulier pour avoir des yeux plus gros, une bouche plus fine et compagnie ? Oui je sais j'en demande beaucoup...
MAis bon mon problème initial ca reste surtout de séléctionner un objet en particulier de mon fichier
Hors ligne
La fonction 'getMeshManipulator' renvoie un IMesh, qui te donne accès à des méthode permettant les manipulations.
Comme par exemple IMesh->getMeshBuffer( num_buffer); etc...
Sinon, pour la selection en séparé je regarde deux trois truc et ej te tiens au courant...
Hors ligne
oui oui oui je t'ai as dit le contraire en fait mais la manipulation vertex par vertex y a pas. Ou j'ai mal compris.
le MeshBuffer c'est quoi au fait ?
Hors ligne
Voici un exemple un peu plus concret:
// charge un modèle 3D scene::IAnimatedMesh model = scenegraph->getMesh("test1.3ds"); IMeshManipulator* meshMan = smgr->getMeshManipulator(); int nIndex; for( nIndex = 0; nIndex < model->getFrameCount(); nIndex++ ) { scene::IMesh* mesh = model->getMesh( nIndex, 1 ); if( mesh ) { meshMan->scaleMesh( mesh, core::vector3df( 10.0f, 1.0f, 10.0f ) ); } } ((scene::SAnimatedMesh*)model)->recalculateBoundingBox();
Les MeshBuffer sont en fait représentatif de la geométrie du mesh, il en existe 3 types, les sMeshBuffer, les SMeshBufferLightMap et
les SMeshBufferTangents.
Tu obtiens ces mesh avec ce genre de code:
SMeshBuffer *mbuffer = (SMeshBuffer*) mesh->getMeshBuffer( nIndex );
// je vais récupérer un vertice donnée:
S3DVertex vert = mbuffer->Vertices[num_du_vertex];
après, dans la doc tu as les définition des 3 type de MeshBuffer et des S3DVertex/S3DVertex2TCoord et S3DVertexTangents
Hors ligne
a ok ton premier code fais quoi au juste ? (pas envie de réflechir il est minuit a la réunion)
Hors ligne
tu rescale le mesh sur toutes ses frames de son anim ?
Hors ligne
Non, tu fait juste un scale de tous les vertices du mesh...
Hors ligne
non mais quand tu fais
for( nIndex = 0; nIndex < model->getFrameCount(); nIndex++ )
{
}
tu parcourt bien l'anim du mesh non ?
ton deuxième code va beaucoup m'aider pour plus tard
Dernière modification par Dragonblood (07-01-2009 21:37:31)
Hors ligne
non mais quand tu fais
for( nIndex = 0; nIndex < model->getFrameCount(); nIndex++ )
{
}
tu parcourt bien l'anim du mesh non ?
Ben j'ai raison la non ?
Dernière modification par Dragonblood (08-01-2009 12:09:53)
Hors ligne
Ben c'est sympas de me laisser parler tout seul hein
Vous avez etez kidnappez par des extra-terrestre ou vous avez fuit ce sujet ?
Hors ligne
ET téléphone maison !
oui tu parcourt les keys frames de l'animation enfin si je me rappelle bien ^^
Hors ligne
Non, tu ne parles pas dans le vide Dragonblood, mais pour ce qui me concerne, pour t'aider, il faudrait pondre quelques
bouts de codes, que je n'ai pas le temps de faire pour le moment. Ce WE je creuserais le truc, bien que il m'a semblé lire sur le
forum off que ce n'était pas facile de travaillé sur les sous-objet, et que le format Collada seul autorisait ce genre de technique.
Avis au connaisseur
Hors ligne
ET téléphone maison ! big_smile
oui tu parcourt les keys frames de l'animation enfin si je me rappelle bien ^^
haha je me disait bien que j'étais pas devenu fou hein. Tu confirme Tymke ?
Faut que je m'interesse au format Collada. Tiens au fait vous auriez pas déja trouvé une sorte de comparatif des formats d'export 3D avec en gros les possibilité de chacun ?
Dernière modification par Dragonblood (08-01-2009 20:39:50)
Hors ligne
De mémoire non, mais cela doit se trouver, sur le forum off par exemple. Perso, par exemple, je ne connais pas le Collada, mais
formats favories sont les 3DS et B3D ..
Hors ligne
Dragonblood :
non mais quand tu fais
for( nIndex = 0; nIndex < model->getFrameCount(); nIndex++ )
{
}
tu parcourt bien l'anim du mesh non ?
Oui effectivement, il s'agit d'une boucle qui applique le truc pour chaque Frame d'une animation.
On peut écrire un code plus simple pour un mesh dit 'static', comme ça:
// charge un modèle 3D scene::IMesh *model = scenegraph->getMesh("test.3ds"); IMeshManipulator* meshMan = smgr->getMeshManipulator(); if( model ) { meshMan->scaleMesh( model, core::vector3df( 10.0f, 1.0f, 10.0f ) ); }
voilà
Hors ligne
okay je vais regarder ca plus en détaille ce week end. Et puis faut que j'attaque la modélisation de mon jeu aussi.
Hors ligne
Dragonblood :
... Et puis faut que j'attaque la modélisation de mon jeu aussi.
tiens, d'ailleurs un petit sujet la dessus dans la rubrique 'vos projet', non ? cela serait cool que tu nous explique un peu
plus ce que tu as en tête
Hors ligne