Exportation 3DSMAX pour un map dans IRRLICHT
Proposé par astragoth

le 21 November 2008 à 10h 07mn 51s

15740 visualisations

Déconseillé aux moins de 3 ans
illustration


Bonjour,
je suis nouveau sur ce forum.
Donc je me présente un peu, je m'appel julien, 27ans sur toulouse, ingénieur dans le spatial

J'aide des amis à gérer des courses de voiture télécommander thermique.
Et lorsque j'ai vu le site de leur team, je me suis dis, là, il faut que je les aide 
Voila le site, et vous pourrez voir le modélisation 3D de leur piste :
http://fvmn.forumpro.fr/

Et donc quand j'ai vu ca, je me devais de réagir, et donc je viens de me lancer dans la modélisation 3D de leur piste.
Mais pourquoi m'arreter la ?
Et donc j'aimerai avoir modéliser la piste, utiliser un moteur physique, je pense OGRE3D pour pouvoir s'amuser, et donc amuser toute l'équipe quand il fait pas beau, ou quand ils font c.... au boulot 

Pour l'instant, j'ai modéliser la piste, mais j'ai commencé déjà à avoir quelques problémes ...
Voivi une image de ma modélisation


Du même coup, j'ai modélisé la voiture




Et maintenant, je m'attaque au jeux.
J'ai déjà réaliser des simulations avec Delta3D, mais je n'ai vraiment pas aimé, c'était lourd, difficile à s'y mettre
Bref, aprés bcp de recherche et de discution avec des potes, je me lance sur IRRLICHT. et aprés newton pour le moteur physique.
Mais déjà, commencons par la base, afficher la piste avec IRRLICHT.
Premiére questions, je modélise tout avec 3DSMAX, qu'elle est le meilleur format pour l'exportation de la piste? sachant que je doit avoir une bonne détection de collision?
Et en meme temps un petit tuto, histoire de m'aider, ca serai cool
Merci d'avance

Ensuite pour la voiture, vous me conseillez je suppose le meme export que la piste?

Pour la caméra, avaez vous un bon tuto? car je pense suivre la voiture à la maniére sur trackmania.

Merci d'avance pour vos réponses, et je viendrait mettre mes résultats au fur et à mesure !
@+
Julien


#1 

21-11-2008 11:17:01

achoura
Membre
Date d'inscription: 30-10-2008
Messages: 41

Bonjour, bienvenue sur le monde de irrLicht, je vous assures que vous trouverez votre bonheur ici. bref,,,moi aussi je suis nouveaux mais pour un bon début de te conseille de commencer avec les exemples de la sdk irrLicht (à télécharger dans le site de irrLicht). personnellement, j'ai appris plein de choses & astuces utiles pour un projet comme le votre. je laisse les maîtres de ce forum vous explique plus.@bientôt


Le vrai savoir c'est ce qu'il reste dans le cerveau après tous oubliés.

Hors ligne


#2 

21-11-2008 12:26:13

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

Salut astragoth ,  et bienvenue sur irrlicht big_smile
sympa tes modèles wink Ca doit claquer des polygones , non ^^ ?
Perso , pour répondre à tes question , je dirais :
-export de la piste en bsp ou en 3ds
-export de la bagnole en 3ds
-png pour les textures (vive le png big_smile )

