Page 3 sur 4

Publié : mar. 28/déc./2004 11:17
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é :(

Publié : mar. 28/déc./2004 12:36
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é :)

Publié : mar. 28/déc./2004 22:51
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

Publié : mer. 29/déc./2004 0:23
par comtois
je n'ai jamais testé les BSP , mais peut-être que si tu mets le tien à disposition , je pourrai faire un essai :)

Publié : sam. 01/janv./2005 15:39
par vedder
voici le pk3 ou se trouve le bsp :

http://fo3dteam1.free.fr/Programmation/Vedder/b.pk3

Publié : sam. 01/janv./2005 19:15
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 .

Publié : lun. 03/janv./2005 17:27
par vedder
merci c'est cool de ta part !!

Publié : mar. 04/janv./2005 0:22
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

Publié : mar. 04/janv./2005 17:22
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é

Publié : mar. 04/janv./2005 17:42
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...

Publié : mar. 04/janv./2005 22:21
par vedder
alors comment faire avec un fichier skeleton ?

Publié : mar. 04/janv./2005 23:10
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)

Publié : mar. 04/janv./2005 23:16
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 .

Publié : mar. 04/janv./2005 23:22
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:

Publié : mar. 04/janv./2005 23:54
par vedder
je vais quand meme essayer d'utiliser setentityanimationtime()