Format 3D

[Résolu]
Signaler
Messages postés
87
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
4 mars 2008
-
Messages postés
87
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
4 mars 2008
-
Bonjour,
je suis en train d'elaborer un projet de jeu 3D avec opengl.
j'ai decide d'utiliser les VBO pour le rendu et SDL pour le fenetrage et le menu.
SDL_image se chargera des images et FMODex du son.
SDL_net s'occuera du network.
Il me reste cependant un choix crucial a faire : le format de mes modeles 3D.
J'ai d'abord pensé à wavefront (.obj) mais apparemment il ne gere pas l'eclairage et a quelques autres petits defauts.
Je cherche un format 3D textuel simple avec un plugin d'import/export pour blender ou bien avec un programme de conversion sans perte.
 Plutot qu'un long discours, j'aimerais un format qui ressemble le plus possible a cela :

#Le format ideal (je tiens a cette syntaxe)
#Sensible a la casse

bgcolor 0 0 0
fog 100.0 200.0 #start/end
objects 1 #le nombre d'objets
materials 1
lights 3

begin_material "matos"
    diffuse 0.8 0.8 0.8
    specular 0.401 0.401 0.401
    emissive 0.0 0.0 0.0
    ambient 0.167
    shininess 0.098
    transparency 0.0
    src "texture.jpg"
end_material

begin_obj "objet"
    ###SI POSSIBLE : ###
    visible 1 #0/1
    flat 0 #1/0 (pas de culling si plat)
    collides 1    # 1/0
    solidity 1.0
    mass 34.0
    density 1.0
    water 0 #1/0
    ####################
   
    translate 0.5 -0.5344 1.0
    material "matos"
    begin_vertex 4
        1.0000 4.3333 -7.9000
        2.0000 4.3333 -0.9000
        4.000 4.4443 -9.000
        4.5000 4.54443 -9.5000
    end_vertex
    begin_normals 4
        [..]
    end_normals
    begin_texcoords 4
        [..]
    end_texcoords
    begin_faces 3  #range de facon a ce que le culling fonctionne correctement
        0 1 3  1 2 3  3 3 1  #Pour chaque point de chaque triangle : vertex normal texcoord
        1 1 1  1 3 0  3 0 1  # -1 = n/a
        0 1 0  1 0 1  0 3 1
    end_faces
end_obj

begin_light
    type directional
    ambient_intensity 0.0
    color 1.0 1.0 1.0
    intensity 0.571
    direction 0.1324 -0.9143 -0.3828
end_light

begin_light
    type spot
    radius 20.00
    ambient_intensity 0.0
    color 1.0 1.0 1.0
    intensity 0.571
    direction 0.1324 -0.9143 -0.3828
    beam_width 0.324
    cutoff_angle 0.342
    location 0.0 0.0 0.0
end_light

begin_light
    type point
    radius 20.00
    ambient_intensity 0.0
    color 1.0 1.0 1.0
    intensity 0.571
    location 0.0 0.0 0.0
end_light

eof

Merci de m'aider dans mon choix.

