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
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
Hors ligne
Salut astragoth , et bienvenue sur irrlicht
sympa tes modèles 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 )
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 .
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é
Hors ligne
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 )
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.
Hors ligne
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
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
Ceci dit bon courage, et n'hésite surtout pas, et n'oublie pas, il n'y a pas de questions idiotes
Hors ligne
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
A chaud je dirais un soucis de format de ton objet 3D (niveau des material entre autre).
Quelle format d'export emplois-tu ?
Hors ligne
J'utilise le format d'export 3DS, de 3DSMAX 9
Hors ligne
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)
Hors ligne
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:
#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
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
Hors ligne
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
Pages: 1