#0 

07-01-2009 19:10:57

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#1 

07-01-2009 19:14:56

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

pas sur mais ->getMesh(id)

Hors ligne


#2 

07-01-2009 19:57:00

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#3 

07-01-2009 20:05:40

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

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


Force et sagesse...

Hors ligne


#4 

07-01-2009 20:09:39

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#5 

07-01-2009 20:25:32

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

Il faut passer par les fonctions du scenemanager->getMeshManipulator wink


Force et sagesse...

Hors ligne


#6 

07-01-2009 20:36:57

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#7 

07-01-2009 20:42:07

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

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


Force et sagesse...

Hors ligne


#8 

07-01-2009 20:48:01

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


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


#9 

07-01-2009 21:04:45

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

Voici un exemple un peu plus concret:

Code:

//    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:

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
wink


Force et sagesse...

Hors ligne


#10 

07-01-2009 21:10:27

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

a ok ton premier code fais quoi au juste ? (pas envie de réflechir il est minuit a la réunion)

Hors ligne


#11 

07-01-2009 21:12:23

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

il scale tout les mesh

Hors ligne


#12 

07-01-2009 21:17:09

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

tu rescale le mesh sur toutes ses frames de son anim ?

Hors ligne


#13 

07-01-2009 21:19:06

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

Non, tu fait juste un scale de tous les vertices du mesh...


Force et sagesse...

Hors ligne


#14 

07-01-2009 21:20:21

hardcpp
Abonné
Date d'inscription: 26-04-2008
Messages: 229

Code:

getMesh (s32 frame, s32 detailLevel=255, s32 startFrameLoop=-1, s32 endFrameLoop=-1)=0 
  Returns the IMesh interface for a frame.

Hors ligne


#15 

07-01-2009 21:22:04

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#16 

08-01-2009 12:09:37

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#17 

08-01-2009 19:18:36

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#18 

08-01-2009 20:05:48

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

ET téléphone maison ! big_smile
oui tu parcourt les keys frames de l'animation enfin si je me rappelle bien ^^

Hors ligne


#19 

08-01-2009 20:29:14

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

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 wink


Force et sagesse...

Hors ligne


#20 

08-01-2009 20:38:12

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#21 

08-01-2009 20:51:54

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

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


Force et sagesse...

Hors ligne


#22 

09-01-2009 17:56:28

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

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:

Code:

//    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à wink


Force et sagesse...

Hors ligne


#23 

09-01-2009 19:10:33

Dragonblood
Abonné
Date d'inscription: 20-11-2008
Messages: 110

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


#24 

09-01-2009 20:38:15

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

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


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
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
67 invités en ligne
Aucun membre connecté
RSS Feed