@dllfreak
scheinbar gibt's das problem nicht mehr, insofern es mal existiert hat.
@Zaphod
das hatte er schon verstanden, und wollte es ja auch nutzten.
das problem ist einfach der Random-algo von PB, bzw das was FroggerProgger erklärt hat.
man kann das nur etwas verwischen, aber weg bekommt man es nicht.
hab Gubbie's code mal verändert. statt ordinalen seeds werden jetzt vorberechnete zufällige seeds berwendet.
Code: Alles auswählen
RandomSeed(1)
Global Dim rands.l(#bh*400)
For y=0 To #bh*400
rands(y) = Random(#bh*400)
Next
;...
Procedure.f ran(x,y)
;RandomSeed(9999+rands(y))
;RandomSeed(Random(10000)+x)
RandomSeed(rands(y)+x) : Random(1)
;For i = 0 To x
l.f=-1+Random(2000)/1000
;Next
ProcedureReturn l
EndProcedure
um eine andere formation zu erzuegen, den seedwert am anfang ändern.
komplett:
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
;#bb=1280 : #bh=800 : OpenScreen(#bb,#bh,32,"")
#bb=600 : #bh=400 : OpenWindow(0,100,100,#bb,#bh,"") : OpenWindowedScreen(WindowID(0),0,0,#bb,#bh,0,0,0)
RandomSeed(1)
Global Dim rands.l(#bh*400)
For y=0 To #bh*400
rands(y) = Random(#bh*400)
Next
Procedure.f Cosine_Interpolate(a.f, b.f, x.f)
ft.f = x * #PI
f.f = (1 - Cos(ft)) * 0.5
ProcedureReturn (a*(1-f) + b*f)
EndProcedure
Procedure.f ran(x,y)
;RandomSeed(9999+rands(y))
;RandomSeed(Random(10000)+x)
RandomSeed(rands(y)+x) : Random(1)
;For i = 0 To x
l.f=-1+Random(2000)/1000
;Next
ProcedureReturn l
EndProcedure
Procedure.f noise(x.f,y.f)
rand1.f=ran(Int(x),Int(y))
rand2.f=ran(Int(x)+1,Int(y))
rand3.f=ran(Int(x),Int(y+1))
rand4.f=ran(Int(x)+1,Int(y+1))
ProcedureReturn Cosine_Interpolate(Cosine_Interpolate(rand1 ,rand2,x-Int(x)),Cosine_Interpolate(rand3 ,rand4,x-Int(x)),y-Int(y))
EndProcedure
Procedure.f perlin(x.f,y.f,order)
res.f=0
For i = 1 To order
res + noise(x*Pow(2,i),y*Pow(2,i))/Pow(2,i)
Next
ProcedureReturn res;noise(x,y)/2 + noise(x*2,y*2)/4 + noise(x*4,y*4)/8
EndProcedure
#Step=5
w=1
amp=100
CreateSprite(0,#bb,#bh)
CreateSprite(1,#bb,#bh)
StartDrawing(SpriteOutput(0))
For x = 1 To #bb-1
; Debug x
Next
StopDrawing()
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(RGB(0,0,0))
For i = 0 To 10
DisplaySprite(0,-1,0)
StartDrawing(ScreenOutput())
For y = 1 To #bh/2-1
farbe.f=(0.5+0.5*perlin(time*00.01,y*00.01,10))*255
If farbe>y
farbe-y
Plot(#bb-1,#bh-y*w,RGB(farbe,farbe,farbe))
EndIf
Next
time+1
StopDrawing()
GrabSprite(0,0,0,#bb,#bh)
Next
;DisplaySprite(1,0,0)
FlipBuffers()
Until KeyboardPushed(1)