Dans une application d'édition de scéne(s), je charge des meshs manuellement et je les dispose ou je veux sur le grid d’édition.
Ces meshes ne sont pas référencés au lancement de l'application.
Le souci est que si le mesh est bien pris en compte lors du LoadMesh(), les dépendances associés par contre ne sont pas pris en compte.
En pratique : Add3DArchive() fonctionne correctement mais pas Parse3DScripts().
Code : Tout sélectionner
EnableExplicit
Global Camera, Mesh, Entity, NewMap Archive3D()
Declare SelectMesh()
InitEngine3D(#PB_Engine3D_DebugLog)
InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, 1024, 768, "Basic Scene", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768, 0, 0, 0)
; Archive par defaut dans mon application
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Water/", #PB_3DArchive_FileSystem)
;Decommentez les ligne suivantes pour voir apparaitre les materials des meshes
;Add3DArchive(GetCurrentDirectory() + "assets\models\sinbad\", #PB_3DArchive_FileSystem)
;Add3DArchive(GetCurrentDirectory() + "assets\models\LibertyStatue\", #PB_3DArchive_FileSystem)
;Add3DArchive(GetCurrentDirectory() + "assets\models\Skull\", #PB_3DArchive_FileSystem)
Parse3DScripts()
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
CameraBackColor(Camera, RGB(128, 128, 128))
MoveCamera(Camera, 0, 50, 50)
CameraLookAt(Camera, 0, 0, 0)
CreateLight(#PB_Any, RGB(255, 255, 255), 1000, 1000, -500)
WorldShadows(#PB_Shadow_Modulative, 1024, RGB(150, 150, 150))
Repeat
ExamineKeyboard()
If KeyboardReleased(#PB_Key_F3)
SelectMesh()
EndIf
RenderWorld()
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape)
Procedure SelectMesh()
Protected fileName.s
Protected filePath.s
fileName.s = OpenFileRequester("Select mesh ...", "assets\models\*.mesh", "Ogre3D (mesh)|*.mesh", 0)
filePath = GetPathPart(filename)
If FileName <> ""
If Not FindMapElement(Archive3D(), filePath)
AddMapElement(Archive3D(), filePath)
Add3DArchive(filePath, #PB_3DArchive_FileSystem) ; Fonctionne
Parse3DScripts() ; fonctionne pas
EndIf
If IsEntity(Entity)
FreeEntity(Entity)
EndIf
Mesh = LoadMesh(#PB_Any, GetFilePart(FileName))
Entity = CreateEntity(#PB_Any, MeshID(Mesh), #PB_Material_None, 0, -10, 0)
RotateEntity(Entity, 270, 35, 0)
EndIf
EndProcedure
Download : Sources + Assets - 10 mo
http://falsam.com/Download/purebasic/testparse.zip