[Résolu] Génération de fichiers mesh pour Purebasic

Généralités sur la programmation 3D
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

[Résolu] Génération de fichiers mesh pour Purebasic

Message par Dudule »

Bonjour,
J'essaie vainement de créer des fichiers mesh pour Purebasic à partir de Blender avec l'exporter blender2ogre-0.6.0
Ici, un simple rectangle tout plat, tout rose.
J'obtiens un fichier "plane.mesh.xml" et un fichier "Material.001.material"
J'utilise ensuite OgreXmlConverter comme indiqué un peu partout. Cela me donne un fichier "plane.mesh" (si je l'ouvre avec un éditeur de texte, la première ligne indique [MeshSerializer_v1.41]
Jusqu'ici, pas de surprise.
Par contre, si je veux charger mon "plane.mesh" dans Purebasic (en modifiant l'exemple fourni "camera.pb" par exemple), la fonction loadMesh() me retourne la valeur 0 comme si elle n'avait pas trouvé le fichier (que j'ai pourtant placé au même endroit que les mesh d'exemple, qui eux aussi contiennent "[MeshSerializer_v1.41]" et se chargent sans problème).
J'ai aussi essayé "OgreAssimpConverter.exe" à partir de mon "plane.blend", et même de mon "plane.mesh.xml". cela me donne à chaque fois des "plane.mesh" que PB ne peut pas charger, loadMesh retourne invariablement 0.
Quelqu'un saurait-il me dire ce qui cloche avec mon "plane.mesh", car moi je sèche...
Mon fichier est dans l'archive zip ici : http://lecartablededudule.pagesperso-or ... /plane.zip

Merci par avance.
Dernière modification par Dudule le lun. 11/janv./2016 20:46, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Génération de fichiers mesh pour Purebasic

Message par djes »

Ce serait sympa que tu inclues ton code dans l'archive, que nous n'ayons qu'un minimum de manips à faire... Merci !
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par comtois »

Pour info tu peux obtenir des infos lors du chargement l'ogre, en ajoutant un paramètre à InitEngine3D() (voir la doc pour plus de choix)

Code : Tout sélectionner

If InitEngine3D(#PB_Engine3D_DebugLog)
Et j'obtiens ceci
13:49:34: WARNING: robot.mesh is an older format ([MeshSerializer_v1.41]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool.
13:49:34: Texture: r2skin.jpg: Loading 1 faces(PF_R8G8B8,512x512x1) Internal format is PF_X8R8G8B8,512x512x1.
13:49:34: Mesh: Loading plane.mesh.
13:49:34: WARNING: plane.mesh is an older format ([MeshSerializer_v1.41]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool.
Conclusion, ton mesh est bien chargé, il n'y a pas d'erreur.

Pour voir ton mesh, dans l'exemple camera.pb j'ai ajouté

Code : Tout sélectionner

    CreateEntity(1, LoadMesh(1, "plane.mesh"), MaterialID(0))
    ScaleEntity(1,30,30,30)
Et dans la boucle

Code : Tout sélectionner

      RotateEntity(1, 1, 1, 1, #PB_Relative) 
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: Génération de fichiers mesh pour Purebasic

Message par Dudule »

Merci pour les infos. Moi je n'ai pas les WARNING dans le log lors du chargement des mesh (ni pour robot, ni pour mon plane), et le fait que la fonction retourne 0 me fait dire qu'il ne le charge pas. Il faut peut-être que je mette à jour mon Purebasic qui est resté à la version 5.31. Ça doit venir de là.
Merci !
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: Génération de fichiers mesh pour Purebasic

Message par Dudule »

Eh bien non, même avec la version 5.41 x64, j'obtiens la même erreur.
Comme je le disais, le log ne me mets aucun WARNING, mais au moment du CreateEntity, j'ai [ERROR] The specified #Mesh is not initialised.
J'ai testé avec un nom bidon, l'erreur est la même, comme si c'était plus un problème d'accès au fichier que de Mesh.
Mon code :

Code : Tout sélectionner

#CameraSpeed = 1

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D(#PB_Engine3D_DebugLog)

  Add3DArchive("./Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("./Data/Models", #PB_3DArchive_FileSystem); Ici, je fais bien attention que mon plane.mesh y soit, il est à côté du robot.mesh
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    AmbientColor(RGB(255, 255, 255)) 
 
    Debug(LoadMesh(0, "plane.mesh")); Là, pas de WARNING, mais la fonction retourne 0
    ;Debug(LoadMesh(0, "robot.mesh")); Ici, elle retourne un nombre
    
    CreateTexture(0, 256, 256)
    StartDrawing(TextureOutput(0))
    Box(0, 0, 256, 256, RGB(255, 0, 0))
    StopDrawing()
    CreateMaterial(0,TextureID(0))
    CreateEntity(0, MeshID(0), MaterialID(0))
        
    CreateCamera(0, 0, 0, 100, 100)  ; Front camera
    MoveCamera(0, 0, 20, 250, #PB_Absolute)
    CameraBackColor(0, RGB(55, 0, 0))
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
             
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
                  
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf

      EndIf
      
      RotateEntity(0, 0, 0.1, 0, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
Comprends pas...
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par comtois »

C'est curieux, ton code fonctionne bien chez moi.

Affiche ton fichier log complet, ça peut aider.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Bill Gates
Messages : 14
Inscription : lun. 19/juil./2010 19:17

Re: Génération de fichiers mesh pour Purebasic

Message par Bill Gates »

Hi, you forget Parse3DScript() after Add3dArchive() function ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Génération de fichiers mesh pour Purebasic

Message par djes »

Il a raison Bill. J'ai réussi à faire fonctionner ton exemple avec un peu de mal au début car je n'avais pas mis les fichiers au bon endroit. Assure-toi toujours d'envoyer une archive complète avec les dossiers et sous-dossiers. Et n'oublie pas que windows protège les dossiers des programmes, donc tu DOIS travailler dans un dossier utilisateur (par exemple dans "mes documents").
J'ai modifié 2/3 bricoles pour charger le "materiau" natif de l'objet.

Comtois> Truc qui me gonfle, la fenêtre passe à l'arrière-plan 9 fois sur 10. Et le truc de mettre 0 dans createentity() pour charger le material par défaut n'est pas indiqué dans la doc. D'ailleurs, ça devrait être un paramètre optionnel, non ?

Code : Tout sélectionner

#CameraSpeed = 1

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D(#PB_Engine3D_DebugLog)

  ;Add3DArchive(#PB_Compiler_FilePath, #PB_3DArchive_FileSystem)
  Add3DArchive("./Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("./Data/Models", #PB_3DArchive_FileSystem); Ici, je fais bien attention que mon plane.mesh y soit, il est à côté du robot.mesh
  Add3DArchive("./Data/Scripts", #PB_3DArchive_FileSystem)
  Parse3DScripts()  ;Le parse est indispensable pour charger les matériaux
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    AmbientColor(RGB(255, 255, 255)) 

    Error = LoadMesh(0, "plane.mesh")
    ;Error = LoadMesh(0, "robot.mesh")
    ;Debug Error   
    
;     CreateTexture(0, 256, 256)
;     StartDrawing(TextureOutput(0))
;     Box(0, 0, 256, 256, RGB(255, 0, 0))
;     StopDrawing()
;     CreateMaterial(0,TextureID(0))
    CreateEntity(0, MeshID(0), 0) ;Le 0 revient à reprendre le material par défaut (équivalent à GetScriptMaterial(0, "Material.001"))
        
    CreateCamera(0, 0, 0, 100, 100)  ; Front camera
    MoveCamera(0, 0, 0, 10, #PB_Absolute) ;je la recule un peu
    CameraBackColor(0, RGB(55, 0, 0))
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
             
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
                  
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf

      EndIf
      
      RotateEntity(0, 1, 1, 1, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par comtois »

Comtois a écrit :
djes a écrit :Comtois> Truc qui me gonfle, la fenêtre passe à l'arrière-plan 9 fois sur 10. Et le truc de mettre 0 dans createentity() pour charger le material par défaut n'est pas indiqué dans la doc. D'ailleurs, ça devrait être un paramètre optionnel, non ?
Quelle fenêtre ?
Ah oui pardon, il s'agit de la fenêtre du programme quand on le lance en mode fenêtré plutôt qu'en plein écran.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: Génération de fichiers mesh pour Purebasic

Message par Dudule »

Non, y'a rien à faire, pas moyen de charger mon fichu plane.mesh
Le log de PureBasic ne donne rien :
[14:22:34] Waiting for executable to start...
[14:22:34] Executable type: Windows - x64 (64bit, Unicode)
[14:22:34] Executable started.
[14:22:36] [ERROR] OPCycle.pb (Line: 38)
[14:22:36] [ERROR] The specified #Mesh is not initialised.
Par contre, j'ai un fichier log d'OGRE dans mon dossier qui me dit :
14:19:19: Mesh: Loading plane.mesh.
14:19:19: OGRE EXCEPTION(7:InternalErrorException): Missing M_EDGE_GROUP stream in MeshSerializerImpl_v1_3::readEdgeListLodInfo at OgreMeshSerializerImpl.cpp (line 2985)
Bon, autant vous dire que je ne sais pas de quoi il s'agit, mais je vois bien que c'est au chargement de mon mesh.

Bizarre que ça fonctionne chez vous, ou plutôt que ça ne fonctionne pas chez moi.
Je ne mets pas de Parse3DScripts() parce que j'ai la version démo de PB. Mais je ne pense pas que ça vienne de là...
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par comtois »

Dudule a écrit : Par contre, j'ai un fichier log d'OGRE dans mon dossier qui me dit :
14:19:19: Mesh: Loading plane.mesh.
14:19:19: OGRE EXCEPTION(7:InternalErrorException): Missing M_EDGE_GROUP stream in MeshSerializerImpl_v1_3::readEdgeListLodInfo at OgreMeshSerializerImpl.cpp (line 2985)
C'est curieux ce message, fais une recherche sur le fichier engine3D.dll ,est-ce que tu utilises le bon ?

Je ne mets pas de Parse3DScripts() parce que j'ai la version démo de PB. Mais je ne pense pas que ça vienne de là...
Parse3DScripts() fonctionne aussi avec la version démo, mais c'est vrai que ça ne vient pas de là.

si tu ne mets pas le parsescript() tu as ce message
14:42:26: Can't assign material Material.001 to SubEntity of E0 because this Material does not exist. Have you forgotten to define it in a .material script?
Mais ça n'empêche pas de charger le mesh.
14:42:26: Mesh: Loading plane.mesh.
14:42:26: WARNING: plane.mesh is an older format ([MeshSerializer_v1.41]); you should upgrade it as soon as possible using the OgreMeshUpgrade tool.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Dudule
Messages : 17
Inscription : lun. 04/janv./2016 20:18

Re: Génération de fichiers mesh pour Purebasic

Message par Dudule »

Je ne connais pas la version du engine3D.dll
Il s'est installé avec purebasic dans C:\Program Files\PureBasic\Compilers
J'imagine que c'est la dernière version.
Je vais essayer avec un autre mesh pris ailleurs. Où est-ce qu'on trouver des mesh tout simples ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Génération de fichiers mesh pour Purebasic

Message par djes »

Je viens de tester avec la version démo (x64), ça fonctionne pour moi... 8O
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par Ar-S »

Vous avez remarqué que #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
donne : C:\Program Files (x86)\PB5.4x\examples/3d/Screen3DRequester.pb

Les slash et antislash ça pique les yeux.

J'arrive pas non plus à charger son mesh sur mon portable.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Génération de fichiers mesh pour Purebasic

Message par comtois »

Pouvez-vous faire l'essai avec la version x86 ? Si vous avez aussi le problème, est-ce que vous pouvez essayer avec cette dll (en version x86) ?
http://herved25.free.fr/sources/Engine3D.zip

Avant de tester allez dans les options du compilateur, et choisir 'Console' pour le format de l'exécutable.
si le mesh se charge bien la console affichera :
test 1
test 2
test 3
test 4
test 5
test 6
test 7
test 8
test 9

Sinon dites moi à quel numéro l'affichage s'arrête.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre