Illegal Memory Adress

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

martin_moehler

Betreff: Illegal Memory Adress

BeitragSa, Sep 27, 2008 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich schreibe momentan ein Mapeditor. Ich kann momentan ein Terrain laden, Meshes laden und diese texturieren. Wenn ich das Terrain geladen habe und mich dann bewege (rechte Maustaste gedrückt halten um die Kamera zu drehen und und mit w a s d die Kamera bewegen) kommt es oft zu der im Titel genannten Fehlermeldung. Allerdings auch nicht immer und nicht immer an der gleichen Stelle. Wenn ich nur ein Mesh geladen habe passiert das nicht.

Den Quelltext zu posten wäre sinnlos, denn ich denke nicht, dass ihr Lust habt euch in so viel Text einzulesen. Ich würde mich freuen wenn ihr ein paar Vorschläge hättet wie ich das Problem finden und lösen könnte, da der Debugger nichts brauchbares liefert.

Mit freundlichen Grüßen

Martin
 

da_poller

BeitragSa, Sep 27, 2008 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
eine zeile an der der debugger meldet und den umliegenden code(funktion) wäre evlt hilfreich
 

martin_moehler

BeitragSo, Sep 28, 2008 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler kommt beim Rendern. Dazu zu sagen ist vieleicht noch, dass ich GUI (BlitzUI) benutze. Ich kann sie aber nicht ausschalten um zu überprüfen ob es an ihr liegt, da ich sie benötige um das Terrain zu laden.
Danke für alle Antworten!


Code: [AUSKLAPPEN]

FlushMouse()
While Not KeyHit(1)

; Für das mehrmalige Abfragen der Maustasten
   MouseDown1    = MouseDown(1)
   MouseDown2   = MouseDown(2)
   MouseHit1   = MouseHit(1)
   MouseHit2   = MouseHit(2)

