Overflow sperre bei rekursiven Funktionen?
Übersicht BlitzBasic Allgemein
JoelBetreff: Overflow sperre bei rekursiven Funktionen? |
Di, Mai 10, 2011 10:20 Antworten mit Zitat |
|
---|---|---|
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 |
Fr, Jul 01, 2011 19:45 Antworten mit Zitat |
|
---|---|---|
Es gibt eine Sperre für rekursive Funktionen (der Aufruf-Stack des Prozessors), wie es die Anfänger schon hier lernen | ||
Joel |
Fr, Jul 01, 2011 20:04 Antworten mit Zitat |
|
---|---|---|
ahh ich bekomme doch noch eine antwort
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! |
||
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group