6 réponses

Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Certes le format X est super lourd ...
Pour le plugin-in .x de blender je ne savais pas, merci de l'info ^^
Pour un converter il est possible d'en faire un asser facilement avec DirectX.
En fait, il y a des objets (VertexBuffer ou autre, désolé ca fait longtemps que j'y ai pas toucher) qui te permettront d'obtenir la liste de tes polygones, et autre.

Cependant, je doute qu'il soit judicieux de créer son propre format. Il serait bien plus simple pour toi de faire un mode "dev" de ton jeu pendant lequel tu pourrai dynamiquement creer/supprimer/deplacer des objets divers et varier. Tu pourrai donc éditer tes lumière en ayant un rendu visuel identique à ce que tu aura dans le jeu. Il te resterai alors à coder une fonction pour enregistrer tes lumières dans un fichier texte comme expliqué dans ma réponse précédente.

Créer son propre format peut paraitre simple de prime abord mais on se heurte vite à des problèmes quasi existentiels qui nous prennent beaucoup de temps. La solution du jeu en mode edition serait beaucoup plus simple et performante. D'autant plus qu'elle te permettra de faire des modifications très rapide de tes effet/niveaux et pourrai également servir à tes joueur de kit de developpement d'extension.

La totalité des jeux fonctionnent de cette mannière : un éditeur intégré qui sera désactivé, voir supprimé pour la version release.
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Salut !
Désolé mais à ma connaissance il n'y a pas de format semblable.
Un format texte assé courant c'est le format ".x" de microsoft. Un importer/exporter est fournit avec le SDK mais seulement compatible 3DSMAX et Maya.

Normalement l'éclairage ne fait pas parti d'un model. Mais plutot d'une scene.
Aussi je te conseil d'utiliser ton propre petit format de définition de model.
Un petit fichier texte qui pourrait t'indiquer diverses informations :
- le chemin du fichier model à utiliser
- la collection de son à utiliser
- les lumières à appliquer
- les tailles
- les textures à appliquer
- ....


Ainsi, avec un seul modèle 3D tu pourrai définir une multitude de représentations défférentes. Par exemple, tu pourrai partir d'un model d'épée et en changeant la texture et les sons tu obtiendrai une épée en métal et l'autre en bois.

Voilà la solution que j'emploie généralement. Maintenant, peut-être quelqu'un connait un format correspondant à tes recherche ou une meilleure suggestion.

Bonne continuation.
Messages postés
87
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
4 mars 2008

Rebonjour,
Merci pour ta réponse.
Pour ce qui est des lumieres, c'est parce que je veux que le fichier gere a la fois mes personnages et mes niveaux.
Pour les textures, c'est une bonne idée, j'y ai d'ailleurs pensé car j'utilise deja un fichier avec un lien vers le  modele, des propriétés physiques etc... Cependant il reste le fait que je veux pouvoir editer ces fichiers modeles (et donc l'eclairage, les textures etc...) avec blender.
J'ai jeté un oeil aux fichiers X mais je trouve la syntaxe trop complexe pour ce que c'est : un format comme celui que j'ai énoncé serait amplement suffisant.
PS : .x est coompatible import/export avec blender (plugin).
Je me demande si je ne vais pas creer mon propre format et un programme de conversion qui va avec. Si vous connaissez quelqu'un qui l'a deja fait, vous m'eviteriez cette perte de temps.
Merci.
Messages postés
87
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
4 mars 2008

Merci pour ta reponse ctx_man.
Je sens que je vais faire comme tu me le suggere meme s'il faudra recoder une bonne partie du truc...
PS : il me semble plutot que la majorité des jeux possede son propre editeur 3D séparé... (ai-je tord?)
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Oui et non :D
Ils ont tous un mode d'edition in-game.
Les gros editeurs à coter c'est pour faire les travaux lourd et long.
Par exemple, il se servent du gros editeur pour modéliser un monde complet.
Ensuite ils, les testeurs notemment, utilisent l'edition in-game pour finir les détail (je décale cette caisse car sinon elle est trop loin pour l'atteindre en sautant, la couleur de la lumière ici rend pas terrible, mettre un respawn ici serait pas du luxe, ....)

L'editeur in-game n'est pas fait pour construire le monde, mais pour le finir.
Avec les gros éditeurs tu peu pas savoir si la caisse est trop loin pour l'atteindre en sautant. Tu ne t'en rend compte qu'une fois en jeu. Et la, il serait lourd de revenir dans l'editeur externe, modifier, retester, puis recommencer si c'est toujours pas bon ....

Je t'ai proposer l'editeur in-game car pour le problème que tu souhaite résourdre, c'est la méthode la plus simple et efficace qui me vient en tête.
Si ca t'amuse de faire un programme externe pour faire l'edition de tes lumières, libre à toi ^^
Messages postés
87
Date d'inscription
mardi 16 décembre 2003
Statut
Membre
Dernière intervention
4 mars 2008

Le probleme de l'editeur ingame c'est qu'il presente beaucoup moins d epossibilités qu'un editeur complet...
Je pense simplement que jvais utiliser wavefront pour le tout et je ferais une seconde passe avec l'editeur ingame pour placer  lumieres, respawns, et autres trucs... L'editeur ingame pourra juste deplacer les objets, en supprimer, les copier/coller... puis ecrire dans le fichier wavefront lui-meme ou dans un fichier separé. Merci pour l'idée.