Page 1 sur 1

Engine3D

Publié : sam. 28/mars/2009 19:35
par Jagang
Bonjour
Voila j'ai un probleme avec la fonction InitEngine3D()
J'ai essayé avec les exemple fourni dans PureBasic
Voila ce qui ce passe lorsque le programme arrive à cette fonction :
Image

Et voila les codes sources


Entity.pb :

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Entity
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY
OpenConsole()
PrintN("InitEngine3D()")
Input()
If InitEngine3D()

  Add3DArchive("Data"           , #PB_3DArchive_FileSystem)
  Add3DArchive("Data/skybox.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  PrintN("Screen3DRequester()")
  Input()
  If Screen3DRequester()
    
    LoadMesh   (0, "robot.mesh")
    PrintN("LoadMesh")
    Input()
    CreateMaterial(0, LoadTexture(0, "clouds.jpg"))
    CreateMaterial(1, LoadTexture(1, "r2skin.jpg"))
    
    CreateEntity(0, MeshID(0), MaterialID(0))
    CreateEntity(1, MeshID(0), MaterialID(1), -60, 0, 0)
    CreateEntity(2, MeshID(0), MaterialID(1),  60, 0, 0)
    
    AnimateEntity(0, "Walk")
    PrintN("AnimateEntity")
    Input()
    SkyBox("desert07.jpg")
   
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,100)
    PrintN("CameraLocate")
    Input()
    Repeat
      Screen3DEvents()
      
      ClearScreen(RGB(0, 0, 0))
            
      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 = -1
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 1
        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(1, 0, 1, 0, #PB_Relative)
      RotateEntity(2, 0, 1, 0, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, RollZ, #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
Screen3DRequester.pb :

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Common 3D functions
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

#WINDOW_Screen3DRequester = 0

#GADGET_FullScreen        = 1
#GADGET_Windowed          = 2
#GADGET_ScreenModesLabel  = 3
#GADGET_WindowedModes     = 4
#GADGET_Launch            = 5
#GADGET_Cancel            = 6
#GADGET_Logo              = 7
#GADGET_Frame             = 8
#GADGET_ScreenModes       = 9

Global Screen3DRequester_FullScreen, Screen3DRequester_ShowStats

Procedure Screen3DRequester()

  OpenPreferences("Demos3D.prefs")
    FullScreen          = ReadPreferenceLong  ("FullScreen"        , 1)
    FullScreenMode$     = ReadPreferenceString("FullScreenMode"    , "640x480")
    WindowedScreenMode$ = ReadPreferenceString("WindowedScreenMode", "512x384")


  If OpenWindow(#WINDOW_Screen3DRequester, 0, 0, 396, 205, "PureBasic - 3D Demos", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_Invisible)
    
    top = 6
    
    ImageGadget  (#GADGET_Logo, 6, top, 0, 0, LoadImage(0,"Data/PureBasicLogo.bmp"), #PB_Image_Border) : top+76
    
    Frame3DGadget(#GADGET_Frame, 6, top, 384, 80, "", 0) : top+20
    
    OptionGadget(#GADGET_FullScreen, 70, top, 100, 20, "Fullscreen") : top+25
    OptionGadget(#GADGET_Windowed  , 70, Top, 100, 20, "Windowed")   : Top-25
   
    ComboBoxGadget (#GADGET_ScreenModes  , 190, Top, 150, 21) : Top+25
    ComboBoxGadget (#GADGET_WindowedModes, 190, Top, 150, 21) : Top+45
   
    ButtonGadget (#GADGET_Launch,   6, Top, 180, 25, "Launch", #PB_Button_Default)
    ButtonGadget (#GADGET_Cancel, 200, Top, 190, 25, "Cancel")
    
    If ExamineScreenModes()
      
      While NextScreenMode()
      
        Width       = ScreenModeWidth()
        Height      = ScreenModeHeight()
        Depth       = ScreenModeDepth()
        RefreshRate = ScreenModeRefreshRate()
        
        If Depth > 8
          AddGadgetItem(#GADGET_ScreenModes, -1, Str(Width)+"x"+Str(Height)+"x"+Str(Depth)+"@"+Str(RefreshRate))
        EndIf
       
      Wend        
      
    EndIf
    
    DesktopWidth  = 1024 ; GetSystemMetrics_(#SM_CXSCREEN)
    DesktopHeight = 768  ; GetSystemMetrics_(#SM_CYSCREEN)
    NbScreenModes = 7
    
    Restore WindowedScreenDimensions

    Repeat      
      Read.l CurrentWidth
      Read.l CurrentHeight
      
      If CurrentWidth < DesktopWidth And CurrentHeight < DesktopHeight
        AddGadgetItem(#GADGET_WindowedModes, -1, Str(CurrentWidth)+ "x"+Str(CurrentHeight))
        NbScreenModes - 1
      Else
        NbScreenModes = 0
      EndIf
      
    Until NbScreenModes = 0
    
    SetGadgetState(#GADGET_FullScreen, FullScreen)
    SetGadgetState(#GADGET_Windowed  , 1-FullScreen)

    SetGadgetText (#GADGET_ScreenModes  , FullScreenMode$)
    SetGadgetText (#GADGET_WindowedModes, WindowedScreenMode$)
    
    DisableGadget (#GADGET_ScreenModes  , 1-FullScreen)
    DisableGadget (#GADGET_WindowedModes, FullScreen)
    
    HideWindow(#WINDOW_Screen3DRequester, 0)
    
    Repeat
      
      Event = WaitWindowEvent()
      
      Select Event
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
          
        Case #GADGET_Launch
          Quit = 2
          
        Case #GADGET_Cancel
          Quit = 1
          
        Case #GADGET_FullScreen
          DisableGadget(#GADGET_ScreenModes  , 0)
          DisableGadget(#GADGET_WindowedModes, 1)
        
        Case #GADGET_Windowed
          DisableGadget(#GADGET_ScreenModes  , 1)
          DisableGadget(#GADGET_WindowedModes, 0)
                 
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit = 1
        
      EndSelect
      
    Until Quit > 0
    
    FullScreen          = GetGadgetState(#GADGET_FullScreen)
    FullScreenMode$     = GetGadgetText (#GADGET_ScreenModes)
    WindowedScreenMode$ = GetGadgetText (#GADGET_WindowedModes)
    
    CloseWindow(#WINDOW_Screen3DRequester)
      
  EndIf
  
  If Quit = 2 ; Launch button has been pressed
  
    CreatePreferences("Demos3D.prefs")
      WritePreferenceLong  ("FullScreen"        , FullScreen)          
      WritePreferenceString("FullScreenMode"    , FullScreenMode$)     
      WritePreferenceString("WindowedScreenMode", WindowedScreenMode$) 

    If FullScreen
      ScreenMode$ = FullScreenMode$
    Else
      ScreenMode$ = WindowedScreenMode$
    EndIf
    
    RefreshRate = Val(StringField(ScreenMode$, 2, "@"))
    
    ScreenMode$ = StringField(ScreenMode$, 1, "@") ; Remove the refresh rate info, so we can parse it easily
    
    ScreenWidth  = Val(StringField(ScreenMode$, 1, "x"))
    ScreenHeight = Val(StringField(ScreenMode$, 2, "x"))
    ScreenDepth  = Val(StringField(ScreenMode$, 3, "x"))
    
    Screen3DRequester_FullScreen = FullScreen ; Global variable, for the Screen3DEvents
    
    If FullScreen
      SetRefreshRate(RefreshRate)
      Result = OpenScreen(ScreenWidth, ScreenHeight, ScreenDepth, "3D Demos")
    Else
      If OpenWindow(0, 0, 0, ScreenWidth, ScreenHeight+MenuHeight(), "PureBasic - 3D Demos", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      
        CreateMenu(0, WindowID(#WINDOW_Screen3DRequester))
          MenuTitle("Project")
          MenuItem(0, "Quit")
    
          MenuTitle("About")
          MenuItem(1, "About...")
              
        Result = OpenWindowedScreen(WindowID(#WINDOW_Screen3DRequester), 0, 0, ScreenWidth, ScreenHeight, 0, 0, 0)
      EndIf
    EndIf
  EndIf
     
  ProcedureReturn Result
EndProcedure


Procedure Screen3DEvents()

  If Screen3DRequester_FullScreen = 0 ; Handle all the events relatives to the window..
  
    Repeat
      Event = WindowEvent()
      
      Select Event
      
        Case #PB_Event_Menu
          Select EventMenu()
          
            Case 0
              Quit = 1
          
            Case 2
              MessageRequester("Info", "Windowed 3D in PureBasic !", 0)
              
          EndSelect
             
        Case #PB_Event_CloseWindow
          Quit = 1
        
      EndSelect
      
      If Quit = 1 : End : EndIf  ; Quit the app immediately
    Until Event = 0
    
  EndIf
  
  If ExamineKeyboard()
    If KeyboardReleased(#PB_Key_F1)
      Screen3DRequester_ShowStats = 1-Screen3DRequester_ShowStats ; Switch the ShowStats on/off
    EndIf
  EndIf
          
EndProcedure


Procedure Screen3DStats()
  If Screen3DRequester_ShowStats
    ; Nothing printed for now
  EndIf
EndProcedure

        


DataSection
  WindowedScreenDimensions:
    Data.l  320, 240
    Data.l  512, 384      
    Data.l  640, 480
    Data.l  800, 600      
    Data.l 1024, 768
    Data.l 1280, 1024
    Data.l 1600, 1200
EndDataSection
Dans le dossier /Engine3D/ il y a :
- Entity.pb
- Screen3DRequester.pb
- Engine3D.dll
- Purebasic0.exe
- Ogre.log (apparu après l'exécution du programme)

J'utilise PB V 4.30 Démo avec l'éditeur JaPBe V3
Dans les options du projet j'ai coché la case "EXE temp dans rép. source"

Voila
Merci de m'expliquer comment faire pour que ça fonctionne car j'aimerai pourvoir l'utiliser ( surtout pour Window3D)

Merci d'avance

Cordialement
Jagang

Publié : sam. 28/mars/2009 19:57
par Ollivier
Il est bon de rajouter ce bout de code en tête de programme. ça rassure le collègue qui cherche à te déboguer...

Code : Tout sélectionner

CompilerIf Subsystem("DirectX9") = 0
   MessageRequester("Mauvais options de compilation", "Ajoutez la librairie sous-système : DirectX9 !")
   End
CompilerEndIf
Qu'est-ce que ça donne comme bug avec ce bout de code en plus?

Publié : dim. 29/mars/2009 9:54
par Jagang
Ça me dit qu'il faut que j'ajoute DirectX9.
Mais dans la doc c'est écrit DirectX7.
Je vais le télécharger et réessayer.
Merci

Cordialement
Jagang