Переписал код Optimus'a и получился полный тормоз. хз, почему.
;http://www.petesqbsite.com/sections/express/issue20/index.html#polarplasmas
#SCR_WIDTH = 320
#SCR_HEIGHT = 240
#SCR_SIZE = #SCR_WIDTH * #SCR_HEIGHT
xc.l = #SCR_WIDTH / 2
yc.l = #SCR_HEIGHT / 2
rang.l = 512
d2r.f = 180/#PI
d2b.f = rang * d2r / 360
Global Dim radius.a(#SCR_SIZE-1); As ubyte
Global Dim angle.a(#SCR_SIZE-1); As ubyte
Global Dim pal.l(256)
Global Dim fsin1.l(2048)
Global Dim fsin2.l(2048)
If InitSprite() And OpenWindow(0,0,0,640,480,"polar plasma",#PB_Window_SystemMenu) And OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
UsePNGImageDecoder()
CatchImage(0,?ppal)
StartDrawing(ImageOutput(0))
For i.l=0 To 255
pal(i)=Point(i,0)
Next i
StopDrawing()
i = 0
For y.l = 0 To #SCR_HEIGHT - 1
For x = 0 To #SCR_WIDTH - 1
xs.l = x - xc
ys.l = y - yc
radius(i) = Sqr(xs*xs+ys*ys);% ^ 2 + ys% ^ 2)
angle(i) = ATan2(xs, ys) * d2b
i = i + 1
Next x
Next y
l.f=0.25
For i=0 To 2047
fsin1(i)=Sin(i/(l*d2b))*48+64
fsin2(i)=Sin(i/(l*d2b/2))*40+48
Next i
k.a=0
Repeat
StartDrawing(ScreenOutput())
For i=0 To #SCR_SIZE-1
c.a = angle(i) + fsin1(radius(i) + fsin2(radius(i) + k))
; For i%=0 To SCR_SIZE-1
; c = radius(i%) + fsin2%(radius(i%) + angle(i%))
; vram(i%) = pal(c)
; Next i%
; For i%=0 To SCR_SIZE-1
; c = radius(i%) + fsin2%(angle(i%))
; vram(i%) = pal(c)
; Next i%
; For i%=0 To SCR_SIZE-1
; c= radius(i%) + angle(i%)
; vram(i%) = pal(c)
; Next i%
;vram(i%) = pal(c)
xx.l=(i%#SCR_WIDTH)
;Box(xx*2,Int(i/#SCR_WIDTH)*2,2,2,pal(c));RGB(c,c,c))
Box(xx,Int(i/#SCR_WIDTH),1,1,pal(c));RGB(c,c,c))
Next i
k+2
StopDrawing()
FlipBuffers()
Until WindowEvent()=#PB_Event_CloseWindow
EndIf
DataSection:
ppal:
IncludeBinary "palete.PNG"
Немного исправил, теперь работает пошустрее. Тут
Комментарии
Отправить комментарий