Pour la camera , pas de tutos détaillés , mais il te faut une camera à la troisième personne et ce n'est pas bien difficile à mettre en oeuvre wink .
Tu peux facilemnt trouver quelques codes sur le forum (celui de pspmy , par exemple > http://forum.irrlicht.fr/viewtopic.php?id=742 )
Sinon , si tu veux faire un effet de "smoothing" (je sais pas si on dit comme ça ^^' ) , je te dirais de t'inspirer de ce tuto d'OGRE > http://www.ogre3d.org/wiki/index.php/3r … m_tutorial qui rend vraiment pas mal ...
Pour ce que tu veux faire , j ne sais pas si newton est nécessaire ... peut etre que le gestionnaire de collision d'irrlicht est suffisant ???Tu te ferais moins  ch---  , ca c'est sur ^^ ...

Bonne chance pour ton projet en tout cas , n'hésite pas à demander de l'aide sur le forum si tu est bloqué smile

Hors ligne


#3 

21-11-2008 12:45:34

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

Bonjour astragoth et sois le bienvenu.

En complement de ce qui vient d'etre dis ( et desole pour les accents, je suis avec un tel portable):

Ton projet est en effet tres interessant. Tu a deja pas mal d'element en ta possession visiblement (je pense en
particulier aux modeles 3D).
Tout d'abord, justement, concernant le meilleurs format 3D pour l'export pour pouvoir l'employer avec Irrlicht,
chaque format possede ses qualites, comme souvent. Mais dans la mesure ou tu bosses avec 3DSMAX, perso je dirais
tout simplement le format 3DS qui est tres bien supporte par Irrlicht, et ce pour tout tes modeles.
Les photo des modelisations que tu presente sont vraiment de tres bonnes qualites. (comme dis Ramis, attention
aux modeles trop lourd wink )

Concernant l'emploi d'Irrlicht, pas de soucis, il devrait te permettre d'arriver a tes fin pour ton projet.
Pour ce qui est du moteur physique, une fois tes premiers elements graphiques integres et testes, alors ce sera
pour toi l'heure du choix. Newton a le grand avantage d'etre simple et facile d'acces. Maintenant, attention,
dans sa version actuelle il est vite limite sur des scenes biens chargees. Donc seule quelques essais te
permettront de te faire une idee plus precise.

Pour des tuto, comme le souligne tres justement achoura, je pense qu'il te faut deja bien apprehender ceux
du SDK, qui sont bien commentes et facile d'approche.
Pour un apprentissage vraiment de base, je te conseil aussi ce lien que je recommande a chaque fois, que tu trouve
dans les liens du portails:
http://www.siteduzero.com/tutoriel-3-56 … licht.html

Quand aux coups de mains, il y aura toujours quelqu'un dans le coin pour t'aider, pour peut que tu fournisses
les elements pour se faire une bonne idee de soucis auquels tu es confronte.

smile


Force et sagesse...

Hors ligne


#4 

22-11-2008 10:38:30

astragoth
Petit nouveau
Lieu: Toulouse
Date d'inscription: 21-11-2008
Messages: 6
Site web

Bonjour tout le monde,
merci beaucoup pour tout vos conseil, mais j'ai déjà fait les tuto d'irrlicht, c'est ce qui m'a aidé à choisir ce moteur 3D.
car j'avais commencé a voir OGRE, et je l'ai trouvé trop compliqué à mettre en place, ou alors je voulais me faire c...... lol

Bon, je vais attaquer avec vos conseils, et je vous tiendrai au courant, meme si je n'ai pas de soucis, je vous présenterais l'etat

Hors ligne


#5 

22-11-2008 10:42:53

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

astragoth :

...et je vous tiendrai au courant, meme si je n'ai pas de soucis, je vous présenterais l'etat


On espère bien smile   

Ceci dit bon courage, et n'hésite surtout pas, et n'oublie pas, il n'y a pas de questions idiotes wink


Force et sagesse...

Hors ligne


#6 

25-11-2008 11:41:57

astragoth
Petit nouveau
Lieu: Toulouse
Date d'inscription: 21-11-2008
Messages: 6
Site web

Salut,
J'ai commencé à faire du code pour afficher ma piste.
Le seul probléme est que lorsque j'utilise OPENGL comme driver,j'ai la piste qui est bleu ...


Et si j'utilise DIRECT3D 8 ou 9, j'ai le message d'erreur suivant:
Error: Parallax map renderer only supports vertices of type EVT_TANGENTS

Est ce que vous avez eu le meme probléme????
Comment résoudre ca?

Merci d'avance

Hors ligne


#7 

25-11-2008 12:53:49

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

A chaud je dirais un soucis de format de ton objet 3D (niveau des material entre autre).
Quelle format d'export emplois-tu ?


Force et sagesse...

Hors ligne


#8 

25-11-2008 14:41:18

astragoth
Petit nouveau
Lieu: Toulouse
Date d'inscription: 21-11-2008
Messages: 6
Site web

J'utilise le format d'export 3DS, de 3DSMAX 9

Hors ligne


#9 

25-11-2008 18:39:45

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

L'idéal dans ce cas est de pouvoir tester, si cela ne t'embête pas, fait un zip avec ton ficher 3DS et les médias associés, pour
pouvoir tester et voir ce qui ne va pas (n'oublie pas l'espace d'upload du site, cela peut rendre service)
wink


Force et sagesse...

Hors ligne


#10 

01-12-2008 10:59:11

astragoth
Petit nouveau
Lieu: Toulouse
Date d'inscription: 21-11-2008
Messages: 6
Site web

Tu m'excuseras, mais ça me dérange un peu de passer mes fichiers 3DS, comme ca ...
Du coup, je reviendrais plus tard sur le rendu de la map.

J'ai ajouter une caméra attacher à la voiture, qui la suit en translation, et rotation comme sur le jeu trackmania.

Il me reste juste à mettre l'apect physique.
J'ai commencé à faire une gestion de collision avec irrlicht, et j'ai eu quelques soucis avec c'est qu'un moteur 3D.
Du coup, j'ai attaqué la gestion de collision avec Newton.
Mais j'ai un petit soucis sur une ligne car elle met 20minutes à s'éxécuter, et en plus ca plante lol
NewtonTreeCollisionEndBuild(g_newtonmap, 1);

Voici le code de ma classe:

Code:

#include "StdAfx.h"
#include "Collision.h"
#include "Trace.hpp"
CCollision::CCollision(void)
{
    selectedSceneNode = 0;
    lastSelectedSceneNode = 0;
    // Init newton
    nWorld = NewtonCreate(NULL, NULL);
    // Set up default material properties for newton
    int i = NewtonMaterialGetDefaultGroupID(nWorld);
    NewtonMaterialSetDefaultFriction   (nWorld, i, i, 0.8f, 0.4f);
    NewtonMaterialSetDefaultElasticity (nWorld, i, i, 0.3f);
    NewtonMaterialSetDefaultSoftness   (nWorld, i, i, 0.05f);
    NewtonMaterialSetCollisionCallback (nWorld, i, i, NULL, NULL, NULL, NULL);

}

CCollision::~CCollision(void)
{
}
void CCollision::GestionCollision(void)
{

}


void CCollision::InitNewton(void)
{
    nWorld = NewtonCreate (NULL, NULL); // On initialise nWorld

}

void CCollision::InitCollisionMap()
{
    g_newtonmap = NewtonCreateTreeCollision(nWorld, NULL);
    NewtonTreeCollisionBeginBuild(g_newtonmap);
    int CMeshBuffer, j;
    int v1i, v2i, v3i;
    IMeshBuffer *mb;

    float vArray[9]; // vertex array (3*3 floats)

    int tmpCount = 0;

    for (CMeshBuffer=0; CMeshBuffer<meshpiste->getMesh(0)->getMeshBufferCount(); CMeshBuffer++)
    {    
        mb = meshpiste->getMesh(0)->getMeshBuffer(CMeshBuffer);

        video::S3DVertex2TCoords* mb_vertices = (irr::video::S3DVertex2TCoords*)mb->getVertices();

        u16* mb_indices  = mb->getIndices();
        // add each triangle from the mesh
        for (j=0; j<mb->getIndexCount(); j+=3)
        {
            v1i = mb_indices[j];
            v2i = mb_indices[j+1];
            v3i = mb_indices[j+2];
    
            vArray[0] = mb_vertices[v1i].Pos.X;
            vArray[1] = mb_vertices[v1i].Pos.Y;
            vArray[2] = mb_vertices[v1i].Pos.Z;
            vArray[3] = mb_vertices[v2i].Pos.X;
            vArray[4] = mb_vertices[v2i].Pos.Y;
            vArray[5] = mb_vertices[v2i].Pos.Z;
            vArray[6] = mb_vertices[v3i].Pos.X;
            vArray[7] = mb_vertices[v3i].Pos.Y;
            vArray[8] = mb_vertices[v3i].Pos.Z;
            
            std::cout << "\n";
            NewtonTreeCollisionAddFace(g_newtonmap, 3, (float*)vArray, 12, 1);
            
        }

    }
    NewtonTreeCollisionEndBuild(g_newtonmap, 1);
    g_newtonmapbody = NewtonCreateBody(nWorld, g_newtonmap);

    // set the newton world size based on the bsp size
    float boxP0[3]; 
    float boxP1[3]; 
    float matrix[4][4]; 
    NewtonBodyGetMatrix (g_newtonmapbody, &matrix[0][0]); 
    NewtonCollisionCalculateAABB (g_newtonmap, &matrix[0][0],  &boxP0[0], &boxP1[0]); 
    // you can pad the box here if you wish
    //boxP0.y -= somevalue; 
    //boxP1.y += somevaluef; 
    NewtonSetWorldSize (nWorld, (float*)boxP0, (float*)boxP1);
    
}

void CCollision::InitCollisionCar()
{
    NewtonCube *tmp = new NewtonCube;

    tmp->mesh = meshvoiture;
    tmp->node = nodevoiture;

    // Create a box primitive. 38 is just an estimated value of the size of the model,
    tmp->collision = NewtonCreateBox(nWorld, 38, 38, 38, NULL);
    tmp->body = NewtonCreateBody(nWorld, tmp->collision);

    // Set user data pointer to the scene node
    NewtonBodySetUserData(tmp->body, tmp->node);

    // Set body mass & inertia matrix
    NewtonBodySetMassMatrix (tmp->body, 10.0f, 150.0f, 150.0f, 150.0f);

    // Set the freeze threshhold to 1 unit (default is 0.01 but irrlight uses a large unit scale)
    NewtonBodySetFreezeTreshold(tmp->body, 1.0, 1.0, 1.0); 

    // Set callback functions for the body
    NewtonBodySetTransformCallback(tmp->body, SetMeshTransformEvent);
    NewtonBodySetForceAndTorqueCallback(tmp->body, ApplyForceAndTorqueEvent);

    // Set the position of the body
    matrix4 mat;
    mat.setTranslation(nodevoiture->getPosition());
    NewtonBodySetMatrix(tmp->body, mat.pointer());
    
}

//////////////////////////////////////////////////////////////////////////
//
// The last 2 functions are callbacks from newton
//
//////////////////////////////////////////////////////////////////////////

void _cdecl CCollision::SetMeshTransformEvent(const NewtonBody* body, const float* matrix)
{
    // copy the matrix into an irrlicht matrix4
    matrix4 mat;
    memcpy(mat.pointer(), matrix, sizeof(float)*16);

    // Retreive the user data attached to the newton body
    ISceneNode *tmp = (ISceneNode *)NewtonBodyGetUserData(body);
    if (tmp)
    {
        // Position the node
        tmp->setPosition(mat.getTranslation());        // set position
        tmp->setRotation(mat.getRotationDegrees());    // and rotation
    }
}

void _cdecl CCollision::ApplyForceAndTorqueEvent (const NewtonBody* body) 
{ 
   float mass; 
   float Ixx; 
   float Iyy; 
   float Izz; 
   float force[3]; 
   float torque[3]; 

   NewtonBodyGetMassMatrix (body, &mass, &Ixx, &Iyy, &Izz); 

   force[0] = 0.0f; 
   force[1] = NEWTON_GRAVITY * mass; 
   force[2] = 0.0f; 

   torque[0] = 0.0f; 
   torque[1] = 0.0f; 
   torque[2] = 0.0f; 

   NewtonBodyAddForce (body, force); 
   NewtonBodyAddTorque (body, torque); 
}

Si vous avez des idées pour m'aider ca serai cool !!!
merci d'avance
@+
Julien

Hors ligne


#11 

01-12-2008 18:58:57

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

astragoth :

Tu m'excuseras, mais ça me dérange un peu de passer mes fichiers 3DS, comme ca ...
Du coup, je reviendrais plus tard sur le rendu de la map.


C'est tout à fait compréhensible.


Je ne vois pas ou se trouve le bug, j'utilise ce genre de code sans soucis, avec peut-être un nombre
moins important de face ( ? ). Par contre en lisant to code, il me semble qu'il y a une petite erreur
lors de l'utilsiation de la commande 'NewtonTreeCollisionAddFace', à qui il faut fournir un vertex, donc
trois float, alors que juste au dessus tu semble intégrer dans ton tableau 'vArray[]' une face complète
donc composée de trois vertices (3x3 float).
Je ne pense pas que cela explique ce lagg sur la fonction 'NEwtonTreeCollisionEndBuild', mais cela risque
par contre de ne pas te définir ton modèle de collision comme tu le souhaites wink


Force et sagesse...

Hors ligne


#12 

02-12-2008 03:47:59

astragoth
Petit nouveau
Lieu: Toulouse
Date d'inscription: 21-11-2008
Messages: 6
Site web

Oki, je vais regardé ca.
J'ajoute dans les 19000 faces .... c'est vrai que c'est beaucoup ...
je vais essayer de voir pour diminuer

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
882 membres
1429 sujets
11119 messages
Dernier membre inscrit: LiseBuisson96
9 invités en ligne
Aucun membre connecté
RSS Feed