Overflow sperre bei rekursiven Funktionen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Joel

Betreff: Overflow sperre bei rekursiven Funktionen?

BeitragDi, Mai 10, 2011 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Da ich Xors3D mal richtig schön ausnutzen wollte, habe ich eines meiner Fraktal Programme - nämlich Koch Kurve 3D- kurzerhand in Xors umgesetzt.

Jetzt macht sich ein Problem bemerkbar:
Es tut nicht mehr das ganze Fraktal rendern
Gibt es eine "Overflow sperre" in BlitzBasic?
Code: [AUSKLAPPEN]
Include "xors3d.bb"

xGraphics3D 800,600,32,False,True
Global Timer=CreateTimer(60)

Global Camera=xCreateCamera()
xPositionEntity Camera,-100,-50,-100


Local Light=xCreateLight(2)
xPositionEntity(Light,1000,-243,364.5)

Global KochMesh=xCreateMesh()
Global surface=xCreateSurface(KochMesh)
xCameraRange Camera,0.1,1000




KochKurve3D(0,5,364.5,-121.5,364.5);bei 4 iterationen klaps bestens während bei 5 nurnoch teilwiese gerendert wird
xUpdateNormals(KochMesh)

While Not xKeyHit(1)
   
   xMoveEntity Camera,xKeyDown(205)*2-xKeyDown(203)*2,0,xKeyDown(200)*2-xKeyDown(208)*2
   xTurnEntity Camera,xMouseYSpeed(),-xMouseXSpeed(),0
   
   xMoveMouse 100,100
   
   
   
   WaitTimer Timer
   xRenderWorld
   xText 0,0,"Vertices: "+xCountVertices(surface)
   xText 0,15,"Tris auf mesh: "+xCountTriangles(surface)
   xText 0,30,"Tris Rendered: "+xTrisRendered()
   xFlip
Wend
End

