Erreur pour chargement de mesh

Programmation avancée de jeux en PureBasic
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

ton exe est vraiment super mais j'ai un pb
je convertit avec ton exe , je lel lance donc je vois bien mon mesh tourner , je quitte l'appli, ca me cree un mesh que j'utilise dans mon programme , mais a cette ligne :

Code : Tout sélectionner

CreateEntity(0, MeshID(0), MaterialID(1), 300, 0, 300
le debugger me dit que le mesh n'est pas initialisé et j'ai fait un test avec debug , il m'indique que le fichier n'est pas chargé :(
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

est-ce que tu as regardé le programme exemple avec ton savant ?

pour l'instant , je ne sais pas faire un fichier mesh directement utilisable avec Loadmesh() ( faudrait que je me renseigne sur le format ).
Je me contente de mettre les données du mesh dans des datas ,et d'utiliser la commande SetMeshData.

pour l'instant ,je fais ça

Code : Tout sélectionner


;/Mesh 
;Data.l 3309 ; Nombre de Points
;Data.l 3309 ; Nombre de Normales
;Data.l 4089 ; Nombre de Triangles
CreateMesh(NoMesh) 
SetMeshData(NoMesh,#PB_Mesh_Vertices     , ?Points          , 3309) 
SetMeshData(NoMesh,#PB_Mesh_Triangles    , ?Triangles      , 4089) 
SetMeshData(NoMesh,#PB_Mesh_UVCoordinates, ?Textures  , 3309) 
SetMeshData(NoMesh,#PB_Mesh_Normals      , ?Normales     , 3309) 
XIncludeFile "savant.mesh" ;<<c'est les datas
J'essaierai de l'améliorer à l'occasion mais c'est pas ma priorité :)
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

cool ca marche tres bien comme ca merci !!!
j'essaie pour le moment d'integrer un mesh dans un bsp avec un loader que j'ai fait mais je crois que j'ai un probleme , j'ai melanger mon loader de bsp avec ton code et ca me charge le bsp mais je vois pas le mesh

Code : Tout sélectionner

#PlayerSpeed = 20
#Speed=20
; Includes
IncludeFile "Screen3DRequester.pb"

DefType.f KeyX, KeyY, MouseX, MouseY

; Eumeration des constantes
Enumeration
#Entity
#Mesh
#Material
EndEnumeration

       
If InitEngine3D() ; Initialisation du moteur 3d

 
  ; Initialisation
  InitKeyboard()
  InitMouse()
  InitSprite() 

  If Screen3DRequester()
    
    Restore Entete
    Read NbPoints
    Read NbNormales
    Read Nbtriangles
    CreateMesh(0) 
    SetMeshData(0,#PB_Mesh_Vertices     , ?Points       , NbPoints) 
    SetMeshData(0,#PB_Mesh_Triangles    , ?Triangles    , Nbtriangles) 
    SetMeshData(0,#PB_Mesh_UVCoordinates, ?Textures     , NbPoints) 
    SetMeshData(0,#PB_Mesh_Normals      , ?Normales     , NbNormales) 
    
    ;- Textures
    ;Indispensable pour l'image en jpg  
    UseJPEGImageDecoder()
    LoadImage(0,"savant.jpg") 
    ;/je recopie l'image dans la texture pour l'inverser , ça serait plus simple en enregistrant l'image inversée :)
    ;/Il suffirait alors de faire un simple LoadTexture(0,"Savant.jpg")
    CreateTexture(0,ImageWidth(),ImageHeight()) 
    StartDrawing(TextureOutput(0))
    DrawImage(UseImage(0),0,0)
    StopDrawing()
    
    CreateMaterial(1, TextureID(0)) 
    CreateEntity(0, MeshID(0), MaterialID(1), 100, 0, 0)  
              
    CreateLight(0, RGB(255,255,255), 100.0, 0, 0) 
    CreateLight(1, RGB(255,255,255), -100.0, 0, 0) 
    
    Base$ = OpenFileRequester("Select .pk3 file", "Pak0.pk3", "*.pk3|*.pk3", 0)
    If Base$ = "" : End : EndIf
      
    Add3DArchive(Base$, #PB_3DArchive_Zip)
    Add3DArchive("textures\"    , #PB_3DArchive_FileSystem)
    Add3DArchive("b.zip", #PB_3DArchive_Zip)    ; Ajoute le .zip comme un répertoire possible
    Add3DArchive("bouche\"    , #PB_3DArchive_FileSystem)
    Add3DArchive("Data\"    , #PB_3DArchive_FileSystem)
    
  
    ; Chargement du bsp
    If LoadWorld("b.bsp")
    
      
      CreateCamera(0, 0, 0, 100, 100)
      ;Fog(RGB(237,69,27), 1, 100, 1000) 
      CameraLocate(0,0,50,200) 
      CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))  

      RotateCamera(0, -90, 0, 0)
      MoveCamera(0, -50 , 0,500)
      
      Repeat
        
      Screen3DEvents()
      If ExamineKeyboard() 
      
        If KeyboardPushed(#PB_Key_Left) 
          KeyX = -1 
        ElseIf KeyboardPushed(#PB_Key_Right) 
          KeyX = 1 
        Else 
          KeyX = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_Up) 
          KeyY = -#Speed 
        ElseIf KeyboardPushed(#PB_Key_Down) 
          KeyY = #Speed 
        Else 
          KeyY = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_PageUp) 
          RollZ = 3 
        Else 
          RollZ = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_Add) 
          Frame.f+0.005 
        EndIf 
        
      EndIf 
      
      If ExamineMouse() 
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10 
      EndIf 
        
        RotateEntity(0,0.5,0,0) 
        RotateCamera(0, MouseX, MouseY, 0)
        MoveCamera(0, KeyX, 0, KeyY)
      
        RenderWorld()
        
        FlipBuffers()
        
      Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
                  
       Else
      MessageRequester("Error", "Can't load the level", 0)
    EndIf
        
  EndIf
EndIf

XIncludeFile "savant.mesh"

; ExecutableFormat=Windows
; CursorPosition=64
; FirstLine=26
; Executable=C:\Ogre\Ogre_Windowed.exe
; EOF
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je n'ai jamais testé les BSP , mais peut-être que si tu mets le tien à disposition , je pourrai faire un essai :)
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

voici le pk3 ou se trouve le bsp :

http://fo3dteam1.free.fr/Programmation/Vedder/b.pk3
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je viens de télécharger ton fichier , je regarderai quand j'aurai un peu de temps .
j'ai quand même fait un essai rapide , le BSP se charge bien ,.
ça m'intéresse de voir ce que ça donne avec une entity dedans , je ferai des essais sûrement demain , ou dans le courant de la semaine .
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

merci c'est cool de ta part !!
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

c'est bon je viens de trouver !!! c'etait juste un probleme de camera voici le bon code :

Code : Tout sélectionner

#PlayerSpeed = 50
#Speed=50
; Includes
IncludeFile "Screen3DRequester.pb"

DefType.f KeyX, KeyY, MouseX, MouseY

; Eumeration des constantes
Enumeration
#Entity
#Mesh
#Material
EndEnumeration

       
If InitEngine3D() ; Initialisation du moteur 3d

 
  ; Initialisation
  InitKeyboard()
  InitMouse()
  InitSprite() 

  If Screen3DRequester()
    Base$ = OpenFileRequester("Select .pk3 file", "Pak0.pk3", "*.pk3|*.pk3", 0)
    If Base$ = "" : End : EndIf
      
    Add3DArchive(Base$, #PB_3DArchive_Zip)
    Add3DArchive("textures\"    , #PB_3DArchive_FileSystem)
    Add3DArchive("b.zip", #PB_3DArchive_Zip)    ; Ajoute le .zip comme un répertoire possible
    Add3DArchive("bouche\"    , #PB_3DArchive_FileSystem)
    Add3DArchive("Data\"    , #PB_3DArchive_FileSystem)

    ; Chargement du bsp
    If LoadWorld("b.bsp")
    
    Restore Entete
    Read NbPoints
    Read NbNormales
    Read Nbtriangles
    CreateMesh(0) 
    SetMeshData(0,#PB_Mesh_Vertices     , ?Points       , NbPoints) 
    SetMeshData(0,#PB_Mesh_Triangles    , ?Triangles    , Nbtriangles) 
    SetMeshData(0,#PB_Mesh_UVCoordinates, ?Textures     , NbPoints) 
    SetMeshData(0,#PB_Mesh_Normals      , ?Normales     , NbNormales) 
    
    ;- Textures
    ;Indispensable pour l'image en jpg  
    UseJPEGImageDecoder()
    LoadImage(0,"savant.jpg") 
    ;/je recopie l'image dans la texture pour l'inverser , ça serait plus simple en enregistrant l'image inversée :)
    ;/Il suffirait alors de faire un simple LoadTexture(0,"Savant.jpg")
    CreateTexture(0,ImageWidth(),ImageHeight()) 
    StartDrawing(TextureOutput(0))
    DrawImage(UseImage(0),0,0)
    StopDrawing()
    
    CreateMaterial(1, TextureID(0)) 
    CreateEntity(0, MeshID(0), MaterialID(1), 100, 0, 0)  
    RotateEntity(0, 0, 90, 0) 
    MoveEntity(0,-300,100,35)         
    CreateLight(0, RGB(255,255,255), 100.0, 0, 0) 
    CreateLight(1, RGB(255,255,255), -100.0, 0, 0) 
    
    ;CreateCamera(0, 0, 0, 100, 100) 
    ;CameraLocate(0,0,50,200) 
    ;CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))  

       CreateCamera(0, 0, 0, 100, 100)
     ;Fog(RGB(237,69,27), 1, 100, 1000) 
     
      RotateCamera(0, -90, 0, 0)
      MoveCamera(0, -50 , 50,500)
      
      Repeat
        
      Screen3DEvents()
      If ExamineKeyboard() 
      
        If KeyboardPushed(#PB_Key_Left) 
          KeyX = -1 
        ElseIf KeyboardPushed(#PB_Key_Right) 
          KeyX = 1 
        Else 
          KeyX = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_Up) 
          KeyY = -#Speed 
        ElseIf KeyboardPushed(#PB_Key_Down) 
          KeyY = #Speed 
        Else 
          KeyY = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_PageUp) 
          RollZ = 3 
        Else 
          RollZ = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_Add) 
          Frame.f+0.005 
        EndIf 
        
      EndIf 
      
      If ExamineMouse() 
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10 
      EndIf 
        
        ;RotateEntity(0,0.5,0,0) 
        RotateCamera(0, MouseX, MouseY, 0)
        MoveCamera(0, KeyX, 0, KeyY)
      
        RenderWorld()
        
        FlipBuffers()
        
      Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
                  
       Else
      MessageRequester("Error", "Can't load the level", 0)
    EndIf
        
  EndIf
EndIf

XIncludeFile "savant.mesh"

; ExecutableFormat=Windows
; CursorPosition=64
; FirstLine=26
; Executable=C:\Ogre\Ogre_Windowed.exe
; EOF
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

sinon j'aurais voulu savoir connaitre le fonctionnement d'une animation en pure , car je voudrais loader un fichier BIP. peut etre avec un animateentity c'est pour animer mon entité
Pacificator
Messages : 43
Inscription : mer. 15/déc./2004 16:28

Message par Pacificator »

les fichiers bip sont pas pris en charge...
il faut utiliser les fichiers skelleton (générable avec l'exporteur d'ogre, et Xmlconverter)
et ya un probleme avec animateentity(), enfin, tu verra...
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

alors comment faire avec un fichier skeleton ?
Pacificator
Messages : 43
Inscription : mer. 15/déc./2004 16:28

Message par Pacificator »

ya rien a faire en fait, il suffit de mettre ton fichier skeleton dans le même répertoire que ta mesh, et le .skeleton doit avoir le même nom que la mesh...
Dans l'exporteur, tu peux donner des noms aux différentes animations du skeleton, pour pouvoir ensuite utiliser animateentity.
Sinon, tu peux aussi utiliser la commande SetEntityAnimationTime(), pour changer la position manuellement (ce que je te conseille de faire car animateentity fonctionne pas tres bien)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Pacificator a écrit :Sinon, tu peux aussi utiliser la commande SetEntityAnimationTime(), pour changer la position manuellement (ce que je te conseille de faire car animateentity fonctionne pas tres bien)
tu arrives à utiliser SetEntityAnimationTime() toi ?
tu aurais un exemple avec le robot de pb ?

pour moi cette commande reste un mystère :P
j'ai essayé quelques trucs mais en vain.


@Vedder ; tu as réussi ? cool , je testerai ton code ce week-end . Je voulais essayer en mettant le robot dans le BSP .
Pacificator
Messages : 43
Inscription : mer. 15/déc./2004 16:28

Message par Pacificator »

non, jamais testé cette commande LOL
elle marche pas non plus ? :lol:
Décidemment, ya rien ki marche!
Vedder t'es pas dans la merde pour animer ton savant :roll:
vedder
Messages : 20
Inscription : dim. 05/déc./2004 23:04

Message par vedder »

je vais quand meme essayer d'utiliser setentityanimationtime()
Répondre