#1 

21-11-2008 09:07:51

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 140.94.82.30
Courriel  Site web

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


Hors ligne


#2 

21-11-2008 10:17:01

achoura
Membres
Avatar de achoura
Date d'inscription:
Messages: 41
IP: 41.226.246.212
Courriel

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


#3 

21-11-2008 11:26:13

ramis
Membres
Date d'inscription:
Messages: 92
IP: 92.133.83.51
Courriel

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/3rd_person_camera_system_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


#4 

21-11-2008 11:45:34

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 62.201.129.226
Courriel

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-5690-petit-guide-d-irrlicht.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


#5 

22-11-2008 09:38:30

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 88.169.200.144
Courriel  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


#6 

22-11-2008 09:42:53

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.194.233
Courriel

astragoth Ecris:

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


#7 

25-11-2008 10:41:57

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 210.92.74.139
Courriel  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


#8 

25-11-2008 11:53:49

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 62.201.129.226
Courriel

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


#9 

25-11-2008 13:41:18

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 210.92.74.139
Courriel  Site web

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


Hors ligne


#10 

25-11-2008 17:39:45

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.127.250
Courriel

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


#11 

01-12-2008 09:59:11

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 218.158.72.244
Courriel  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:

#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 << "\
";
			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


#12 

01-12-2008 17:58:57

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.149.247
Courriel

astragoth Ecris:

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


#13 

02-12-2008 02:47:59

astragoth
Membres
Avatar de astragoth
Date d'inscription:
Messages: 6
IP: 140.94.82.18
Courriel  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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
185 invités en ligne
membre en ligne: -
RSS Feed