This hangs for me :(
Strict Framework brl.blitzgl Import brl.system bglCreateContext(800,600) Const mode=5 Local cells:Byte[,,,] Select mode Case 5 cells=New Byte[90,100,100,100] Default cells=New Byte[1,100,100,100] End Select For Local ax=0 Until 100 For Local ay=0 Until 100 For Local az=0 Until 100 Local x#=ax-50 Local y#=ay-50 Local z#=az-50 Select mode Case 1 cells[0,ax,ay,az]=(Sqr(x*x+y*y+z*z)<25) Case 2 cells[0,ax,ay,az]=((Sin(x*2)+Sin(y*2)-Sin(z*2))<.1) Case 3 x=x/6 y=y/6 z=z/6 cells[0,ax,ay,az]=((X^2 + Y^2 + Z^2 <= 9) & (Z^2 + (Sqr(X^2 + Y^2) - 2.5)^2 >= 2)) Case 4 cells[0,ax,ay,az]=25-Sqr(x*x+y*y+z*z) Case 5 For Local i=0 Until 90 cells[i,ax,ay,az]=(X*X+Y*Y+Sin(i*2)*180-50-Z*Z<2) Next End Select Next Next Next Local temp:Byte[,,]=New Byte[100,100,100] If mode=5 Then For Local i=0 Until 90 For Local ax=1 Until 99 For Local ay=1 Until 99 For Local az=1 Until 99 temp[ax,ay,az]=cells[i,ax,ay,az] Next Next Next For Local ax=1 Until 99 For Local ay=1 Until 99 For Local az=1 Until 99 If temp[ax,ay,az]>0 Then If temp[ax-1,ay-1,az-1]>0 And.. temp[ax,ay-1,az-1]>0 And.. temp[ax+1,ay-1,az-1]>0 And.. temp[ax-1,ay,az-1]>0 And.. temp[ax,ay,az-1]>0 And.. temp[ax+1,ay,az-1]>0 And.. temp[ax,ay+1,az-1]>0 And.. temp[ax+1,ay+1,az-1]>0 And.. temp[ax-1,ay-1,az]>0 And.. temp[ax,ay-1,az]>0 And.. temp[ax+1,ay-1,az]>0 And.. temp[ax-1,ay,az]>0 And.. temp[ax+1,ay,az]>0 And.. temp[ax,ay+1,az]>0 And.. temp[ax+1,ay+1,az]>0 And.. temp[ax-1,ay-1,az+1]>0 And.. temp[ax,ay-1,az+1]>0 And.. temp[ax+1,ay-1,az+1]>0 And.. temp[ax-1,ay,az+1]>0 And.. temp[ax,ay,az+1]>0 And.. temp[ax+1,ay,az+1]>0 And.. temp[ax,ay+1,az+1]>0 And.. temp[ax+1,ay+1,az+1]>0 Then cells[i,ax,ay,az]=0 EndIf EndIf Next Next Next Next Else EndIf glClearColor(0.0, 0.0, 0.0, 0.0) glClearDepth(1.0) glEnable(GL_CULL_FACE) glEnable(GL_DEPTH_TEST) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(45.0, Float(800)/Float(600), 10, 300.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glEnable(GL_LIGHTING) Local lite:Float Ptr=Float Ptr(GCMalloc(16)) lite[0]=.7 lite[1]=.2 lite[2]=.2 lite[3]=1 Local pos:Float Ptr=Float Ptr(GCMalloc(16)) pos[0]=50 pos[1]=50 pos[2]=50 pos[3]=1 glLightfv(GL_LIGHT0,GL_DIFFUSE,lite) gllightfv(GL_LIGHT0,GL_POSITION,pos) lite[0]=.2 lite[1]=.5 lite[2]=.2 lite[3]=1 pos[0]=-50 pos[1]=-50 pos[2]=50 pos[3]=1 glLightfv(GL_LIGHT1,GL_DIFFUSE,lite) gllightfv(GL_LIGHT1,GL_POSITION,pos) lite[0]=.2 lite[1]=.2 lite[2]=.5 lite[3]=1 pos[0]=50 pos[1]=-50 pos[2]=50 pos[3]=1 glLightfv(GL_LIGHT2,GL_DIFFUSE,lite) gllightfv(GL_LIGHT2,GL_POSITION,pos) glEnable(GL_LIGHT0) glEnable(GL_LIGHT1) glEnable(GL_LIGHT2) glEnable(GL_COLOR_MATERIAL) 'glpolygonmode(GL_FRONT,GL_LINE) Local t=0 While Not KeyHit(1) t:+1 glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) glLoadIdentity() Local z=MouseZ()-200 gltranslatef(0,0,z) glrotatef(MouseX(),0,1,0) glrotatef(MouseY(),1,0,0) If mode<>5 Then DrawCells(cells) Else DrawCells(cells,t Mod 90) bglSwapBuffers Wend Function DrawCells(a:Byte[,,,],t=0) glbegin(GL_QUADS) For Local x=0 Until 100 For Local y=0 Until 100 For Local z=0 Until 100 If a[t,x,y,z]>0 Then 'glcolor3ub(a[t,x,y,z],a[t,x,y,z],a[t,x,y,z]) 'glcolor3f(1,0,0) glnormal3f(0,1,0) glvertex3f(x-50.5,y-49.5,z-50.5) glvertex3f(x-50.5,y-49.5,z-49.5) glvertex3f(x-49.5,y-49.5,z-49.5) glvertex3f(x-49.5,y-49.5,z-50.5) 'bottom 'glcolor3f(0,1,0) glnormal3f(0,-1,0) glvertex3f(x-49.5,y-50.5,z-50.5) glvertex3f(x-49.5,y-50.5,z-49.5) glvertex3f(x-50.5,y-50.5,z-49.5) glvertex3f(x-50.5,y-50.5,z-50.5) 'top 'glcolor3f(1,1,0) glnormal3f(0,0,1) glvertex3f(x-49.5,y-49.5,z-49.5) glvertex3f(x-50.5,y-49.5,z-49.5) glvertex3f(x-50.5,y-50.5,z-49.5) glvertex3f(x-49.5,y-50.5,z-49.5) 'Front 'glcolor3f(0,0,1) glnormal3f(0,0,-1) glvertex3f(x-49.5,y-50.5,z-50.5) glvertex3f(x-50.5,y-50.5,z-50.5) glvertex3f(x-50.5,y-49.5,z-50.5) glvertex3f(x-49.5,y-49.5,z-50.5) 'Back 'glcolor3f(1,0,1) glnormal3f(-1,0,0) glvertex3f(x-50.5,y-50.5,z-50.5) glvertex3f(x-50.5,y-50.5,z-49.5) glvertex3f(x-50.5,y-49.5,z-49.5) glvertex3f(x-50.5,y-49.5,z-50.5) 'Right 'glcolor3f(1,1,1) glnormal3f(1,0,0) glvertex3f(x-49.5,y-49.5,z-50.5) glvertex3f(x-49.5,y-49.5,z-49.5) glvertex3f(x-49.5,y-50.5,z-49.5) glvertex3f(x-49.5,y-50.5,z-50.5) 'Left EndIf Next Next Next glend() EndFunction