; ------------------------------------------
; ------------- Kamerabewegung -------------
; ------------------------------------------
   If MouseDown2 And MenuOpen = 0
      XSpeed# = MouseXSpeed()
      YSpeed# = MouseYSpeed()
      TurnEntity cam_x, 0, -(XSpeed# / 3 ), 0       
      TurnEntity cam_y, (YSpeed#  / 3), 0 , 0
   EndIf
   
   If MenuOpen = 0
      If KeyDown (31) MoveEntity cam_y,0,0,-.5
      If KeyDown (17) MoveEntity cam_y,0,0,.5
      If KeyDown (30) MoveEntity cam_y,-.5,0,0
      If KeyDown (32) MoveEntity cam_y,.5,0,0
   End If
   
; Dieser Trick ist notwendig um die Kamerafahrt benutzerfreundlicher zu machen!! =)
   EntityParent cam_y,0   
      PositionEntity cam_x,EntityX(cam_y),EntityY(cam_y),EntityZ(cam_y)
   EntityParent cam_y,cam_x
   
; ------------------------------------------
; ---------- Objekte verschieben -----------
; ------------------------------------------
   If mesh And terrain
      
      If KeyDown (208) MoveEntity mesh,0,0,-.5
      If KeyDown (200) MoveEntity mesh,0,0,.5
      If KeyDown (203) MoveEntity mesh,-.5,0,0
      If KeyDown (205) MoveEntity mesh,.5,0,0
      If SetOnTop = 1 Then PositionEntity mesh,EntityX(mesh),TerrainY(terrain ,EntityX(mesh),0,EntityZ(mesh)),EntityZ(mesh)   
      
      SendMessage(txtMeshX,"TM_SETTEXT",Str(EntityX(mesh)))
      SendMessage(txtMeshY,"TM_SETTEXT",Str(EntityY(mesh)))
      SendMessage(txtMeshZ,"TM_SETTEXT",Str(EntityZ(mesh)))
   End If
   
; ------------------------------------------
; ------------ Objekte anwählen ------------
; ------------------------------------------
   If KeyDown(29) Or KeyDown(157)
   
      CamPic   = CameraPick(camMain,MouseX(),MouseY())
      
      
      If MouseHit1 Or MouseHit2
         If mesh EntityColor mesh,255,255,255
         Mesh=CamPic
         If Mesh
            EntityColor mesh,0,255,0
      
      ; Überprüfen welches Obj ausgewählt ist und dessen Werte an die Sidebar übergeben
            For i = 0 To MeshCount
               If Mesh = Meshes(i,0)
                  MeshID=i
               End If
            Next
            
            SendMessage(scbMeshScle,"SM_SETVALUE",Meshes(MeshID,1))
            SendMessage(lblMeshScle,"LM_SETTEXT","Objekt Scalierung: "+ (ScaleCalc(Meshes(MeshID,1))+"%"))
            
            SendMessage(txtMeshX,"TM_SETTEXT",""+EntityX(Meshes(MeshID,0)))
            SendMessage(txtMeshY,"TM_SETTEXT",""+EntityY(Meshes(MeshID,0)))
            SendMessage(txtMeshZ,"TM_SETTEXT",""+EntityZ(Meshes(MeshID,0)))
            
         Else
            SendMessage(winPopUp,"WM_MINIMISE")
            MenuOpen=0
         End If
      EndIf
      
; ------------------------------------------
; --------------- PopUp-Menu ---------------
; ------------------------------------------
      
      If MouseHit2 And CamPic <> 0
         SendMessage(winPopUp,"WM_MAXIMISE")
         SendMessage(winPopUp,"WM_SETPOS",MouseX(),MouseY())
         SendMessage(mnuPopUp,"MM_OPEN")
         MenuOpen = 1
      End If
   End If
      
      
   
; ------------------------------------------
; --------------- GUI-Events ---------------
; ------------------------------------------
   Cls
        RenderWorld

   UpdateGUI()
   Select app\Event
      Case EVENT_MENU
         Select app\MenuEvent
            Case mnuMesh
               mnuMesh_Open
            Case mnuTerr
               mnuTerr_Open
            Case mnuExit
               mnuExit_Open
            Case mnuWreFrm
               mnuWreFrm_Open
            Case mnuPosY
               mnuPosY_Open
            Case mnuPopUpTex
               MenuOpen = 0
               mnuPopUpTex_Open
            Case mnuPopUpDel
               MenuOpen = 0
            Case mnuAlpha
               mnuAlpha
         End Select
      Case EVENT_GADGET
         Select app\GadgetEvent
            Case scbMeshScle
               ScaleMeshes
            Case cmdTex
               TexGive
            Case cmdLoad
               TexLoad
            Case cmdDel
               TexDelete
            Case cmdOK
               TexOK
            Case cmdCancel
               TexCancel
            Case cmbTex
               TexCmbClick
            Case lstTex
               TexLstClick
         End Select            
   End Select   

; Das PopUp-Menu wieder schließen und die Variablen anpassen
   If MouseHit1 And MenuOpen = 0
      SendMessage(winPopUp,"WM_MINIMISE")
   End If   
   
   UpdateWorld
   
   DrawMouse()
   ResetEvents()
   
   Flip
Wend
 

Dreamora

BeitragSo, Sep 28, 2008 2:26
Antworten mit Zitat
Benutzer-Profile anzeigen
so ein fehler beim rendern kommt normalerweise daher das man
1. entweder mehr triangles / vertices auf einem mesh hat als man haben kann (65535 auf neueren karten. GeForce 2 / GF4 MX haben ein maximum von 32768 triangles)

2. man mehr texturespeicher im viewfrustrum (sichtbereich, egal ob verdeckt oder nicht) braucht, als die grafikkarte grafikspeicher hat
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

martin_moehler

BeitragSo, Sep 28, 2008 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke für die Antwort! Da meine Grafikkarte tatsächlich etwas alt ist, probiere ich mich mal ein bisschen an TerrainDetail =)
Außerdem werde ich es mal an anderen, neueren PC`s testen um deine Lösung zu bestätigen.

Ich melde mich dann wieder.
Gruß Martin

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group