Function KochKurve3D(ae,me,x#,y#,z#,top=1,kante#=243);top 0=x,1=y,2=z;3=-x,4=-y,5=-z
   If ae<me
      AddCube(x,y,z,kante,top)
      
      ae=ae+1
      
      Select top
         Case 0
            KochKurve3D(ae,me,x+kante/3,y-kante,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y+kante,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y+kante,z,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y+kante,z+kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y,z+kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y-kante,z+kante,top,kante/3)
            KochKurve3D(ae,me,x+kante/3,y-kante,z,top,kante/3)
            
            KochKurve3D(ae,me,x-kante/3*2,y,z,top,kante/3)
            
            KochKurve3D(ae,me,x,y-kante/3*2,z,1,kante/3)
            KochKurve3D(ae,me,x,y+kante/3*2,z,4,kante/3)
            
            KochKurve3D(ae,me,x,y,z-kante/3*2,2,kante/3)
            KochKurve3D(ae,me,x,y,z+kante/3*2,5,kante/3)
            
         Case 1
            KochKurve3D(ae,me,x-kante,y+kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x,y+kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante,y+kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante,y+kante/3,z,top,kante/3)
            KochKurve3D(ae,me,x+kante,y+kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x,y+kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante,y+kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante,y+kante/3,z,top,kante/3)
            
            KochKurve3D(ae,me,x,y-kante/3*2,z,top,kante/3)
            
            KochKurve3D(ae,me,x-kante/3*2,y,z,0,kante/3)
            KochKurve3D(ae,me,x+kante/3*2,y,z,3,kante/3)
            
            KochKurve3D(ae,me,x,y,z-kante/3*2,2,kante/3)
            KochKurve3D(ae,me,x,y,z+kante/3*2,5,kante/3)
            
         Case 2
            KochKurve3D(ae,me,x-kante,y-kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x,y-kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y-kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y+kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x,y+kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x-kante,y+kante,z+kante/3,top,kante/3)
            KochKurve3D(ae,me,x-kante,y,z+kante/3,top,kante/3)
            
            KochKurve3D(ae,me,x,y,z-kante/3*2,top,kante/3)
            
            KochKurve3D(ae,me,x-kante/3*2,y,z,0,kante/3)
            KochKurve3D(ae,me,x+kante/3*2,y,z,3,kante/3)
            
            KochKurve3D(ae,me,x,y-kante/3*2,z,1,kante/3)
            KochKurve3D(ae,me,x,y+kante/3*2,z,4,kante/3)
            
         Case 3
            KochKurve3D(ae,me,x-kante/3,y-kante,z-kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y,z-kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y+kante,z-kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y+kante,z,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y+kante,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y-kante,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante/3,y-kante,z,top,kante/3)
            
            KochKurve3D(ae,me,x+kante/3*2,y,z,top,kante/3)
            
            KochKurve3D(ae,me,x,y-kante/3*2,z,1,kante/3)
            KochKurve3D(ae,me,x,y+kante/3*2,z,4,kante/3)
            
            KochKurve3D(ae,me,x,y,z-kante/3*2,2,kante/3)
            KochKurve3D(ae,me,x,y,z+kante/3*2,5,kante/3)
            
         Case 4
            KochKurve3D(ae,me,x-kante,y-kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x,y-kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante,y-kante/3,z-kante,top,kante/3)
            KochKurve3D(ae,me,x+kante,y-kante/3,z,top,kante/3)
            KochKurve3D(ae,me,x+kante,y-kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x,y-kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante,y-kante/3,z+kante,top,kante/3)
            KochKurve3D(ae,me,x-kante,y-kante/3,z,top,kante/3)
            
            KochKurve3D(ae,me,x,y+kante/3*2,z,top,kante/3)
            
            KochKurve3D(ae,me,x-kante/3*2,y,z,0,kante/3)
            KochKurve3D(ae,me,x+kante/3*2,y,z,3,kante/3)
            
            KochKurve3D(ae,me,x,y,z-kante/3*2,2,kante/3)
            KochKurve3D(ae,me,x,y,z+kante/3*2,5,kante/3)
            
         Case 5
            KochKurve3D(ae,me,x-kante,y-kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x,y-kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y-kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x+kante,y+kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x,y+kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x-kante,y+kante,z-kante/3,top,kante/3)
            KochKurve3D(ae,me,x-kante,y,z-kante/3,top,kante/3)
            
            KochKurve3D(ae,me,x,y,z+kante/3*2,top,kante/3)
            
            KochKurve3D(ae,me,x-kante/3*2,y,z,0,kante/3)
            KochKurve3D(ae,me,x+kante/3*2,y,z,3,kante/3)
            
            KochKurve3D(ae,me,x,y-kante/3*2,z,1,kante/3)
            KochKurve3D(ae,me,x,y+kante/3*2,z,4,kante/3)
            
      End Select
      
      
   EndIf
End Function


Function AddCube(x#,y#,z#,kante#,top);top 0=x,1=y,2=z;3=-x,4=-y,5=-z
   v1=xAddVertex(surface,x+kante/2,y+kante/2,z-kante/2)
   v2=xAddVertex(surface,x-kante/2,y+kante/2,z-kante/2)
   v3=xAddVertex(surface,x+kante/2,y-kante/2,z-kante/2)
   v4=xAddVertex(surface,x-kante/2,y-kante/2,z-kante/2)
   v5=xAddVertex(surface,x+kante/2,y+kante/2,z+kante/2)
   v6=xAddVertex(surface,x-kante/2,y+kante/2,z+kante/2)
   v7=xAddVertex(surface,x+kante/2,y-kante/2,z+kante/2)
   v8=xAddVertex(surface,x-kante/2,y-kante/2,z+kante/2)
   
   If top<>0
      xAddTriangle(surface,v7,v3,v1);;;
      xAddTriangle(surface,v1,v5,v7)
   EndIf
   
   If top<>1
      xAddTriangle(surface,v6,v5,v1);;;
      xAddTriangle(surface,v1,v2,v6)
   EndIf
   
   If top<>2
      xAddTriangle(surface,v5,v6,v8)
      xAddTriangle(surface,v8,v7,v5)
   EndIf
   
   If top<>3
      xAddTriangle(surface,v2,v4,v6);;;
      xAddTriangle(surface,v8,v6,v4)
   EndIf
   
   If top<>4
      xAddTriangle(surface,v4,v7,v8);;;
      xAddTriangle(surface,v7,v4,v3)
   EndIf
   
   If top<>5
      xAddTriangle(surface,v3,v2,v1)
      xAddTriangle(surface,v2,v3,v4)
   EndIf
End Function


Was das ganze noch rätselhafter für mich macht ist das die Anzahl der Vertices und der Tris genau die ist, die sie sein sollte.
und die Würfel haben gröstenteils jetzt noch eine unterseite(eine ausnahme hab ich gefunden)haben, was bei niedrigeren Iterationen nicht der Fall ist.
und bei 6 Iterationen sieht man nur noch einen Schwarzen Bildschirm, obwohl 4022340 Triangles zu sehen sein sollten.(ich weiss das das seeehr viele sind)
Oder könnte es sein das Xors3D einfach nicht mehr weiter rendert wens zu viel wird??

Ich hab jetzt aber genug geschwafelt und danke schon vorher für eure Hilfe

ZEVS

BeitragFr, Jul 01, 2011 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt eine Sperre für rekursive Funktionen (der Aufruf-Stack des Prozessors), wie es die Anfänger schon hier lernen

Joel

BeitragFr, Jul 01, 2011 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh ich bekomme doch noch eine antwort Smile Laughing Very Happy

doch mein problem lag nicht an der sperre, sondern einfach an der vertices begrenzung von surfaces.
einfach neue surfaces ertellen und fertig.

trotzdem danke für die Antwort!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group