Page 1 sur 1
Un plugin 3ds pour la 3D
Publié : mer. 11/janv./2012 14:26
par pat
Bonjour,
En cette nouvelle année 2012, je vous fais part d'un de mes souhaits.
PB est bien fourni en fonction 3D et je trouve dommage de ne pas pouvoir facilement l'exploiter.
Il y a bien la page Internet d'Ogre Exporter pour convertir des fichiers 3D en .mesh mais je trouve ça bien compliqué et je n'ai pas réussi à ce jour à faire ce genre de conversion.
Le format .3ds était fourni avec presque tous les modeleurs, dommage que PB ne fonctionne que sous .mesh pour la 3D et qu'il n'y ait pas de plugin en .3ds.
J'ai bien essayé avec Blender avec Blender Exporter et cela ne fonctionne pas sous la version Blender 2.58 release.
J'ai décidément bien du mal à pouvoir m'initier en 3d.
Re: Un plugin 3ds pour la 3D
Publié : mer. 11/janv./2012 17:11
par Cool Dji
Salut Pat,
J'étais comme toi, j'avais du mal avec les export mesh de Blender.
J'utilise Deled, il a un export mesh hyper simple à utiliser et qui passe nickel avec Pb.
Re: Un plugin 3ds pour la 3D
Publié : lun. 16/janv./2012 18:09
par G-Rom
Ogre ne supporte que du .mesh, pas d'alternative possible, si tu as un soucis d'exportation, pose ton pb sur le forum.
Re: Un plugin 3ds pour la 3D
Publié : lun. 16/janv./2012 21:33
par Guimauve
Dans le pire des cas il est toujours possible de lire le fichier 3ds manuellement puis reconstruire le mesh à l'aide des commandes disponibles.
AddMeshVertex(x, y, z), MeshVertexNormal(x, y, z), MeshVertexTextureCoordinate(u, v) et cie. Moi je fais un truc similaire avec un ficher
WaveFrontObject (*.obj) pour l'éditeur 3D sur lequel je travaille en ce moment. Quelques listes chaînées structurées, quelques petits correctifs
au niveau des indices et l'affaire est ketchup.
A+
Guimauve
Re: Un plugin 3ds pour la 3D
Publié : lun. 16/janv./2012 22:45
par Cool Dji
Salut Guimauve,
Un code qui lit les .obj => ça m'intéresse pour au moins récupérer les coordonnées du mesh pour :
- calculer le bounds
- permettre la fonction magnetisme entre Entity dans mon éditeur de niveau
Re: Un plugin 3ds pour la 3D
Publié : mar. 17/janv./2012 4:59
par Guimauve
Bonjour CoolDji,
Le code que j'ai fait récupère les vertex, les normales, les coordonnées UV, les indices et même les informations à propos des matériaux (texture, paramètres lumière spéculaire, diffuse, etc.).
Seulement, je ne l'ai pas testé sur les fichiers wavefront autres que ceux générés par Rhinoceros 3D. Il ne faut pas oublié que j'ai configuré le code pour qu'il génère des sous-mesh et un non
une mesh avec tout les éléments dans un seul bloc.
Pour ce qui est du code lui-même et bien il fait environ 900 lignes uniquement pour le système Mesh/Sous-Mesh. Je ne compte pas les éléments tel que les structures Vector3, Vector2, Indice3,
Texture qui sont également nécessaire. Je vais faire une version écourté avec le stricte minimum pour que ça fonctionne et je donne le lien vers une archive compressé dès que c'est opérationnel.
Finalement, le passage entre la Mesh WaveFrontObject et les commandes 3D de PureBasic ne sera pas implémenté. Mais là, avec les informations correctes en mémoire la tâche sera facile.
Les doigts dans le nez comme ont dit !
A+
Guimauve
Re: Un plugin 3ds pour la 3D
Publié : mar. 17/janv./2012 13:28
par Cool Dji
Bonjour Guimauve,
Merci, c'est un gros boulot que tu as fait !
Re: Un plugin 3ds pour la 3D
Publié : mar. 17/janv./2012 15:09
par Guimauve
Bonjour à tous,
Pour le chargement d'un fichier WaveFrontObject c'est par ici :
Parse WaveFrontObject Mesh
A+
Guimauve
Re: Un plugin 3ds pour la 3D
Publié : mer. 18/janv./2012 12:53
par pat
Merci à tous pour vos réponses.
Je vais voir avec Deled pour l'exportation, sait-on jamais.
J'ai l'impression que mon voeu restera pieux et il restera les alternatives de Guimauve.
Mais cela reste quand même une affaire de spécialiste, et je suis un néophyte pour la 3D, et je ne suis pas capable de grand chose dans le domaine actuellement.
Re: Un plugin 3ds pour la 3D
Publié : mer. 18/janv./2012 18:16
par G-Rom
Ogre a deja des exporteurs pour les différents modeleurs 3D, il serait stupide je pense de perdre du temps a coder le support d'autres formats.
Re: Un plugin 3ds pour la 3D
Publié : mer. 18/janv./2012 20:31
par Cool Dji
Salut G-rom,
Je n'ai pas de problèmes pour ouvrir des mesh avec Pb, l'export de Deled marche très bien. En revanche, j'ai besoin de pouvoir disposer des coordonnées des points composant une entity pour :
- magnétisme pour coller les entitys dans un éditeur 3d
- gestion personnelle des collisions et pouvoir détecter précisément la zone d'impact
et ce, je n'ai pas trouvé d'autres moyens de refaire une fonction loadmesh qui me stock les coordonnées quelque part.
Donc, soit je modifie le code de Guimauve pour lire un .obj, soit je charge un mesh ogre en .xml.
Edit : Juste pour récupérer les coordonnées + normale + pos texture, un petit code qui lit un xml (export ogre sous Deled)
J'ai testé avec des meshs multiples, ça a l'air de fonctionner mais faudrait que je sécurise par rapport à la longueur des chaines de caractères qui pourraient varier selon les versions...
Code : Tout sélectionner
Global Dim posguillement.i(6)
; ChargeXML
OpenFile(0,"Data/multiple.xml")
Repeat
TexteFile$=ReadString(0)
;Charge un objet
If Mid(TexteFile$,1,19)=" <faces count="
nbfaces.i = Val(Mid(TexteFile$,21, Len(TexteFile$)-20))
For j=1 To nbfaces
TexteFile$=ReadString(0)
; cherche la position de tous les "
i=1
For k=1 To Len(TexteFile$)
If Mid(TexteFile$,k,1)=Chr(34)
posguillement(i)=k
i=i+1
EndIf
Next
Debug Mid(TexteFile$,posguillement(1)+1,posguillement(2)-posguillement(1)-1) ; V1
Debug Mid(TexteFile$,posguillement(3)+1,posguillement(4)-posguillement(3)-1) ; V2
Debug Mid(TexteFile$,posguillement(5)+1,posguillement(6)-posguillement(5)-1) ; V3
Next
ReadString(0)
TexteFile$=ReadString(0)
nbvertex.i = Val(Mid(TexteFile$,30,Len(TexteFile$)-31))
ReadString(0)
For j=1 To nbvertex
ReadString(0)
TexteFile$=ReadString(0)
; cherche la position de tous les "
i=1
For k=1 To Len(TexteFile$)
If Mid(TexteFile$,k,1)=Chr(34)
posguillement(i)=k
i=i+1
EndIf
Next
Debug Mid(TexteFile$,posguillement(1)+1,posguillement(2)-posguillement(1)-1) ; Position X
Debug Mid(TexteFile$,posguillement(3)+1,posguillement(4)-posguillement(3)-1) ; Position Y
Debug Mid(TexteFile$,posguillement(5)+1,posguillement(6)-posguillement(5)-1) ; Position Z
TexteFile$=ReadString(0)
; cherche la position de tous les " chr(34)
i=1
For k=1 To Len(TexteFile$)
If Mid(TexteFile$,k,1)=Chr(34)
posguillement(i)=k
i=i+1
EndIf
Next
Debug Mid(TexteFile$,posguillement(1)+1,posguillement(2)-posguillement(1)-1) ; Normale X
Debug Mid(TexteFile$,posguillement(3)+1,posguillement(4)-posguillement(3)-1) ; Normale Y
Debug Mid(TexteFile$,posguillement(5)+1,posguillement(6)-posguillement(5)-1) ; Normale Z
TexteFile$=ReadString(0)
; cherche la position de tous les "
i=1
For k=1 To Len(TexteFile$)
If Mid(TexteFile$,k,1)=Chr(34)
posguillement(i)=k
i=i+1
EndIf
Next
Debug Mid(TexteFile$,posguillement(1)+1,posguillement(2)-posguillement(1)-1) ; texture coordonnée U
Debug Mid(TexteFile$,posguillement(3)+1,posguillement(4)-posguillement(3)-1) ; texture coordonnée V
ReadString(0)
Next
EndIf
Until Eof(0)
Voilà
Re: Un plugin 3ds pour la 3D
Publié : mer. 18/janv./2012 22:54
par G-Rom
En revanche, j'ai besoin de pouvoir disposer des coordonnées des points composant une entity
Salut cool Dji , je prend note , ne m'étant pas occupé des meshs , je vais voir ce que je peut faire.
le top serais de pouvoir récupérer via une entité , le ou les mesh par les noms aussi ( un mesh porte un nom )
par exemple pour une pièce moteur :
[mon entitée]
... [mesh "piston"]
... [mesh "bièle"]
... [mesh "soupape"]
etc...
avec une fonction du genre : getMeshByName(EntityID , name$) , puis d'autres pour parcourir les vertices du mesh , ca devrais faire l'affaire.
Re: Un plugin 3ds pour la 3D
Publié : jeu. 19/janv./2012 0:05
par Cool Dji
Oui effectivement, un peu dans le genre...ce serait à la limite du merveilleux
Avec la possibilité de partir de l'Entity pour accéder aux coordonnées des points car on bénéficiera des modifications éventuelles issues d'un scale ou un rotate.
Alors que les coordonnées des points du mesh devront être recalculées à chaque scale ou rotate...pour correspondre à celles des points de l'Entity.
En fait, idéalement et selon les besoins, il faudrait pouvoir accéder aux coordonnées des points du mesh et aux coordonnées des points de l'Entity après transformation (scale, rotate).
Je pense que tout existe, il "suffirait" d'ouvrir la boite avec un peu de yaquafautquon
