Page 1 sur 2

Erreur : Invalid memory Access (read error at adress 0)

Publié : dim. 01/mars/2009 18:01
par Zelfu
Bonjour, depuis quelques jours, j'essaye les fonctions de Purebasic, et je suis tombé sur la fonction suivante : LoadTexture(), et SkyBox(), je les ais utilisés, et une erreur que je ne comprends pas apparait : Invalid memory access ( read error at adress 0) . Je ne trouve pas de solution, et je me suis tourné vers ce forum.

Code : Tout sélectionner

InitEngine3D()
InitSprite()
OpenWindow(0, 0, 0, 320, 320, "Texture", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenScreen(256, 256, 8, "Texture")
  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
LoadTexture(1, "clouds.jpeg") ; l'erreur est là
SkyBox("clouds.jpeg")
  Repeat
    Event = WaitWindowEvent()
    
  Until Event = #PB_Event_CloseWindow

Publié : dim. 01/mars/2009 18:49
par tmyke
Cela ne sera pas plutôt clouds.jpg au lieu de clouds.jpeg des fois ?

Publié : dim. 01/mars/2009 18:49
par Zelfu
je change, mais ça ne change rien, toujours la même erreur.

Publié : dim. 01/mars/2009 18:53
par comtois
Pour la 3D sous windows, il faut utiliser le sous-système directx9, sous linux c'est opengl.

Tu vas dans le menu 'compilateur' puis 'options du compilateur'
et tu verras un champ 'bibliothèque du sous-système' tu n'as plus qu'à taper directx9

Publié : dim. 01/mars/2009 18:59
par comtois
et c'est OpenWindowedScreen() si tu veux une fenêtre, et pas OpenScreen()
Ce code fonctionne

Code : Tout sélectionner

InitEngine3D()
InitSprite()
OpenWindow(0, 0, 0, 320, 320, "Texture", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0, 256, 256, 0,0,0)
Add3DArchive("Data"          , #PB_3DArchive_FileSystem)
LoadTexture(1, "clouds.jpg") ; l'erreur est là
SkyBox("clouds.jpeg")
Repeat
   Event = WaitWindowEvent()
   
Until Event = #PB_Event_CloseWindow

Publié : dim. 01/mars/2009 18:59
par Zelfu
Quand je le fais, pendant la compilation, j'ai un message d'erreur :
The following subsystem cannot be found: directx9
Edit à Comtois : j'ai la même erreur, après

Publié : dim. 01/mars/2009 18:59
par comtois
tu as quelle version ?
regarde dans ton répertoire purebasic, tu dois voir un sous répertoire qui se nomme SubSystems et dans ce répertoire tu dois voir le répertoire Directx9 et d'autres comme OpenGL ...

Publié : dim. 01/mars/2009 19:01
par Zelfu
dans Subsystem, j'ai un fichier opengl, et un autre nommé NT4.

Publié : dim. 01/mars/2009 19:15
par Zelfu
Nouveau : La fenêtre s'affiche, mais elle est remplie de noir, je ne vois pas de cube.

Publié : dim. 01/mars/2009 21:26
par Ollivier
Comtois a écrit :ce code fonctionne
Non! Le chemin est incomplet. + Pas d'images avec les suffixes adéquats (BK, FR, etc...)
Le week-end est parfois dur. Bon courage pour la semaine!
Comtois a écrit :tu as quelle version ?
@Zelfu

Mes hommages du jour! Bienvenu!

Je te repose la même question! Est-ce que tu pourrais préciser la version que tu as?
Zelfu a écrit :dans Subsystem, j'ai un fichier opengl, et un autre nommé NT4.
Moi j'ai TROIS répertoires : OpenGL, NT4 et DirectX9
Est-ce que tu as ces 3 répertoires aussi? Tu n'as pas posté de réponse formelle à ce sujet.

Voilà, si tu réponds aux questions posées, ça est un tout petit peu plus facile de cerner le problème, pour toi comme pour les futures personnes à utiliser Ogre sous Windows! :D

Il faut SIX fichiers image (Cf >> Documentation de SkyBox() )

Teste ce code qui (logiquement, et je l'espère grandement...) fonctionne:
(Si des questions te viennent sur ce code, c'est sans problème pour y répondre. Aussi n'hésite pas à répondre pour dire si ça marche, si ça marche pas, etc...)

Woilà! Tschuess!

Code : Tout sélectionner

Dim SkySfx$(5)
SkySfx$(0) = "FR"
SkySfx$(1) = "BK"
SkySfx$(2) = "UP"
SkySfx$(3) = "DN"
SkySfx$(4) = "LF"
SkySfx$(5) = "RT"

Procedure Err(Mess.S)
MessageRequester("Erreur", "Problème avec " + Mess)
EndProcedure

Chemin$ = "examples\sources\Data"
MessageRequester("Attention!", "Il ne faut pas oublier de préciser «directx9» dans la bibliothèque sous-système des options du compilateur! Sinon ça ne marche pas!")
If InitEngine3D() 
   If InitSprite() 
      InitKeyboard()
      If OpenWindow(0, 0, 0, 320, 320, "Touches GAUCHE et DROITE !!!", #PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
         If OpenWindowedScreen(WindowID(0),0,0, 256, 256, 0,0,0) 
            If Add3DArchive(Chemin$, #PB_3DArchive_FileSystem) 
               For I = 0 To 5
                  CopyFile(Chemin$ + "clouds.jpg", Chemin$ + "clouds_" + SkySfx$(I) + ".jpg")
               Next I
               If SkyBox("clouds.jpg") 
                  If CreateCamera(0, 0, 0, 256, 256)
                     Repeat 
                        FlipBuffers()
                        ExamineKeyboard()
                        If KeyboardPushed(#PB_Key_Left)
                           RotateCamera(0, 0, 4, 0, #PB_Relative)
                        EndIf
                        If KeyboardPushed(#PB_Key_Right)
                           RotateCamera(0, 0, -4, 0, #PB_Relative)
                        EndIf
                        RenderWorld()
                        Event = WindowEvent()  
                        Delay(25)
                     Until Event = #PB_Event_CloseWindow
                  Else
                     Err("CreateCamera()")
                  EndIf
               Else
                  Err("SkyBox()")
               EndIf
            Else
               Err("Add3DArchive()")
            EndIf
         Else
            Err("OpenWindowedScreen()")
         EndIf
      Else
         Err("OpenWindow()")
      EndIf
   Else
      Err("InitSprite()")
   EndIf
Else
   Err("InitEngine3D()")
EndIf

Publié : lun. 02/mars/2009 14:38
par comtois
Ollivier a écrit :
Comtois a écrit :ce code fonctionne
Non! Le chemin est incomplet. + Pas d'images avec les suffixes adéquats (BK, FR, etc...)
Le week-end est parfois dur. Bon courage pour la semaine!
Je voulais surtout lui montrer qu'avec le code que j'ai posté, je n'avais pas d'erreur IMA .

Zelfu, elle est bizarre ta version si tu n'as pas le sous répertoire DirectX9 !!

Ensuite, est-ce que tu as testé les exemples 3D dans le répertoires examples/sources de PureBasic ?

Avant de commencer à écrire un code, regarde les exemples, amuse toi à les modifier pour comprendre.

Publié : lun. 02/mars/2009 19:37
par Zelfu
Oui, justement, je comprends pas pourquoi ça fonctionne dans les exemples , mais pas dans mon code. Bref, sinon, le problème est le même avec skydome(). Rien. Un ecran noir.

@Olivier : oui, j'ai seulement 2 fichiers dans le répertoire subsystems.
J'ai la version 9.0 de directX (merci dxdiag).
J'ai testé ton code, et voici le problème :
Constant not found : #PB_Relative(line 30)

Merci de votre aide.

Publié : lun. 02/mars/2009 19:54
par comtois
Tu l'as récupéré où ta version de PureBasic ?

Publié : lun. 02/mars/2009 19:58
par Ollivier
@Zelfu

Mais es-tu sous logiciel de démonstration ou bien sous license?

Publié : mar. 03/mars/2009 17:22
par Zelfu
ma version est la 4.10