Bonjour,
Je voudrais savoir s'il existe un loader de fichiers .3ds simple en C ou C++ car je voudrais l'utiliser avec opengl et glut. J'ai trouvé quelque trucs mais assez complexe et qui correspond pas trop à mon projet.
Merci d'avance
Bonjour,
Je voudrais savoir s'il existe un loader de fichiers .3ds simple en C ou C++ car je voudrais l'utiliser avec opengl et glut. J'ai trouvé quelque trucs mais assez complexe et qui correspond pas trop à mon projet.
Merci d'avance
Regarde sur ces sites :
http://nehe.gamedev.net/
http://gametutorials.com/
Tu devrais y trouver ton bonheur.
J'ai pas trouvé les codes sur le site de NEHE et puis je suis pas tres bon en anglais pour bien suivre l'explication... vous aurez pas des sites en francais ?
Et si quelqu'un en a utilisé un , peut-il m'expliquer comment s'en servir pour faire des rotations ou autres car c'est différent de la prog opengl
Sur gametut tu en a un en tout casEnvoyé par franco01
et un autre par la :
http://www.spacesimulator.net/tut4_3dsloader.html
pour un tut en francais j en connais pas et ca doit pas etre si facile que ca a trouver
Oui c'est vrai qu'en fancais des tutos ca doit pas trop exister (en tout cas pour le moment).
J'ai regardé rapidement sur les sites mais ceux qui connaissent peuvent m'expliquer un peu comment se servir des données de 3dsmax afin de faire des rotations ou autres...
Car en anglais c'est pas trop facile de comprendre , ils recuperenet les coordonnes des vertex et autres choses et ensuite comment on peut s'en servir pour une utilisation avec opengl car c'est pas très clair
Merci pour ceux qui tenteront de m'expliqer un peu tout ca (et même aux autres)
etant donnée qu'il faut deja s'y connaitre un minimum en math pour la 3D je ne saurait trop te conseiller d'aller faire un tour sur http://www.javamus.fr.st/
iu il y a un tres bon cours en francais sur les matrice ET toute une description du format 3DS.
apres ca tu n'aura plus d'excuses
@+
* Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
* pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
Mes articles
J'ai essayer d'ouvrir un fichier que j'ai créer en .3ds avec un loader que j'ai pris mais je ne le vois pas s'afficher sous opengl (alors que l'objet par défaut s'affichait bien), je ne l'avais pas texturé c peut-être dû à ca, non?
Finalement j'ai réussi à trouver un bon loader qui m'affiche entièrement ma voiture avec la couleur des matériaux.
C'est sur ce site : http://thierry.vouriot.free.fr/opengl1.php
C'est vraiment très bien fait, il y a des explications partout pour comprendre les lignes de code, mais c'est quand même l'un des plus complexe que j'ai pu voir, mais ca reste la REFERENCE.
Mais maintenant que j'ai compris un peu comment fonctionne le loader, certaines choses restenet encore en suspent : :
Ce que je voudrais faire, c'est un petit jeu de voiture sur un circuit!
J'ai réaliser la voiture sous 3dsmax et c'est pour cela que j'avais besoin de l'importer sous opengl, mais il me faut maintenant que je dessine la piste et un peu plus en cas d'hors piste.
Mais je croyais au début qu'il fallait que je chargeait plusieurs .3ds afin d'avoir tous les éléments que je placerais plus tard pour réalier mon jeu. Mais je crois qu'au fait, il faudrait que je dessine tous les objets dans la même scène 3ds et le loader lorsqu'il le charge , il récupérera tous les objets etc ....
Mais comment faire pour gérer les déplacement de la voiture et du circuit séparement (j'ai toujours pas réussi à faire bouger la voiture pour le moment j'ai utilisé glRotate et glTranslate etc... mis ca ne marche pas) et comment faire pour placer la caméra juste derrière la voiture ?
Merci de m'aider car la je suis un peu perdu
Salut,
ce tutoriel reprend integralement le code de gametutorials pour le loadage 3ds ( c meme ecrit en commentaire en haut de 3ds.cpp)
enfin bon
regarde du coté de glPushMatrix() et glPopMatrix();Mais comment faire pour gérer les déplacement de la voiture et du circuit séparement (j'ai toujours pas réussi à faire bouger la voiture pour le moment j'ai utilisé glRotate et glTranslate etc... mis ca ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 glPushMatrix(); glTranslatef(position.x,position.y,position.z); glRotatef(rotation_voiture,0.0f,1.0f,0.0f); dessine_voiture(); glPopMatrix(); // une fois ici tu recupere la matrice que tu avais avant le glPushMatrix()
place la camera avec glLookAt avec comme point de vue (param 4 5 et 6) les coord de ta voiture et en param 1,2,3 les coord de ta voiture + une distance modulé par un angle de rotation ( par exemple la rotation de ta voiture)
comment faire pour placer la caméra juste derrière la voiture ?
Ok faut que j'utilise les matrices alors pour faire les transformations , je vais jeter un oeil.
>les coord de ta voiture et en param 1,2,3
Mais justement comment fait-on pour avoir les coordonnées du vehicule car lorsqu'on le charge , le loader stocke toutes les infos sur les vertices , polygones etc ... mais on a pas d'infos sur la position du centre du vehicule par exemple, comment faire alors pour déterminer ou se trouve le vehicule sur le circuit (coord X,Y,Z)?
c a ca que servent les matrice sinon comment veut tu dessiner deux fois le meme objet a des endroits differents ..
sinon dans ton 3ds c a toi de placer correctement l objet par rapport au repere (centré du l origine ) pour que t ai pas de surprise avec les rotation entre autres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 glPushMatrix(); glTanslatef(la_postion_objet); Dessine_le_Truc(); glPopMatrix(); glPushMatrix(); glTanslatef(la_postion_objet_2); Dessine_le_Truc(); glPopMatrix();
Non, je pense qu'il serait mieux d'avoir plusieurs fichiers séparés(au moins un pour le circuit, et un par objet mobile). Dans chacun de ces fichiers, l'objet est "centré", sur l'origine.Envoyé par franco01
Par exemple pour ta voiture tu peux considérer que le centre est (largeur/2, longueur/2,0), soit centré en X et Y, et au dessus du sol;
Au moment de dessiner tu fais :
L'idée est d'avoir plein de briques, que tu places ou tu veux au moment voulu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 glTranslation(posX, posY, posZ); car.draw();
Je ne sais pas si on peut ouvrir plusieurs fichiers .3ds avec le loader, et même si c'est possible comment faire pour déterminer s'il s'agit du circuit ou d'une voiture ou même d'une roueNon, je pense qu'il serait mieux d'avoir plusieurs fichiers séparés(au moins un pour le circuit, et un par objet mobile). Dans chacun de ces fichiers, l'objet est "centré", sur l'origine.
Donc si je comprends bien , il faudrait faire une classe générale appelle Cmodele (par exemple) et ensuite : Cmodele car1,circuit;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 glTranslation(posX, posY, posZ); car.draw();
afin de pouvoir afficher avec la fonction draw de la classe Cmodele en faisant car1.draw() etc ...
Donc si je comprends bien , il faudrait faire une classe générale appelle Cmodele (par exemple) et ensuite : Cmodele car1,circuit;
afin de pouvoir afficher avec la fonction draw de la classe Cmodele en faisant car1.draw() etc ...
tu seras surement obligé de separer la piste en plusieurs bouts , mais je serais toi , je commerais d abord par n exercer avec les deplacement ( pushmatrix , transalte ...)
en mettant la voiture sur un decor temporaire ( genre un quad dessiné dessous ) et en permettant de la deplacer simplement avec les fleches
le jeu de voiture c pas le plus facile a faire si tu debute ( il faut pas mal de physique )
Oui je sais mais j'aimerais vraiment me mettre dans la 3d, et j'aimerais bien faire un petit jeu de course, je suis en train de débuter sous opengl. C'est un sujet de fin d'année pour mon école donc même si je bloque un peu en physique , ils pourront me donner des conseils (enfin j'espère )le jeu de voiture c pas le plus facile a faire si tu debute ( il faut pas mal de physique )
C'est vrai qu'il faut que je me familiarise avec les matrices avant d'attaquer le gros morceau.
Mais je me pose une question c'est par exemple, faire comme tu as dit, faire un quad sur opengl et déplacer le vehicule dessus mais comment faire pour détecter si elle est sur le cube ou dans le vide (pour un cube c'est facile car on a les dimensions mais sur un circuit c'est tout de suite plus difficile)
Et puis comment faire pour ouvrir plusieurs fichiers .3ds dans le prog , comment m'y prendre?
Ca s'appelle de la détection de collision, ou "collision detection" en anglais (z'avez vu le niveau ), et c'est reconnu comme étant un grand morceau à lui tout seul. C'est plein de maths et c'est pas facile. De plus c'est lent, et donc si ton monde commence à avoir un nombre important de polygones, il faut partitionner ton espace (BSP trees par exemple) pour être sur de ne faire des tests de collision que sur un minimum de polygones. Autant dire que tu vas en chier. Donc vu que c'est ton premier jeu, je serais toi je ferai un beau code objet bien pensé qui te permette de faire un jeu en 3D à la micromachine, donc sur des terrains plats.Envoyé par franco01
Quand tu auras rendu ton projet à l'heure, tu pourras ajouter la partie detection de collision sans trop de souci, si tu as bien pensé ton code.
Euh, ca devrait pas être trop dur :Envoyé par franco01
Très sérieusement, oublie le relief pour l'instant, ca va te bouffer un temps monstre. Si tu penses bien ton code, l'ajouter après ne sera pas trop dur, mais tout faire d'un coup, c'est un coup à aller droit dans le mur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //Si la methode fait partie de la classe Model Model car.load3DS("car.3ds"); Model circuit.load3ds("circuit.3ds"); //Si t'as un loader séparé Model car, circuit; Loader::load3DS("car.3ds",car); Loader::load3DS("circuit.3ds", circuit);
Au début concentre toi sur l'affichage (chargement du fichier 3ds et des textures associées, affichage à l'écran), puis sur l'animation (déplacement du véhicule avec les touches du clavier), puis la physique *simple* (inertie du véhicule, friction avec le sol pour les dérapages). A ce niveau t'auras déjà passé plusieurs mois dessus, mais t'auras un jeu sympa.
Ensuite tu peux ajouter les collisions (en 3D et tout), puis la physique complexe (simulation des suspensions, des cycles moteur, du différentiel, ... ca va aussi loin que tu le veux).
Je me suis renseigné à l'époque 8) sur la détection de collision mais c'était qu'en 2D, où on pouvait faire la détection par bounding box ou pixel par pixel mais ca ralenti beaucoup le jeu !!! Mais c'est vrai qu'en 3D, ce n'est plus par pixel qu'il faut tester mais par polygones et je ne sais pas trop quelles sont les techniques d'approchesCa s'appelle de la détection de collision, ou "collision detection" en anglais (z'avez vu le niveau ), et c'est reconnu comme étant un grand morceau à lui tout seul.
Oui en effet c'est une idée, j'aurais bien voulu le faire avant mais bon si tu dis que c'est long et compliqué je te crois .Quand tu auras rendu ton projet à l'heure, tu pourras ajouter la partie detection de collision sans trop de souci, si tu as bien pensé ton code.
Car ce que je voulais faire au départ c'était de la physique pure avec réglage et gestion des suspensions, de la hauteur de caisse etc... mais bon c'est clair que ce sera pas facile, je ne sais pas où en sera le projet lorsque je le rendrais mais bon il faut que je fasse les choses simples au début et puis compliqué et rajouter des choses.
Mais justement pour bien pensé le code c'est pas facile , je vais surement le réaliser en C++, mais il faut que ce soit assez ouvert pour que je puisse rajouter des choses au fur et à mesure, ca fait peur car si il faut tout recommenecr pour ajouter certains éléments que j'avais pas prévu ou pas pensé
Ce que je pense faire - mais je demande quand même votre avis avant de me lancer dans le code vu que le projet commence officellement en janvier mais bon je prend de l'avance - c'est de séparer le code en trois parties distinctes , la 1ere pour glut (gestion des entrées/sorties, affichage des scenes .3ds (ha au fait j'ai réussi à en afficher plusieurs ) , et transformations) puis la 2eme c'est juste le loader 3ds avec les fonctions pour lire et pour charger les ploygones et textures etc ... et enfin la 3eme c'est la physique du véhicule avec les forces etc ...
Par contre j'ai pas compris comment faire pour faire déraper la voiture avec la friction sur le sol, normalement c'est lorsqu'on tourne trop fort par rapport à la vitesse de la voiture, donc l'inertie la faire déraper !!!friction avec le sol pour les dérapages).
en 3d tu peux te servir des deux , bouding box ou (sphere) et si le test est positif tu passe a une detection poly par poly , ce qui te permet de gagner du tempsEnvoyé par franco01
y a une libraire gratuite qui est pas mal et simple dans le genre :
http://photoneffect.com/coldet/
par contre pour t en servir il faut avoir bien capté les matrices
pour la physique tu peux jetter un oeil a ce bouquin :
http://www.oreilly.com/catalog/physicsgame/
il y a des exemple de code source pour les voitures entre autre
Lorsque tu vas organiser ton code, il faut à chaque nouvelle classe que tu vas faire que tu poses la question "Et si demain je veux ... ?" (ajouter une remoque, simuler 4 ou 6 roues motrices, des chenilles,...). Généralement ça aide a faire un code plus ouvert aux modifications.
Maintenant, il ne faut pas te leurrer, c'est ton premier projet d'envergure. Tu vas faire un truc bien pour le projet, puis tu vas décider de continuer à bosser dessus et régulièrement tu vas devoir refaire certaines parties entière de ton programme (pas les recoder, mais créer de nouvelles classes dans lesquelles tu vas réorganiser le code que tu avais déjà produit).
Je dis pas ça pour te démotiver, moi ça fais un an que je fais ça et je m'éclate comme un dingue.
Concernant le dérapage, il va falloir que tu fasses un ptit google, parce que je ne connais pas la physique du dérapage. Pour simplifier, tu dois pouvoir donner un coefficient de friction statique et dynamique à tes roues. Tant que tes roues accroches tu utilises le coef statique et quand tu glisses tu utilises le coeff dynamique. Quand tu glisses il faut calculer de combien il faut faire pivoter la voiture autour de son centre de gravité.
pour la physique tu peux jetter un oeil a ce bouquin :
http://www.oreilly.com/catalog/physicsgame/
En effet il a l'air super !! mais bon il est pas donné !
J'ai télécharger le projet crash test mais lorsque je le compile , j'ai cette erreur :
J'ai regardé dans tous les fichiers et je ne vois pas la ligne d'appel à cette librairie pour que je modifie le repertoire de recherche car le fichier , je l'ai bien dans visual C++, et je l'ai inséré dans projetc settings mais ca ne s'améliore pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 --------------------Configuration: CrashTest - Win32 Debug-------------------- Linking... LINK : fatal error LNK1104: cannot open file "..\Vc98\Lib\Winmm.lib" Error executing link.exe. CrashTest.exe - 1 error(s), 0 warning(s)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager