[Résolu] Génération de fichiers mesh pour Purebasic
[Résolu] Génération de fichiers mesh pour Purebasic
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.
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.
Re: Génération de fichiers mesh pour Purebasic
Ce serait sympa que tu inclues ton code dans l'archive, que nous n'ayons qu'un minimum de manips à faire... Merci !
Re: Génération de fichiers mesh pour Purebasic
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)
Et j'obtiens ceci
Pour voir ton mesh, dans l'exemple camera.pb j'ai ajouté
Et dans la boucle
Code : Tout sélectionner
If InitEngine3D(#PB_Engine3D_DebugLog)
Conclusion, ton mesh est bien chargé, il n'y a pas d'erreur.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.
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)
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Re: Génération de fichiers mesh pour Purebasic
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 !
Merci !
Re: Génération de fichiers mesh pour Purebasic
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 :
Comprends pas...
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
Re: Génération de fichiers mesh pour Purebasic
C'est curieux, ton code fonctionne bien chez moi.
Affiche ton fichier log complet, ça peut aider.
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
- Bill Gates
- Messages : 14
- Inscription : lun. 19/juil./2010 19:17
Re: Génération de fichiers mesh pour Purebasic
Hi, you forget Parse3DScript() after Add3dArchive() function ?
Re: Génération de fichiers mesh pour Purebasic
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 ?
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
Re: Génération de fichiers mesh pour Purebasic
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.Comtois a écrit :Quelle fenêtre ?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 ?
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Re: Génération de fichiers mesh pour Purebasic
Non, y'a rien à faire, pas moyen de charger mon fichu plane.mesh
Le log de PureBasic ne donne rien :
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à...
Le log de PureBasic ne donne rien :
Par contre, j'ai un fichier log d'OGRE dans mon dossier qui me dit :[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.
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.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)
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à...
Re: Génération de fichiers mesh pour Purebasic
C'est curieux ce message, fais une recherche sur le fichier engine3D.dll ,est-ce que tu utilises le bon ?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)
Parse3DScripts() fonctionne aussi avec la version démo, mais c'est vrai que ça ne vient pas de là.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à...
si tu ne mets pas le parsescript() tu as ce message
Mais ça n'empêche pas de charger le mesh.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?
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Re: Génération de fichiers mesh pour Purebasic
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 ?
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 ?
Re: Génération de fichiers mesh pour Purebasic
Je viens de tester avec la version démo (x64), ça fonctionne pour moi...
Re: Génération de fichiers mesh pour Purebasic
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.
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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Génération de fichiers mesh pour Purebasic
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://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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.