Efektit

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Contact:

Re: Efektit

Post by Herra Siili »

Kahden sadan FPS:n pinnassa pyörii koko ajan. 4000 palloa testasin, sen jälkeen en jaksanut enää odottaa.
a.k.a. Gehock
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Itse annoin rendailla koulun koneella about 13k palloa, ilman fps:n putoamista vsyncin 60:sta
- - - -
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Efektit

Post by Latexi95 »

Tuleeko niitä palloja oikeasti lisää? Koodin perusteella en ainakaan huomaa että niitä oikeasti lisättäisiin.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Höhö, salaisuuteni paljastui. Ideahan on loopata kymmentä framea ja piirtää aina vain uusimman pallon liikettä, eli niitä piirretään oikeasti yksi kerrallaan (lisäksi bufferin päivitys, mikä tekee huikeat 2 drawimagea piirrettyä framea kohti). Tuleehan niitä sinänsä ihan oikeasti lisää; edellinen instanssi jää piirtymään taustalle joten lopulta näytöllä on valtava läjä palloja, mutta kerralla ei piirretä koskaan useampaa.

Ideasta pointsit tälle mainiolle ZX spectrum -demolle, jossa oletan käytetyn täsmälleen samaa kikkaa - estetiikkakin on varsin suoraan kopioitu :)
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Sattui tulemaan tarvetta sateelle, joten kokeilin toteuttaa yksinkertaista sade-systeemiä, mikä ei loppuviimein ollutkaan järin vaikeaa. Näitä virityksiä on varmaan nähty ennenkin, mutta tässä nyt oma väkerrelmäni.

Code: Select all

SCREEN 800,600

Type RAIN
    Field x#
    Field y#
    Field fs
    Field angle
EndType

Repeat
    
    If drops < 200 // Sateen volyymin saa säädettyä tässä, eli onko sade ennemmin tihkua vaiko "saavista kaatamalla".

    drop.RAIN = New(RAIN) // Luodaan uusi jäsen, eli pisara.
        drop\x# = Rand(0,ScreenWidth()) // Pisaran alkupositio x-akselilla.
        drop\y# = 0 // Pisaran alkupositio y-akselilla.
        drop\fs = Rand(14,16) // Putoamisnopeus.
        drop\angle = Rand(100,110) // Ja tässä säädetään sateen kulma.

        drops = drops + 1

    EndIf

    For drop.RAIN = Each RAIN // Käydään kaikki jäsenet, eli pisarat läpi.
      
        drop\x# = drop\x# + Cos(drop\angle)*drop\fs // Pisaran uusi sijainti x-akselilla.
        drop\y# = drop\y# + Sin(drop\angle)*drop\fs // Pisaran uusi sijainti y-akselilla.
        
        Color 100,100,255 // Sateen väri.
        Line drop\x#,drop\y#,drop\x#+Cos(drop\angle)*drop\fs,drop\y#+Sin(drop\angle)*drop\fs // Piirretään pisara.
        
        If drop\y# > Rand(400,600) // Jos pisara osuu maahan... (ja missä kohtaa pisara osuu maahan)
            drop\x# = Rand(0,ScreenWidth()) //...niin asetetaan pisaralle uusi vaakasijainti...
            drop\y# = 0 //...ja takaisin ylös.
        EndIf
        
        If drop\x# < 0 Then drop\x# = ScreenWidth() // Mikäli mennään ruudun reunojen yli, asetetaan pisaran vaakasijainniksi ruudun toinen pää.
        If drop\x# > ScreenWidth() Then drop\x# = 0 // Sama kuin ylempi, mutta toisinpäin.
 
    Next drop // Siirrytään seuraavaan jäseneen.
        
    DrawScreen
        
Until KeyHit(1)
Last edited by MrMonday on Fri Aug 30, 2013 2:05 am, edited 2 times in total.
User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Efektit

Post by Misthema »

MrMonday wrote:
Sattui tulemaan tarvetta sateelle, joten kokeilin toteuttaa yksinkertaista sade-systeemiä, mikä ei loppuviimein ollutkaan järin vaikeaa. Näitä virityksiä on varmaan nähty ennenkin, mutta tässä nyt oma väkerrelmäni.

Code: Select all

SCREEN 800,600

Type RAIN
    Field x#
    Field y#
    Field fs
    Field angle
EndType

For i = 0 To 200 // Sateen volyymin saa säädettyä tässä, eli onko sade ennemmin tihkua vaiko "saavista kaatamalla".

    drop.RAIN = New(RAIN) // Luodaan uusi jäsen, eli pisara.
        drop\x# = Rand(0,ScreenWidth()) // Pisaran alkupositio x-akselilla.
        drop\y# = 0 // Pisaran alkupositio y-akselilla.
        drop\fs = Rand(14,16) // Putoamisnopeus.
        drop\angle = Rand(100,110) // Ja tässä säädetään sateen kulma.

Next i

Repeat
    
    For drop.RAIN = Each RAIN // Käydään kaikki jäsenet, eli pisarat läpi.
      
        drop\x# = drop\x# + Cos(drop\angle)*drop\fs // Pisaran uusi sijainti x-akselilla.
        drop\y# = drop\y# + Sin(drop\angle)*drop\fs // Pisaran uusi sijainti y-akselilla.
        
        Color 100,100,255 // Sateen väri.
        Line drop\x#,drop\y#,drop\x#+Cos(drop\angle)*drop\fs,drop\y#+Sin(drop\angle)*drop\fs // Piirretään pisara.
        
        If drop\y# > Rand(400,600) // Jos pisara osuu maahan... (ja missä kohtaa pisara osuu maahan)
            drop\x# = Rand(0,ScreenWidth()) //...niin asetetaan pisaralle uusi vaakasijainti...
            drop\y# = 0 //...ja takaisin ylös.
        EndIf
        
        If drop\x# < 0 Then drop\x# = ScreenWidth() // Mikäli mennään ruudun reunojen yli, asetetaan pisaran vaakasijainniksi ruudun toinen pää.
        If drop\x# > ScreenWidth() Then drop\x# = 0 // Sama kuin ylempi, mutta toisinpäin.
 
    Next drop // Siirrytään seuraavaan jäseneen.
        
    DrawScreen
        
Until KeyHit(1)
Seuraaminen oli hyvin hankalaa, koska väkisinkin silmät jumittu yhteen pisaraan, tai jotain... Sama juttu kuin katselisit ohi meneviä puita auton tai minkä tahansa kyydistä.
Joku jännä tausta tuohon niin vois näkyä paremmin.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Misthema wrote:
MrMonday wrote:
Sattui tulemaan tarvetta sateelle, joten kokeilin toteuttaa yksinkertaista sade-systeemiä, mikä ei loppuviimein ollutkaan järin vaikeaa. Näitä virityksiä on varmaan nähty ennenkin, mutta tässä nyt oma väkerrelmäni.

Code: Select all

SCREEN 800,600

Type RAIN
    Field x#
    Field y#
    Field fs
    Field angle
EndType

For i = 0 To 200 // Sateen volyymin saa säädettyä tässä, eli onko sade ennemmin tihkua vaiko "saavista kaatamalla".

    drop.RAIN = New(RAIN) // Luodaan uusi jäsen, eli pisara.
        drop\x# = Rand(0,ScreenWidth()) // Pisaran alkupositio x-akselilla.
        drop\y# = 0 // Pisaran alkupositio y-akselilla.
        drop\fs = Rand(14,16) // Putoamisnopeus.
        drop\angle = Rand(100,110) // Ja tässä säädetään sateen kulma.

Next i

Repeat
    
    For drop.RAIN = Each RAIN // Käydään kaikki jäsenet, eli pisarat läpi.
      
        drop\x# = drop\x# + Cos(drop\angle)*drop\fs // Pisaran uusi sijainti x-akselilla.
        drop\y# = drop\y# + Sin(drop\angle)*drop\fs // Pisaran uusi sijainti y-akselilla.
        
        Color 100,100,255 // Sateen väri.
        Line drop\x#,drop\y#,drop\x#+Cos(drop\angle)*drop\fs,drop\y#+Sin(drop\angle)*drop\fs // Piirretään pisara.
        
        If drop\y# > Rand(400,600) // Jos pisara osuu maahan... (ja missä kohtaa pisara osuu maahan)
            drop\x# = Rand(0,ScreenWidth()) //...niin asetetaan pisaralle uusi vaakasijainti...
            drop\y# = 0 //...ja takaisin ylös.
        EndIf
        
        If drop\x# < 0 Then drop\x# = ScreenWidth() // Mikäli mennään ruudun reunojen yli, asetetaan pisaran vaakasijainniksi ruudun toinen pää.
        If drop\x# > ScreenWidth() Then drop\x# = 0 // Sama kuin ylempi, mutta toisinpäin.
 
    Next drop // Siirrytään seuraavaan jäseneen.
        
    DrawScreen
        
Until KeyHit(1)
Seuraaminen oli hyvin hankalaa, koska väkisinkin silmät jumittu yhteen pisaraan, tai jotain... Sama juttu kuin katselisit ohi meneviä puita auton tai minkä tahansa kyydistä.
Joku jännä tausta tuohon niin vois näkyä paremmin.
Jep, kyllä tämä taustan vaatii, sillä eihän tästä tällaisenaan ole sitäkään vähää iloa. Kun taustalla tapahtuu olennainen, ei huomio keskity yksittäisiin pisaroihin. Mutta ei tämä muutenkaan mitenkään kaunein mahdollinen ole, vaan nykyisellään cb ei kummoista silmäkarkkia mahdollista, joten toteutus on tylsä piirtokomennoilla tapahtuva räpellys. Jos toteuttaisi kuvilla, niin että maahan osuessaan pyöräytettäisiin joku roiskahdus-animaatio, niin voisi jo näyttää joltain, mutta sitten kun muun pelin pitäisi vielä pyöriä taustalla, niin eipä taida kuvat tulla kysymykseen. En tosin tiedä, että millä tolalla cbE on nykyään, josko sillä saisi jo nättiäkin jälkeä aikaan ilman suorituskykyongelmia. Ja tehokkaalla optimoinnilla saa toki myös paljon aikaan.

Onko muilla kansioiden kätköissä korruptoitumassa mitään vanhoja sade-efektejä? Olisi hauska nähdä muidenkin tuotoksia :)
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Tein moisen eilen näkemyksesi innoittamana, mutta en keksinyt paljoa lisättävää niin en tullut postanneeksi, mutta menköön nyt kun moisia pyydettiin. Pientä lisäpontta efektiin saa perspektiivistä, syvyyspohjaisesta värin himmenemisestä, tuulesta ja pärskähdyksistä osumahetkellä. Taustana vain harmaa liuku maata kuvaamaan, esimerkiksi demoon lisähiomiseksi taustalle voisi lisätä kuun jonkun pilvi/puusiluetin reunustamana tai vaikka satunnaista salamointia.

Code: Select all

SCREEN 640, 480
Dim p#(999,5)
ym# = -.6
For i = 0 To 999
    Gosub reset
Next i
ym = 1
back = MakeImage(640,480)
DrawToImage back
    For i = 1 To 6
        Color i*5, i*5, i*5
        Box 0, 360+2^i,640, 2^i
    Next i
DrawToScreen
Repeat
    DrawImage back, 0, 0
    Lock
        For i = 0 To 999
            p(i,3) = p(i,3) + Sin(Timer()*.1)*.0005
            p(i,5) = p(i,5) + Sin(Timer()*.11)*.0005
            p(i,0) = p(i,0) + p(i,3)
            p(i,1) = p(i,1) + p(i,4)
            p(i,2) = p(i,2) + p(i,5)
            If p(i,1)<-.6 Then p(i,4) = .02
            a# = 600.0/(p(i,2)+2)
            Color Min(255,.2*a), Min(255,.24*a), Min(255,.34*a)
            b# = 600.0/(p(i,2)+p(i,5)*.9+2)
            Line 320+p(i,0)*a, 240-p(i,1)*a, 320+(p(i,0)+p(i,3)*.9)*b, 240-(p(i,1)+p(i,4)*.9)*b
            If p(i,1)<-.6 Then Gosub reset
        Next i
    Unlock
    DrawScreen
Forever

reset:
p(i,0) = Rnd(-1,1)
p(i,1) = Rnd(ym,1)
p(i,2) = Rnd(-1,1)
p(i,3) = Rnd(-.01,.01)
p(i,4) = Rnd(-.08,-.05)
p(i,5) = Rnd(-.01,.01)
Return
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Efektit

Post by Jani »

Tylsyyksissäni palaan aina Kylmäperuksen pariin ja värkkään jotain kivaa. Tällä kertaa ... mikä tälle edes on oikea nimi? Pyörivä teksti? En tiedä lasketaanko tätä niinkään efektiksi, mutta ei tämä omaa ketjuakaan ansaitse. Optimoinnin varaa olisi paljon. Tälläisen itseasiassa joskus näinkin foorumilla, en sitten muista millainen se on.

Code: Select all

Global gDelta# : gDelta = 0.0
Global gLastFrameTime : gLastFrameTime = Timer()
Dim _gScrollTexts(11) As Float


num = 0
Repeat
    Gosub UpdateDelta
    
    ScrollText(0, 10, 10, 300, "This text is kinda cool, if you ask me. ")
    ScrollText(1, 10, 30, 125, "It works well.")
    ScrollText(2, 185, 30, 125, "Delta time halved the FPS. No idea why.")
    
    If KeyHit(cbKeySpace) Then num + 1
    
    For i = 1 To 8
        ScrollText(2 + i, 185, 50 + 12 * i, 125, "Text #" + (i + num), 60 * (i / 3.0))
    Next i
    
    ScrollText(11, 10, 160, 380, "Loop")
    
    Text 10, 50, "FPS: " + FPS()
    Text 10, 72, "Hit spacebar To"
    Text 10, 84, "increase numbers."
    //Text 10, 100,"Delta: " + gDelta
    DrawScreen
Forever

UpdateDelta:
    _t = Timer()
    gDelta = (_t - gLastFrameTime) / 1000.0
    gLastFrameTime = _t
Return

// Draws a scrolling text.
// Variables:
//  id      Unique ID of the text. Can be reused if the old text isn't visible anymore.
//  x       Top left X-coordinate of the text.
//  y       Top left Y-coordinate of the text.
//  width   Width the scrolling text should occupy.
//  txt     The text to show. Can change at any point.
//  speed   Pixels to scroll per second. Negative value scrolls to right.
Function ScrollText(id As Integer, x As Integer, y As Integer, width As Integer, txt As String, speed As Float = 60.0)
    twidth = TextWidth(txt)
    pos# = _gScrollTexts(id) - (speed * gDelta)
    //pos# = _gScrollTexts(id) - speed
    If speed < 0 And pos >= Max(width, twidth) + 10 Then pos = pos - twidth - 10
    If speed > 0 And pos <= -twidth - 10 Then pos = pos + twidth + 10
    _gScrollTexts(id) = pos
    
    img = MakeImage(width, TextHeight("|"))
    DrawToImage img
        Text pos, 0, txt
        If speed > 0
            For i = 1 To Int(width / twidth) + 1
                Text pos + (twidth + 10) * i, 0, txt
            Next i
        Else
            For i = 1 To Int(width / twidth) + 1
                Text pos - (twidth + 10) * i, 0, txt
            Next i
        EndIf
    DrawToScreen
    DrawImage img, x, y
    DeleteImage img
EndFunction
EDIT: Bugfix n. 3
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
User avatar
CosmoConsole
Newcomer
Posts: 6
Joined: Mon Dec 02, 2013 8:33 pm

Re: Efektit

Post by CosmoConsole »

Tässäpä hyvin yksinkertainen parallax scrolling efekti, joka tuli väsättyä noin 10 minuutissa.

Code: Select all

SCREEN 640, 240
cx = 0
tides1 = MakeImage(32, 9)
tides2 = MakeImage(32, 10)
tides3 = MakeImage(32, 11)
tides4 = MakeImage(32, 12)
tides5 = MakeImage(32, 13)
tides6 = MakeImage(32, 14)
tides7 = MakeImage(32, 15)
tides8 = MakeImage(32, 16)
bg = MakeImage(640, 240)
Function SeaGradient(yt#)
 Color 21+(yt#*122),83+(yt#*118),132+(yt#*73)
EndFunction
DrawToImage bg
For y# = 0 To 239
 yt# = (y# / 189)
 Color 150+(yt#*57),205+(yt#*31),20+(yt#*232)
 Line 0, y, 640, y
Next y#
DrawToImage tides1
For y# = 0 To 8
 For x# = 0 To 31
  yt# = Rnd(0.0, 0.5)
  SeaGradient (yt#)
  Dot x,y
 Next x#
Next y#
DrawToImage tides2
For y# = 0 To 9
 For x# = 0 To 15
  yt# = Rnd(0.0, 0.6)
  SeaGradient (yt#)
  Line x*2,y,(x*2)+1,y
 Next x#
Next y#
DrawToImage tides3
For y# = 0 To 10
 For x# = 0 To 15
  yt# = Rnd(0.0, 0.7)
  SeaGradient (yt#)
  Line x*2,y,(x*2)+1,y
 Next x#
Next y#
DrawToImage tides4
For y# = 0 To 11
 For x# = 0 To 15
  yt# = Rnd(0.0, 0.81)
  SeaGradient (yt#)
  Line x*2,y,(x*2)+1,y
 Next x#
Next y#
DrawToImage tides5
For y# = 0 To 12
 For x# = 0 To 15
  yt# = Rnd(0.0, 0.89)
  SeaGradient (yt#)
  Line x*2,y,(x*2)+1,y
 Next x#
Next y#
DrawToImage tides6
For y# = 0 To 13
 For x# = 0 To 7
  yt# = Rnd(0.0, 0.97)
  SeaGradient (yt#)
  Line x*4,y,(x*4)+3,y
 Next x#
Next y#
DrawToImage tides7
For y# = 0 To 14
 For x# = 0 To 7
  yt# = Rnd(0.0, 1)
  SeaGradient (yt#)
  Line x*4,y,(x*4)+3,y
 Next x#
Next y#
DrawToImage tides8
For y# = 0 To 15
 For x# = 0 To 7
  yt# = Rnd(0.0, 1)
  SeaGradient (yt#)
  Line x*4,y,(x*4)+3,y
 Next x#
Next y#
DrawToScreen
'1 2 4 12 16 16 32 64
'/32 /16 /8 (/16)*3 /4 /2 (/4)*3 /1
tx = 83
Repeat
 cx = (cx + tx)
 DrawImage bg, 0, 0
 For x = -64 To 704 Step 32
  DrawImage tides1, x + ((cx Mod 8192) / 128), 240 - (16 + 15 + 14 + 13 + 12 + 11 + 10 + 9)
  DrawImage tides2, x + ((cx Mod 4096) / 64), 240 - (16 + 15 + 14 + 13 + 12 + 11 + 10)
  DrawImage tides3, x + ((cx Mod 2048) / 32), 240 - (16 + 15 + 14 + 13 + 12 + 11)
  DrawImage tides4, x + ((cx Mod 1024) / 16), 240 - (16 + 15 + 14 + 13 + 12)
  DrawImage tides5, x + ((cx Mod 512) / 8), 240 - (16 + 15 + 14 + 13)
  DrawImage tides6, x + ((cx Mod 256) / 4), 240 - (16 + 15 + 14)
  DrawImage tides7, x + ((cx Mod 128) / 2), 240 - (16 + 15)
  DrawImage tides8, x + ((cx Mod 64)), 240 - (16)
 Next x
 Text 0, 0, tx
 If KeyHit(203) Then tx - 1
 If KeyHit(205) Then tx + 1
 If KeyDown(1) Then Exit
 DrawScreen
Forever
MessyC
Newcomer
Posts: 10
Joined: Sat Mar 15, 2014 10:53 pm

Re: Efektit

Post by MessyC »

Kaippa tätäkin efektiksi voisi kutsua, vaikkakin 3d projektiotahan tässä tavallaan tehdään. Tein tämän erään java-tutoriaalin perusteella, mutta koska CB ei ole paras komennoiltaan eikä nopeudeltaansa varsinkaan, niin en tästä saanut niin hienoa kuitenkaan. Renderöinnissä kestää kauan ja se vie tehoja paljon, sekä bittioperaattoreiden puutteet tekee vähän hassun näköisen. Ohjelma saattaa myös jumittaa konetta joskus, sillä se yrittää käyttää prossua niin paljon (näin ainakin luulisin). Nappia painamalla renderöi uuden kuvan mahdollisesti vähän eri suunnasta. Parannuksia ja virheitä saa ja pitää kertoa, kuuntelen mielelläni ;)

Code: Select all

w = 200
h = 200

SCREEN 400, 400
SCREEN w, h, 0, 2



Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float

fPos = 10
cPos = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0
xPix = 0
yPix = 0



do: 
Lock SCREEN()

rot + 20
cosini = Cos(rot)
sini = Sin(rot)

For y = 0 To h - 1

	yValue = (y - h / 2.4) / h
	z = cPos / yValue
	
	If yValue < 0 Then z = fPos / -yValue
	
	For x = 0 To w - 1
	
		depth = (x - w / 2.0) / h
		depth = depth * z
		xx = depth * cosini + z * sini
		yy = z * cosini - depth * sini
		xPix = Int(xx)
		yPix = Int(yy)
		'zBuffer(x+y*w) = z
		
		pixels(x+y*w) = (xPix * 16) + (yPix * 16) Shl 8
		If z > 400 Then pixels(x+y*w) = 0
		
		PutPixel2 x, y, pixels(x+y*w)
		SetWindow Str(y) + " " + Str(x)
	Next x
Next y

		

Unlock SCREEN()


DrawScreen 

WaitKey

Goto do
		
	
	
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Efektit

Post by Jani »

MessyC wrote:Kaippa tätäkin efektiksi voisi kutsua, vaikkakin 3d projektiotahan tässä tavallaan tehdään. Tein tämän erään java-tutoriaalin perusteella, mutta koska CB ei ole paras komennoiltaan eikä nopeudeltaansa varsinkaan, niin en tästä saanut niin hienoa kuitenkaan. Renderöinnissä kestää kauan ja se vie tehoja paljon, sekä bittioperaattoreiden puutteet tekee vähän hassun näköisen. Ohjelma saattaa myös jumittaa konetta joskus, sillä se yrittää käyttää prossua niin paljon (näin ainakin luulisin). Nappia painamalla renderöi uuden kuvan mahdollisesti vähän eri suunnasta. Parannuksia ja virheitä saa ja pitää kertoa, kuuntelen mielelläni ;)
*snip*
Suosittelen heti alkuun poistamaan SetWindow-komennon. Vie nimittäin aika mukavasti potentiaalista laskenta-aikaa. Tuo projektiosi pystyy jostain syystä piirtämään ainoastaan 45 asteen välein, joten rot + 20 on sama vaihtaa rot + 45, jotta joka painalluksella saadaan uusi kuva. Muuta yleistä pientä optimointia myös ja tässä olisi minun lopputulos. En ihan tarkkaan tajua tämän toimintaa, joten siinä kaikki (muutin myös tyyliasun törkeästi itselleni sopivaksi).

Code: Select all

w = 200
h = 200

SCREEN 400, 400
SCREEN w, h, 0, 2

Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float

fPos = 10
cPos# = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0

do: 
Lock SCREEN()

rot = (rot + 10) Mod 360
cosini# = Cos(rot)
sini# = Sin(rot)

t = Timer()
For y = 0 To h - 1
    
    yValue = (y - h / 2.4) / h
    
    If yValue < 0 Then z = fPos / (-yValue) Else z = cPos / yValue
    
    For x = 0 To w - 1
        pix = 0
        If z <= 400 Then
            depth = ((x - w / 2.0) / h) * z
            xx = depth * cosini + z * sini
            yy = z * cosini - depth * sini
            pix = (xx * 16) + (yy * 16) Shl 8
        EndIf
        
        PutPixel2 x, y, pix
    Next x
Next y

Unlock SCREEN()

Text 10, 10, rot + " - Took: " + (Timer() - t) + " ms"
DrawScreen 
While Timer() - t < 100
    Wait 1
Wend
Goto do
EDIT:

Muokkasin koodia, se toimiikin kuten pitää. \o/

EDIT2: Optimisation maximus!

Code: Select all

w = 200
h = 200

SCREEN 400, 400
SCREEN w, h, 0, 2

Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float

fPos = 10
cPos# = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0

w2# = w / 2.0
h2# = h / 2.4

do: 
Lock SCREEN()

rot = (rot + 10) Mod 360
cosini# = Cos(rot)
sini# = Sin(rot)

t = Timer()
For y = 0 To h - 1
    
    yValue = (y - h2) / h
    
    If yValue < 0 Then z = fPos / (-yValue) Else z = cPos / yValue
    If z <= 400 Then
        sinz# = z * sini
        cosz# = z * cosini
        div# = h / z // a / b * c == a / (b / c)
        For x = 0 To w - 1
            depth = (x - w2) / div
            PutPixel2 x, y, Int(((depth * cosini + sinz) * 16) + ((cosz - depth * sini) * 16) Shl 8)
        Next x
    EndIf
Next y

Unlock SCREEN()

Text 10, 10, rot + " - Took: " + (Timer() - t) + " ms"
DrawScreen 
While Timer() - t < 100
    Wait 1
Wend
Goto do
[/edit]
Last edited by Jani on Fri Mar 21, 2014 8:34 pm, edited 4 times in total.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
MessyC
Newcomer
Posts: 10
Joined: Sat Mar 15, 2014 10:53 pm

Re: Efektit

Post by MessyC »

Jani wrote: Suosittelen heti alkuun poistamaan SetWindow-komennon. Vie nimittäin aika mukavasti potentiaalista laskenta-aikaa. Tuo projektiosi pystyy jostain syystä piirtämään ainoastaan 45 asteen välein, joten rot + 20 on sama vaihtaa rot + 45, jotta joka painalluksella saadaan uusi kuva. Muuta yleistä pientä optimointia myös ja tässä olisi minun lopputulos. En ihan tarkkaan tajua tämän toimintaa, joten siinä kaikki (muutin myös tyyliasun törkeästi itselleni sopivaksi).
Wou, kiitoksia paljon! CoolBasicilla on jonkin verran tullut koodailtua, mutta hyvin vähän, joten kaikkea en tiedä vielä. En osannut odottaa että SetWindow vie noinkin paljon tehoa ja ylipäätään stabiiliutta - juuri tämän komennon takia ohjelma jumittikin usein. Tulipahan opittua lisää :D Tämän koitin "portata" edes jotenkin CB:lle, joten koodin ulkoasuun en kiinnittänyt liikaa huomiota, kuten en liikaa optimointiinkaan. Parempaa saan sitten aikaan kun opin enemmän.
EDIT:

Kiitos vielä kerran, kun siistit ja optimoit, Jani! ;)
EDIT 2:
Kokeilin hieman teksturointia, mutta ei ihan toivottua lopputulosta löytynyt.. Latauslinkissä, koska siinä on kuva mukana. Janin ekaa edittiä käytin pohjana.
EDIT 3:
Janin kanssa yhteistyössä tekstuurit korjattu, linkki päivitetty

Attachments
3d.rar
Lisätty kontrollit + opt. - 27.3.
(971 Bytes) Downloaded 835 times
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Efektit

Post by CCE »

Maailman ensimmäinen Han Solo -zoomeri!

Code: Select all

SCREEN 640, 360

const LINE_COUNT = 354
const POS_X = 0
const POS_Y = 1
dim list(LINE_COUNT, 1) as float
dim list2(LINE_COUNT, 1) as float

list(0, POS_X) = 311.0
list(0, POS_Y) = 5.0
list(1, POS_X) = 364.0
list(1, POS_Y) = 14.0
list(2, POS_X) = 391.0
list(2, POS_Y) = 30.0
list(3, POS_X) = 414.0
list(3, POS_Y) = 60.0
list(4, POS_X) = 434.0
list(4, POS_Y) = 96.0
list(5, POS_X) = 441.0
list(5, POS_Y) = 145.0
list(6, POS_X) = 442.0
list(6, POS_Y) = 188.0
list(7, POS_X) = 428.0
list(7, POS_Y) = 221.0
list(8, POS_X) = 412.0
list(8, POS_Y) = 252.0
list(9, POS_X) = 412.0
list(9, POS_Y) = 269.0
list(10, POS_X) = 408.0
list(10, POS_Y) = 280.0
list(11, POS_X) = 401.0
list(11, POS_Y) = 284.0
list(12, POS_X) = 390.0
list(12, POS_Y) = 287.0
list(13, POS_X) = 385.0
list(13, POS_Y) = 283.0
list(14, POS_X) = -1.0
list(14, POS_Y) = -1.0
list(15, POS_X) = 386.0
list(15, POS_Y) = 279.0
list(16, POS_X) = 393.0
list(16, POS_Y) = 245.0
list(17, POS_X) = 410.0
list(17, POS_Y) = 241.0
list(18, POS_X) = 415.0
list(18, POS_Y) = 224.0
list(19, POS_X) = 416.0
list(19, POS_Y) = 212.0
list(20, POS_X) = 407.0
list(20, POS_Y) = 214.0
list(21, POS_X) = 403.0
list(21, POS_Y) = 221.0
list(22, POS_X) = 400.0
list(22, POS_Y) = 232.0
list(23, POS_X) = 396.0
list(23, POS_Y) = 234.0
list(24, POS_X) = -1.0
list(24, POS_Y) = -1.0
list(25, POS_X) = 392.0
list(25, POS_Y) = 231.0
list(26, POS_X) = 393.0
list(26, POS_Y) = 215.0
list(27, POS_X) = 385.0
list(27, POS_Y) = 201.0
list(28, POS_X) = 383.0
list(28, POS_Y) = 189.0
list(29, POS_X) = 380.0
list(29, POS_Y) = 173.0
list(30, POS_X) = 377.0
list(30, POS_Y) = 125.0
list(31, POS_X) = 369.0
list(31, POS_Y) = 110.0
list(32, POS_X) = 346.0
list(32, POS_Y) = 105.0
list(33, POS_X) = 318.0
list(33, POS_Y) = 114.0
list(34, POS_X) = 288.0
list(34, POS_Y) = 128.0
list(35, POS_X) = 269.0
list(35, POS_Y) = 133.0
list(36, POS_X) = 239.0
list(36, POS_Y) = 129.0
list(37, POS_X) = 222.0
list(37, POS_Y) = 128.0
list(38, POS_X) = 212.0
list(38, POS_Y) = 137.0
list(39, POS_X) = 206.0
list(39, POS_Y) = 154.0
list(40, POS_X) = 204.0
list(40, POS_Y) = 178.0
list(41, POS_X) = 203.0
list(41, POS_Y) = 197.0
list(42, POS_X) = 200.0
list(42, POS_Y) = 211.0
list(43, POS_X) = 203.0
list(43, POS_Y) = 223.0
list(44, POS_X) = 191.0
list(44, POS_Y) = 198.0
list(45, POS_X) = 182.0
list(45, POS_Y) = 199.0
list(46, POS_X) = 177.0
list(46, POS_Y) = 200.0
list(47, POS_X) = 167.0
list(47, POS_Y) = 194.0
list(48, POS_X) = -1.0
list(48, POS_Y) = -1.0
list(49, POS_X) = 167.0
list(49, POS_Y) = 191.0
list(50, POS_X) = 169.0
list(50, POS_Y) = 153.0
list(51, POS_X) = 169.0
list(51, POS_Y) = 125.0
list(52, POS_X) = 177.0
list(52, POS_Y) = 92.0
list(53, POS_X) = 187.0
list(53, POS_Y) = 67.0
list(54, POS_X) = 194.0
list(54, POS_Y) = 56.0
list(55, POS_X) = 211.0
list(55, POS_Y) = 32.0
list(56, POS_X) = 226.0
list(56, POS_Y) = 22.0
list(57, POS_X) = 241.0
list(57, POS_Y) = 15.0
list(58, POS_X) = 265.0
list(58, POS_Y) = 9.0
list(59, POS_X) = 315.0
list(59, POS_Y) = 6.0
list(60, POS_X) = 332.0
list(60, POS_Y) = 7.0
list(61, POS_X) = -1.0
list(61, POS_Y) = -1.0
list(62, POS_X) = 187.0
list(62, POS_Y) = 198.0
list(63, POS_X) = 185.0
list(63, POS_Y) = 214.0
list(64, POS_X) = 188.0
list(64, POS_Y) = 226.0
list(65, POS_X) = 196.0
list(65, POS_Y) = 233.0
list(66, POS_X) = 204.0
list(66, POS_Y) = 236.0
list(67, POS_X) = -1.0
list(67, POS_Y) = -1.0
list(68, POS_X) = 192.0
list(68, POS_Y) = 202.0
list(69, POS_X) = 194.0
list(69, POS_Y) = 219.0
list(70, POS_X) = 202.0
list(70, POS_Y) = 228.0
list(71, POS_X) = -1.0
list(71, POS_Y) = -1.0
list(72, POS_X) = 204.0
list(72, POS_Y) = 240.0
list(73, POS_X) = 206.0
list(73, POS_Y) = 263.0
list(74, POS_X) = 212.0
list(74, POS_Y) = 285.0
list(75, POS_X) = 225.0
list(75, POS_Y) = 305.0
list(76, POS_X) = 236.0
list(76, POS_Y) = 319.0
list(77, POS_X) = 254.0
list(77, POS_Y) = 344.0
list(78, POS_X) = 263.0
list(78, POS_Y) = 352.0
list(79, POS_X) = 278.0
list(79, POS_Y) = 355.0
list(80, POS_X) = 289.0
list(80, POS_Y) = 353.0
list(81, POS_X) = 307.0
list(81, POS_Y) = 356.0
list(82, POS_X) = 324.0
list(82, POS_Y) = 348.0
list(83, POS_X) = 338.0
list(83, POS_Y) = 335.0
list(84, POS_X) = 356.0
list(84, POS_Y) = 320.0
list(85, POS_X) = 372.0
list(85, POS_Y) = 298.0
list(86, POS_X) = 382.0
list(86, POS_Y) = 285.0
list(87, POS_X) = -1.0
list(87, POS_Y) = -1.0
list(88, POS_X) = 250.0
list(88, POS_Y) = 295.0
list(89, POS_X) = 267.0
list(89, POS_Y) = 300.0
list(90, POS_X) = 275.0
list(90, POS_Y) = 299.0
list(91, POS_X) = 283.0
list(91, POS_Y) = 303.0
list(92, POS_X) = 295.0
list(92, POS_Y) = 302.0
list(93, POS_X) = 308.0
list(93, POS_Y) = 303.0
list(94, POS_X) = 327.0
list(94, POS_Y) = 299.0
list(95, POS_X) = 323.0
list(95, POS_Y) = 309.0
list(96, POS_X) = 312.0
list(96, POS_Y) = 317.0
list(97, POS_X) = 289.0
list(97, POS_Y) = 319.0
list(98, POS_X) = 274.0
list(98, POS_Y) = 314.0
list(99, POS_X) = 264.0
list(99, POS_Y) = 308.0
list(100, POS_X) = 251.0
list(100, POS_Y) = 297.0
list(101, POS_X) = -1.0
list(101, POS_Y) = -1.0
list(102, POS_X) = 253.0
list(102, POS_Y) = 294.0
list(103, POS_X) = 265.0
list(103, POS_Y) = 290.0
list(104, POS_X) = 276.0
list(104, POS_Y) = 295.0
list(105, POS_X) = 285.0
list(105, POS_Y) = 297.0
list(106, POS_X) = 297.0
list(106, POS_Y) = 296.0
list(107, POS_X) = 309.0
list(107, POS_Y) = 296.0
list(108, POS_X) = 324.0
list(108, POS_Y) = 299.0
list(109, POS_X) = -1.0
list(109, POS_Y) = -1.0
list(110, POS_X) = 283.0
list(110, POS_Y) = 283.0
list(111, POS_X) = 280.0
list(111, POS_Y) = 290.0
list(112, POS_X) = 283.0
list(112, POS_Y) = 296.0
list(113, POS_X) = -1.0
list(113, POS_Y) = -1.0
list(114, POS_X) = 289.0
list(114, POS_Y) = 283.0
list(115, POS_X) = 294.0
list(115, POS_Y) = 288.0
list(116, POS_X) = 291.0
list(116, POS_Y) = 294.0
list(117, POS_X) = -1.0
list(117, POS_Y) = -1.0
list(118, POS_X) = 321.0
list(118, POS_Y) = 264.0
list(119, POS_X) = 345.0
list(119, POS_Y) = 298.0
list(120, POS_X) = -1.0
list(120, POS_Y) = -1.0
list(121, POS_X) = 262.0
list(121, POS_Y) = 245.0
list(122, POS_X) = 245.0
list(122, POS_Y) = 276.0
list(123, POS_X) = -1.0
list(123, POS_Y) = -1.0
list(124, POS_X) = 301.0
list(124, POS_Y) = 191.0
list(125, POS_X) = 295.0
list(125, POS_Y) = 211.0
list(126, POS_X) = 299.0
list(126, POS_Y) = 234.0
list(127, POS_X) = 308.0
list(127, POS_Y) = 253.0
list(128, POS_X) = 314.0
list(128, POS_Y) = 268.0
list(129, POS_X) = 306.0
list(129, POS_Y) = 273.0
list(130, POS_X) = 297.0
list(130, POS_Y) = 269.0
list(131, POS_X) = 290.0
list(131, POS_Y) = 274.0
list(132, POS_X) = 275.0
list(132, POS_Y) = 275.0
list(133, POS_X) = 268.0
list(133, POS_Y) = 269.0
list(134, POS_X) = 267.0
list(134, POS_Y) = 264.0
list(135, POS_X) = 266.0
list(135, POS_Y) = 258.0
list(136, POS_X) = 271.0
list(136, POS_Y) = 249.0
list(137, POS_X) = 277.0
list(137, POS_Y) = 205.0
list(138, POS_X) = -1.0
list(138, POS_Y) = -1.0
list(139, POS_X) = 316.0
list(139, POS_Y) = 327.0
list(140, POS_X) = 312.0
list(140, POS_Y) = 331.0
list(141, POS_X) = 316.0
list(141, POS_Y) = 333.0
list(142, POS_X) = 321.0
list(142, POS_Y) = 330.0
list(143, POS_X) = 316.0
list(143, POS_Y) = 328.0
list(144, POS_X) = -1.0
list(144, POS_Y) = -1.0
list(145, POS_X) = 265.0
list(145, POS_Y) = 195.0
list(146, POS_X) = 253.0
list(146, POS_Y) = 190.0
list(147, POS_X) = 237.0
list(147, POS_Y) = 192.0
list(148, POS_X) = 229.0
list(148, POS_Y) = 198.0
list(149, POS_X) = 238.0
list(149, POS_Y) = 204.0
list(150, POS_X) = 253.0
list(150, POS_Y) = 204.0
list(151, POS_X) = 264.0
list(151, POS_Y) = 204.0
list(152, POS_X) = 268.0
list(152, POS_Y) = 205.0
list(153, POS_X) = 269.0
list(153, POS_Y) = 198.0
list(154, POS_X) = 266.0
list(154, POS_Y) = 196.0
list(155, POS_X) = -1.0
list(155, POS_Y) = -1.0
list(156, POS_X) = 316.0
list(156, POS_Y) = 203.0
list(157, POS_X) = 324.0
list(157, POS_Y) = 192.0
list(158, POS_X) = 335.0
list(158, POS_Y) = 190.0
list(159, POS_X) = 346.0
list(159, POS_Y) = 192.0
list(160, POS_X) = 358.0
list(160, POS_Y) = 199.0
list(161, POS_X) = 359.0
list(161, POS_Y) = 202.0
list(162, POS_X) = 349.0
list(162, POS_Y) = 205.0
list(163, POS_X) = 339.0
list(163, POS_Y) = 206.0
list(164, POS_X) = 329.0
list(164, POS_Y) = 205.0
list(165, POS_X) = 318.0
list(165, POS_Y) = 204.0
list(166, POS_X) = -1.0
list(166, POS_Y) = -1.0
list(167, POS_X) = 314.0
list(167, POS_Y) = 205.0
list(168, POS_X) = 313.0
list(168, POS_Y) = 211.0
list(169, POS_X) = 323.0
list(169, POS_Y) = 212.0
list(170, POS_X) = 334.0
list(170, POS_Y) = 214.0
list(171, POS_X) = 346.0
list(171, POS_Y) = 211.0
list(172, POS_X) = 360.0
list(172, POS_Y) = 202.0
list(173, POS_X) = -1.0
list(173, POS_Y) = -1.0
list(174, POS_X) = 271.0
list(174, POS_Y) = 205.0
list(175, POS_X) = 271.0
list(175, POS_Y) = 209.0
list(176, POS_X) = 263.0
list(176, POS_Y) = 210.0
list(177, POS_X) = 247.0
list(177, POS_Y) = 211.0
list(178, POS_X) = 234.0
list(178, POS_Y) = 211.0
list(179, POS_X) = 227.0
list(179, POS_Y) = 199.0
list(180, POS_X) = -1.0
list(180, POS_Y) = -1.0
list(181, POS_X) = 267.0
list(181, POS_Y) = 182.0
list(182, POS_X) = 250.0
list(182, POS_Y) = 182.0
list(183, POS_X) = 230.0
list(183, POS_Y) = 181.0
list(184, POS_X) = 220.0
list(184, POS_Y) = 180.0
list(185, POS_X) = 216.0
list(185, POS_Y) = 186.0
list(186, POS_X) = 226.0
list(186, POS_Y) = 189.0
list(187, POS_X) = 256.0
list(187, POS_Y) = 187.0
list(188, POS_X) = 265.0
list(188, POS_Y) = 186.0
list(189, POS_X) = 268.0
list(189, POS_Y) = 181.0
list(190, POS_X) = -1.0
list(190, POS_Y) = -1.0
list(191, POS_X) = 310.0
list(191, POS_Y) = 185.0
list(192, POS_X) = 335.0
list(192, POS_Y) = 179.0
list(193, POS_X) = 351.0
list(193, POS_Y) = 180.0
list(194, POS_X) = 364.0
list(194, POS_Y) = 182.0
list(195, POS_X) = 367.0
list(195, POS_Y) = 189.0
list(196, POS_X) = 361.0
list(196, POS_Y) = 190.0
list(197, POS_X) = 350.0
list(197, POS_Y) = 186.0
list(198, POS_X) = 337.0
list(198, POS_Y) = 186.0
list(199, POS_X) = 325.0
list(199, POS_Y) = 188.0
list(200, POS_X) = 310.0
list(200, POS_Y) = 188.0
list(201, POS_X) = 311.0
list(201, POS_Y) = 183.0
list(202, POS_X) = -1.0
list(202, POS_Y) = -1.0
list(203, POS_X) = 349.0
list(203, POS_Y) = 144.0
list(204, POS_X) = 305.0
list(204, POS_Y) = 149.0
list(205, POS_X) = 295.0
list(205, POS_Y) = 156.0
list(206, POS_X) = 267.0
list(206, POS_Y) = 150.0
list(207, POS_X) = 251.0
list(207, POS_Y) = 153.0
list(208, POS_X) = 236.0
list(208, POS_Y) = 157.0
list(209, POS_X) = -1.0
list(209, POS_Y) = -1.0
list(210, POS_X) = 352.0
list(210, POS_Y) = 158.0
list(211, POS_X) = 323.0
list(211, POS_Y) = 162.0
list(212, POS_X) = 307.0
list(212, POS_Y) = 166.0
list(213, POS_X) = 275.0
list(213, POS_Y) = 166.0
list(214, POS_X) = 251.0
list(214, POS_Y) = 165.0
list(215, POS_X) = 228.0
list(215, POS_Y) = 168.0
list(216, POS_X) = -1.0
list(216, POS_Y) = -1.0
list(217, POS_X) = 386.0
list(217, POS_Y) = 291.0
list(218, POS_X) = 381.0
list(218, POS_Y) = 317.0
list(219, POS_X) = 374.0
list(219, POS_Y) = 339.0
list(220, POS_X) = 366.0
list(220, POS_Y) = 354.0
list(221, POS_X) = -1.0
list(221, POS_Y) = -1.0
list(222, POS_X) = 391.0
list(222, POS_Y) = 296.0
list(223, POS_X) = 388.0
list(223, POS_Y) = 320.0
list(224, POS_X) = 383.0
list(224, POS_Y) = 337.0
list(225, POS_X) = 373.0
list(225, POS_Y) = 356.0
list(226, POS_X) = -1.0
list(226, POS_Y) = -1.0
list(227, POS_X) = 228.0
list(227, POS_Y) = 314.0
list(228, POS_X) = 230.0
list(228, POS_Y) = 334.0
list(229, POS_X) = 244.0
list(229, POS_Y) = 355.0
list(230, POS_X) = -1.0
list(230, POS_Y) = -1.0
list(231, POS_X) = 223.0
list(231, POS_Y) = 314.0
list(232, POS_X) = 223.0
list(232, POS_Y) = 336.0
list(233, POS_X) = 228.0
list(233, POS_Y) = 357.0
list(234, POS_X) = -1.0
list(234, POS_Y) = -1.0
list(235, POS_X) = 205.0
list(235, POS_Y) = 271.0
list(236, POS_X) = 153.0
list(236, POS_Y) = 297.0
list(237, POS_X) = 95.0
list(237, POS_Y) = 323.0
list(238, POS_X) = 84.0
list(238, POS_Y) = 354.0
list(239, POS_X) = -1.0
list(239, POS_Y) = -1.0
list(240, POS_X) = 93.0
list(240, POS_Y) = 322.0
list(241, POS_X) = 67.0
list(241, POS_Y) = 340.0
list(242, POS_X) = 57.0
list(242, POS_Y) = 356.0
list(243, POS_X) = -1.0
list(243, POS_Y) = -1.0
list(244, POS_X) = 413.0
list(244, POS_Y) = 267.0
list(245, POS_X) = 465.0
list(245, POS_Y) = 300.0
list(246, POS_X) = 518.0
list(246, POS_Y) = 312.0
list(247, POS_X) = 527.0
list(247, POS_Y) = 322.0
list(248, POS_X) = 536.0
list(248, POS_Y) = 353.0
list(249, POS_X) = -1.0
list(249, POS_Y) = -1.0
list(250, POS_X) = 202.0
list(250, POS_Y) = 239.0
list(251, POS_X) = 189.0
list(251, POS_Y) = 241.0
list(252, POS_X) = 184.0
list(252, POS_Y) = 235.0
list(253, POS_X) = 182.0
list(253, POS_Y) = 221.0
list(254, POS_X) = 183.0
list(254, POS_Y) = 216.0
list(255, POS_X) = -1.0
list(255, POS_Y) = -1.0
list(256, POS_X) = 202.0
list(256, POS_Y) = 244.0
list(257, POS_X) = 194.0
list(257, POS_Y) = 252.0
list(258, POS_X) = 198.0
list(258, POS_Y) = 260.0
list(259, POS_X) = 203.0
list(259, POS_Y) = 268.0
list(260, POS_X) = -1.0
list(260, POS_Y) = -1.0
list(261, POS_X) = 301.0
list(261, POS_Y) = 78.0
list(262, POS_X) = 281.0
list(262, POS_Y) = 87.0
list(263, POS_X) = 256.0
list(263, POS_Y) = 86.0
list(264, POS_X) = 239.0
list(264, POS_Y) = 85.0
list(265, POS_X) = 209.0
list(265, POS_Y) = 105.0
list(266, POS_X) = -1.0
list(266, POS_Y) = -1.0
list(267, POS_X) = 296.0
list(267, POS_Y) = 75.0
list(268, POS_X) = 271.0
list(268, POS_Y) = 81.0
list(269, POS_X) = 244.0
list(269, POS_Y) = 78.0
list(270, POS_X) = 220.0
list(270, POS_Y) = 90.0
list(271, POS_X) = 210.0
list(271, POS_Y) = 97.0
list(272, POS_X) = -1.0
list(272, POS_Y) = -1.0
list(273, POS_X) = 327.0
list(273, POS_Y) = 46.0
list(274, POS_X) = 349.0
list(274, POS_Y) = 44.0
list(275, POS_X) = 370.0
list(275, POS_Y) = 51.0
list(276, POS_X) = 392.0
list(276, POS_Y) = 67.0
list(277, POS_X) = -1.0
list(277, POS_Y) = -1.0
list(278, POS_X) = 331.0
list(278, POS_Y) = 37.0
list(279, POS_X) = 347.0
list(279, POS_Y) = 32.0
list(280, POS_X) = 366.0
list(280, POS_Y) = 39.0
list(281, POS_X) = 395.0
list(281, POS_Y) = 55.0
list(282, POS_X) = -1.0
list(282, POS_Y) = -1.0
list(283, POS_X) = 349.0
list(283, POS_Y) = 49.0
list(284, POS_X) = 369.0
list(284, POS_Y) = 64.0
list(285, POS_X) = -1.0
list(285, POS_Y) = -1.0
list(286, POS_X) = 353.0
list(286, POS_Y) = 78.0
list(287, POS_X) = 382.0
list(287, POS_Y) = 89.0
list(288, POS_X) = 401.0
list(288, POS_Y) = 104.0
list(289, POS_X) = 411.0
list(289, POS_Y) = 122.0
list(290, POS_X) = -1.0
list(290, POS_Y) = -1.0
list(291, POS_X) = 213.0
list(291, POS_Y) = 69.0
list(292, POS_X) = 204.0
list(292, POS_Y) = 80.0
list(293, POS_X) = -1.0
list(293, POS_Y) = -1.0
list(294, POS_X) = 207.0
list(294, POS_Y) = 63.0
list(295, POS_X) = 196.0
list(295, POS_Y) = 70.0
list(296, POS_X) = -1.0
list(296, POS_Y) = -1.0
list(297, POS_X) = 202.0
list(297, POS_Y) = 94.0
list(298, POS_X) = 189.0
list(298, POS_Y) = 106.0
list(299, POS_X) = -1.0
list(299, POS_Y) = -1.0
list(300, POS_X) = 182.0
list(300, POS_Y) = 129.0
list(301, POS_X) = 178.0
list(301, POS_Y) = 142.0
list(302, POS_X) = -1.0
list(302, POS_Y) = -1.0
list(303, POS_X) = 316.0
list(303, POS_Y) = 27.0
list(304, POS_X) = 327.0
list(304, POS_Y) = 18.0
list(305, POS_X) = 338.0
list(305, POS_Y) = 16.0
list(306, POS_X) = 360.0
list(306, POS_Y) = 17.0
list(307, POS_X) = 372.0
list(307, POS_Y) = 26.0
list(308, POS_X) = -1.0
list(308, POS_Y) = -1.0
list(309, POS_X) = 328.0
list(309, POS_Y) = 26.0
list(310, POS_X) = 342.0
list(310, POS_Y) = 23.0
list(311, POS_X) = 365.0
list(311, POS_Y) = 28.0
list(312, POS_X) = 375.0
list(312, POS_Y) = 35.0
list(313, POS_X) = -1.0
list(313, POS_Y) = -1.0
list(314, POS_X) = 386.0
list(314, POS_Y) = 115.0
list(315, POS_X) = 405.0
list(315, POS_Y) = 143.0
list(316, POS_X) = -1.0
list(316, POS_Y) = -1.0
list(317, POS_X) = 386.0
list(317, POS_Y) = 142.0
list(318, POS_X) = 391.0
list(318, POS_Y) = 153.0
list(319, POS_X) = 384.0
list(319, POS_Y) = 154.0
list(320, POS_X) = 386.0
list(320, POS_Y) = 144.0
list(321, POS_X) = -1.0
list(321, POS_Y) = -1.0
list(322, POS_X) = 415.0
list(322, POS_Y) = 162.0
list(323, POS_X) = -1.0
list(323, POS_Y) = -1.0
list(324, POS_X) = 428.0
list(324, POS_Y) = 185.0
list(325, POS_X) = 426.0
list(325, POS_Y) = 202.0
list(326, POS_X) = -1.0
list(326, POS_Y) = -1.0
list(327, POS_X) = 347.0
list(327, POS_Y) = 62.0
list(328, POS_X) = 357.0
list(328, POS_Y) = 67.0
list(329, POS_X) = -1.0
list(329, POS_Y) = -1.0
list(330, POS_X) = 245.0
list(330, POS_Y) = 32.0
list(331, POS_X) = 230.0
list(331, POS_Y) = 45.0
list(332, POS_X) = -1.0
list(332, POS_Y) = -1.0
list(333, POS_X) = 232.0
list(333, POS_Y) = 55.0
list(334, POS_X) = 225.0
list(334, POS_Y) = 63.0
list(335, POS_X) = -1.0
list(335, POS_Y) = -1.0
list(336, POS_X) = 225.0
list(336, POS_Y) = 58.0
list(337, POS_X) = 204.0
list(337, POS_Y) = 82.0
list(338, POS_X) = -1.0
list(338, POS_Y) = -1.0
list(339, POS_X) = 225.0
list(339, POS_Y) = 29.0
list(340, POS_X) = 211.0
list(340, POS_Y) = 46.0
list(341, POS_X) = -1.0
list(341, POS_Y) = -1.0
list(342, POS_X) = 197.0
list(342, POS_Y) = 156.0
list(343, POS_X) = 192.0
list(343, POS_Y) = 170.0
list(344, POS_X) = -1.0
list(344, POS_Y) = -1.0
list(345, POS_X) = 400.0
list(345, POS_Y) = 73.0
list(346, POS_X) = 414.0
list(346, POS_Y) = 93.0
list(347, POS_X) = -1.0
list(347, POS_Y) = -1.0
list(348, POS_X) = 318.0
list(348, POS_Y) = 199.0
list(349, POS_X) = 312.0
list(349, POS_Y) = 201.0
list(350, POS_X) = 316.0
list(350, POS_Y) = 203.0
list(351, POS_X) = -1.0
list(351, POS_Y) = -1.0
list(352, POS_X) = 264.0
list(352, POS_Y) = 199.0
list(353, POS_X) = 259.0
list(353, POS_Y) = 203.0
list(354, POS_X) = -1.0
list(354, POS_Y) = -1.0



'img = loadImage("hansolo.jpg")

'f = openToEdit("fug.txt")
'seekFile f, fileSize("fug.txt")

speed = 15 // fps = 15
frames = speed * 10 // 10 seconds
frameLimit speed
global f_ofs_x as float
global f_ofs_y as float
f_ofs_x = -248.0
f_ofs_y = -198.0
dim eyes(1, 1) as float
eyes(0, 0) = 248' + f_ofs_x
eyes(0, 1) = 198' + f_ofs_y
eyes(1, 0) = 335' + f_ofs_x
eyes(1, 1) = 198' + f_ofs_y

start = timer()
frame = 0
ind = 0
img_y = 15


function draw(xx#, yy#, s#, iter)
	if iter <= 0 then return 0
	
	for i = 0 to LINE_COUNT
r = 1
x1# = list(i, POS_X) 
y1# = list(i, POS_Y) 

list2(i, POS_X)  = x1'+ rand(-r, r)
list2(i, POS_Y) = y1 '+ rand(-r, r)

if x1 <> -1 and y1 <> -1 then
list2(i, POS_X)  = (x1+ rand(-r, r) + f_ofs_x)*s + xx
list2(i, POS_Y) = (y1+ rand(-r, r) +f_ofs_y)*s + yy
endif
	next i
	if iter mod 2 = 0 then
		color 255,0,0
	else
		color 255,255,255
	endif
	for i = 1 to LINE_COUNT
		x1# = list2(i, POS_X)
		y1# = list2(i, POS_Y)
		x2# = list2(i+1, POS_X)
		y2# = list2(i+1, POS_Y)
		
		
		if (x2 <> -1 and y2 <> -1) and (x1 <> -1 and y2 <> -1) then
			line x1, y1, x2, y2
		endif
	next i
	
	
	for i = 0 to 1
		ex# = (eyes(i, 0) + f_ofs_x)*s + xx
		ey# = (eyes(i, 1) + f_ofs_y)*s + yy
		draw(ex, ey, 0.03*s, iter-1)
		'box ex,ey , 8,8,1 
	next i
endFunction
frames = 63
scale# = 1.0
temp = makeImage(screenWidth(), screenHeight())

repeat
	//drawImage img, 0, img_y
	'453 167
	mx# = mouseX()
	my# = mouseY()
	'scale = scale + mouseMoveZ()*scale*0.1
	scale = 2.0^(frame*0.16)

	f_ofs_x = f_ofs_x + (-leftKey() + rightKey())*0.1
	f_ofs_y = f_ofs_y + (-upKey() + downKey())*0.1
	
'drawToImage temp
	'color 0,0,0
	'box 0,0,imageWidth(temp), imageHeight(temp), 1
	draw(453, 167, scale, 4)
'drawToScreen 
	
	'text 0,0,frame
	'text 0,12,(timer()-start) / 1000.0
	'text 0,24, ind + ": " + mx + ", "+ my
	'text 0,36, f_ofs_x + ", " + f_ofs_y
	
	drawScreen
	'setWindow "FPS " + FPS()
	'wait roundDown((1.0 / speed) * 1000)
	
	'saveImage temp, "frames/kuva" + frame + ".bmp"
	'if frame=frames-1 then end
	frame = (frame + 1) mod frames

	
	
REMSTART
	drawToImage img
	if mouseHit(1) or mouseHit(2) then
		
		if mouseHit(2) then
			mx = -1
			my = -1
		endif
		writeLine f, "("+ind+", POS_X) = " + mx
		writeLine f, "("+ind+", POS_Y) = " + my
		ind = ind + 1
		
		if mx <> -1 and my <> -1 and ind > 0 then
			line old_x#, old_y# - img_y, mx, my - img_y
		endif
		old_x# = mx
		old_y# = my
	endif
	drawToScreen
	
	if keyHit(cbKeySpace) then
		closeFile(f)
	endif
REMEND
forever
Last edited by CCE on Wed Apr 08, 2015 11:59 pm, edited 1 time in total.
Jopas jotakin

Re: Efektit

Post by Jopas jotakin »

CCE wrote:Maailman ensimmäinen Han Solo -zoomeri!

Code: Select all

SCREEN 640, 360

const LINE_COUNT = 354
const POS_X = 0
const POS_Y = 1
dim list(LINE_COUNT, 1) as float
dim list2(LINE_COUNT, 1) as float

list(0, POS_X) = 311.0
list(0, POS_Y) = 5.0
list(1, POS_X) = 364.0
list(1, POS_Y) = 14.0
list(2, POS_X) = 391.0
list(2, POS_Y) = 30.0
list(3, POS_X) = 414.0
list(3, POS_Y) = 60.0
list(4, POS_X) = 434.0
list(4, POS_Y) = 96.0
list(5, POS_X) = 441.0
list(5, POS_Y) = 145.0
list(6, POS_X) = 442.0
list(6, POS_Y) = 188.0
list(7, POS_X) = 428.0
list(7, POS_Y) = 221.0
list(8, POS_X) = 412.0
list(8, POS_Y) = 252.0
list(9, POS_X) = 412.0
list(9, POS_Y) = 269.0
list(10, POS_X) = 408.0
list(10, POS_Y) = 280.0
list(11, POS_X) = 401.0
list(11, POS_Y) = 284.0
list(12, POS_X) = 390.0
list(12, POS_Y) = 287.0
list(13, POS_X) = 385.0
list(13, POS_Y) = 283.0
list(14, POS_X) = -1.0
list(14, POS_Y) = -1.0
list(15, POS_X) = 386.0
list(15, POS_Y) = 279.0
list(16, POS_X) = 393.0
list(16, POS_Y) = 245.0
list(17, POS_X) = 410.0
list(17, POS_Y) = 241.0
list(18, POS_X) = 415.0
list(18, POS_Y) = 224.0
list(19, POS_X) = 416.0
list(19, POS_Y) = 212.0
list(20, POS_X) = 407.0
list(20, POS_Y) = 214.0
list(21, POS_X) = 403.0
list(21, POS_Y) = 221.0
list(22, POS_X) = 400.0
list(22, POS_Y) = 232.0
list(23, POS_X) = 396.0
list(23, POS_Y) = 234.0
list(24, POS_X) = -1.0
list(24, POS_Y) = -1.0
list(25, POS_X) = 392.0
list(25, POS_Y) = 231.0
list(26, POS_X) = 393.0
list(26, POS_Y) = 215.0
list(27, POS_X) = 385.0
list(27, POS_Y) = 201.0
list(28, POS_X) = 383.0
list(28, POS_Y) = 189.0
list(29, POS_X) = 380.0
list(29, POS_Y) = 173.0
list(30, POS_X) = 377.0
list(30, POS_Y) = 125.0
list(31, POS_X) = 369.0
list(31, POS_Y) = 110.0
list(32, POS_X) = 346.0
list(32, POS_Y) = 105.0
list(33, POS_X) = 318.0
list(33, POS_Y) = 114.0
list(34, POS_X) = 288.0
list(34, POS_Y) = 128.0
list(35, POS_X) = 269.0
list(35, POS_Y) = 133.0
list(36, POS_X) = 239.0
list(36, POS_Y) = 129.0
list(37, POS_X) = 222.0
list(37, POS_Y) = 128.0
list(38, POS_X) = 212.0
list(38, POS_Y) = 137.0
list(39, POS_X) = 206.0
list(39, POS_Y) = 154.0
list(40, POS_X) = 204.0
list(40, POS_Y) = 178.0
list(41, POS_X) = 203.0
list(41, POS_Y) = 197.0
list(42, POS_X) = 200.0
list(42, POS_Y) = 211.0
list(43, POS_X) = 203.0
list(43, POS_Y) = 223.0
list(44, POS_X) = 191.0
list(44, POS_Y) = 198.0
list(45, POS_X) = 182.0
list(45, POS_Y) = 199.0
list(46, POS_X) = 177.0
list(46, POS_Y) = 200.0
list(47, POS_X) = 167.0
list(47, POS_Y) = 194.0
list(48, POS_X) = -1.0
list(48, POS_Y) = -1.0
list(49, POS_X) = 167.0
list(49, POS_Y) = 191.0
list(50, POS_X) = 169.0
list(50, POS_Y) = 153.0
list(51, POS_X) = 169.0
list(51, POS_Y) = 125.0
list(52, POS_X) = 177.0
list(52, POS_Y) = 92.0
list(53, POS_X) = 187.0
list(53, POS_Y) = 67.0
list(54, POS_X) = 194.0
list(54, POS_Y) = 56.0
list(55, POS_X) = 211.0
list(55, POS_Y) = 32.0
list(56, POS_X) = 226.0
list(56, POS_Y) = 22.0
list(57, POS_X) = 241.0
list(57, POS_Y) = 15.0
list(58, POS_X) = 265.0
list(58, POS_Y) = 9.0
list(59, POS_X) = 315.0
list(59, POS_Y) = 6.0
list(60, POS_X) = 332.0
list(60, POS_Y) = 7.0
list(61, POS_X) = -1.0
list(61, POS_Y) = -1.0
list(62, POS_X) = 187.0
list(62, POS_Y) = 198.0
list(63, POS_X) = 185.0
list(63, POS_Y) = 214.0
list(64, POS_X) = 188.0
list(64, POS_Y) = 226.0
list(65, POS_X) = 196.0
list(65, POS_Y) = 233.0
list(66, POS_X) = 204.0
list(66, POS_Y) = 236.0
list(67, POS_X) = -1.0
list(67, POS_Y) = -1.0
list(68, POS_X) = 192.0
list(68, POS_Y) = 202.0
list(69, POS_X) = 194.0
list(69, POS_Y) = 219.0
list(70, POS_X) = 202.0
list(70, POS_Y) = 228.0
list(71, POS_X) = -1.0
list(71, POS_Y) = -1.0
list(72, POS_X) = 204.0
list(72, POS_Y) = 240.0
list(73, POS_X) = 206.0
list(73, POS_Y) = 263.0
list(74, POS_X) = 212.0
list(74, POS_Y) = 285.0
list(75, POS_X) = 225.0
list(75, POS_Y) = 305.0
list(76, POS_X) = 236.0
list(76, POS_Y) = 319.0
list(77, POS_X) = 254.0
list(77, POS_Y) = 344.0
list(78, POS_X) = 263.0
list(78, POS_Y) = 352.0
list(79, POS_X) = 278.0
list(79, POS_Y) = 355.0
list(80, POS_X) = 289.0
list(80, POS_Y) = 353.0
list(81, POS_X) = 307.0
list(81, POS_Y) = 356.0
list(82, POS_X) = 324.0
list(82, POS_Y) = 348.0
list(83, POS_X) = 338.0
list(83, POS_Y) = 335.0
list(84, POS_X) = 356.0
list(84, POS_Y) = 320.0
list(85, POS_X) = 372.0
list(85, POS_Y) = 298.0
list(86, POS_X) = 382.0
list(86, POS_Y) = 285.0
list(87, POS_X) = -1.0
list(87, POS_Y) = -1.0
list(88, POS_X) = 250.0
list(88, POS_Y) = 295.0
list(89, POS_X) = 267.0
list(89, POS_Y) = 300.0
list(90, POS_X) = 275.0
list(90, POS_Y) = 299.0
list(91, POS_X) = 283.0
list(91, POS_Y) = 303.0
list(92, POS_X) = 295.0
list(92, POS_Y) = 302.0
list(93, POS_X) = 308.0
list(93, POS_Y) = 303.0
list(94, POS_X) = 327.0
list(94, POS_Y) = 299.0
list(95, POS_X) = 323.0
list(95, POS_Y) = 309.0
list(96, POS_X) = 312.0
list(96, POS_Y) = 317.0
list(97, POS_X) = 289.0
list(97, POS_Y) = 319.0
list(98, POS_X) = 274.0
list(98, POS_Y) = 314.0
list(99, POS_X) = 264.0
list(99, POS_Y) = 308.0
list(100, POS_X) = 251.0
list(100, POS_Y) = 297.0
list(101, POS_X) = -1.0
list(101, POS_Y) = -1.0
list(102, POS_X) = 253.0
list(102, POS_Y) = 294.0
list(103, POS_X) = 265.0
list(103, POS_Y) = 290.0
list(104, POS_X) = 276.0
list(104, POS_Y) = 295.0
list(105, POS_X) = 285.0
list(105, POS_Y) = 297.0
list(106, POS_X) = 297.0
list(106, POS_Y) = 296.0
list(107, POS_X) = 309.0
list(107, POS_Y) = 296.0
list(108, POS_X) = 324.0
list(108, POS_Y) = 299.0
list(109, POS_X) = -1.0
list(109, POS_Y) = -1.0
list(110, POS_X) = 283.0
list(110, POS_Y) = 283.0
list(111, POS_X) = 280.0
list(111, POS_Y) = 290.0
list(112, POS_X) = 283.0
list(112, POS_Y) = 296.0
list(113, POS_X) = -1.0
list(113, POS_Y) = -1.0
list(114, POS_X) = 289.0
list(114, POS_Y) = 283.0
list(115, POS_X) = 294.0
list(115, POS_Y) = 288.0
list(116, POS_X) = 291.0
list(116, POS_Y) = 294.0
list(117, POS_X) = -1.0
list(117, POS_Y) = -1.0
list(118, POS_X) = 321.0
list(118, POS_Y) = 264.0
list(119, POS_X) = 345.0
list(119, POS_Y) = 298.0
list(120, POS_X) = -1.0
list(120, POS_Y) = -1.0
list(121, POS_X) = 262.0
list(121, POS_Y) = 245.0
list(122, POS_X) = 245.0
list(122, POS_Y) = 276.0
list(123, POS_X) = -1.0
list(123, POS_Y) = -1.0
list(124, POS_X) = 301.0
list(124, POS_Y) = 191.0
list(125, POS_X) = 295.0
list(125, POS_Y) = 211.0
list(126, POS_X) = 299.0
list(126, POS_Y) = 234.0
list(127, POS_X) = 308.0
list(127, POS_Y) = 253.0
list(128, POS_X) = 314.0
list(128, POS_Y) = 268.0
list(129, POS_X) = 306.0
list(129, POS_Y) = 273.0
list(130, POS_X) = 297.0
list(130, POS_Y) = 269.0
list(131, POS_X) = 290.0
list(131, POS_Y) = 274.0
list(132, POS_X) = 275.0
list(132, POS_Y) = 275.0
list(133, POS_X) = 268.0
list(133, POS_Y) = 269.0
list(134, POS_X) = 267.0
list(134, POS_Y) = 264.0
list(135, POS_X) = 266.0
list(135, POS_Y) = 258.0
list(136, POS_X) = 271.0
list(136, POS_Y) = 249.0
list(137, POS_X) = 277.0
list(137, POS_Y) = 205.0
list(138, POS_X) = -1.0
list(138, POS_Y) = -1.0
list(139, POS_X) = 316.0
list(139, POS_Y) = 327.0
list(140, POS_X) = 312.0
list(140, POS_Y) = 331.0
list(141, POS_X) = 316.0
list(141, POS_Y) = 333.0
list(142, POS_X) = 321.0
list(142, POS_Y) = 330.0
list(143, POS_X) = 316.0
list(143, POS_Y) = 328.0
list(144, POS_X) = -1.0
list(144, POS_Y) = -1.0
list(145, POS_X) = 265.0
list(145, POS_Y) = 195.0
list(146, POS_X) = 253.0
list(146, POS_Y) = 190.0
list(147, POS_X) = 237.0
list(147, POS_Y) = 192.0
list(148, POS_X) = 229.0
list(148, POS_Y) = 198.0
list(149, POS_X) = 238.0
list(149, POS_Y) = 204.0
list(150, POS_X) = 253.0
list(150, POS_Y) = 204.0
list(151, POS_X) = 264.0
list(151, POS_Y) = 204.0
list(152, POS_X) = 268.0
list(152, POS_Y) = 205.0
list(153, POS_X) = 269.0
list(153, POS_Y) = 198.0
list(154, POS_X) = 266.0
list(154, POS_Y) = 196.0
list(155, POS_X) = -1.0
list(155, POS_Y) = -1.0
list(156, POS_X) = 316.0
list(156, POS_Y) = 203.0
list(157, POS_X) = 324.0
list(157, POS_Y) = 192.0
list(158, POS_X) = 335.0
list(158, POS_Y) = 190.0
list(159, POS_X) = 346.0
list(159, POS_Y) = 192.0
list(160, POS_X) = 358.0
list(160, POS_Y) = 199.0
list(161, POS_X) = 359.0
list(161, POS_Y) = 202.0
list(162, POS_X) = 349.0
list(162, POS_Y) = 205.0
list(163, POS_X) = 339.0
list(163, POS_Y) = 206.0
list(164, POS_X) = 329.0
list(164, POS_Y) = 205.0
list(165, POS_X) = 318.0
list(165, POS_Y) = 204.0
list(166, POS_X) = -1.0
list(166, POS_Y) = -1.0
list(167, POS_X) = 314.0
list(167, POS_Y) = 205.0
list(168, POS_X) = 313.0
list(168, POS_Y) = 211.0
list(169, POS_X) = 323.0
list(169, POS_Y) = 212.0
list(170, POS_X) = 334.0
list(170, POS_Y) = 214.0
list(171, POS_X) = 346.0
list(171, POS_Y) = 211.0
list(172, POS_X) = 360.0
list(172, POS_Y) = 202.0
list(173, POS_X) = -1.0
list(173, POS_Y) = -1.0
list(174, POS_X) = 271.0
list(174, POS_Y) = 205.0
list(175, POS_X) = 271.0
list(175, POS_Y) = 209.0
list(176, POS_X) = 263.0
list(176, POS_Y) = 210.0
list(177, POS_X) = 247.0
list(177, POS_Y) = 211.0
list(178, POS_X) = 234.0
list(178, POS_Y) = 211.0
list(179, POS_X) = 227.0
list(179, POS_Y) = 199.0
list(180, POS_X) = -1.0
list(180, POS_Y) = -1.0
list(181, POS_X) = 267.0
list(181, POS_Y) = 182.0
list(182, POS_X) = 250.0
list(182, POS_Y) = 182.0
list(183, POS_X) = 230.0
list(183, POS_Y) = 181.0
list(184, POS_X) = 220.0
list(184, POS_Y) = 180.0
list(185, POS_X) = 216.0
list(185, POS_Y) = 186.0
list(186, POS_X) = 226.0
list(186, POS_Y) = 189.0
list(187, POS_X) = 256.0
list(187, POS_Y) = 187.0
list(188, POS_X) = 265.0
list(188, POS_Y) = 186.0
list(189, POS_X) = 268.0
list(189, POS_Y) = 181.0
list(190, POS_X) = -1.0
list(190, POS_Y) = -1.0
list(191, POS_X) = 310.0
list(191, POS_Y) = 185.0
list(192, POS_X) = 335.0
list(192, POS_Y) = 179.0
list(193, POS_X) = 351.0
list(193, POS_Y) = 180.0
list(194, POS_X) = 364.0
list(194, POS_Y) = 182.0
list(195, POS_X) = 367.0
list(195, POS_Y) = 189.0
list(196, POS_X) = 361.0
list(196, POS_Y) = 190.0
list(197, POS_X) = 350.0
list(197, POS_Y) = 186.0
list(198, POS_X) = 337.0
list(198, POS_Y) = 186.0
list(199, POS_X) = 325.0
list(199, POS_Y) = 188.0
list(200, POS_X) = 310.0
list(200, POS_Y) = 188.0
list(201, POS_X) = 311.0
list(201, POS_Y) = 183.0
list(202, POS_X) = -1.0
list(202, POS_Y) = -1.0
list(203, POS_X) = 349.0
list(203, POS_Y) = 144.0
list(204, POS_X) = 305.0
list(204, POS_Y) = 149.0
list(205, POS_X) = 295.0
list(205, POS_Y) = 156.0
list(206, POS_X) = 267.0
list(206, POS_Y) = 150.0
list(207, POS_X) = 251.0
list(207, POS_Y) = 153.0
list(208, POS_X) = 236.0
list(208, POS_Y) = 157.0
list(209, POS_X) = -1.0
list(209, POS_Y) = -1.0
list(210, POS_X) = 352.0
list(210, POS_Y) = 158.0
list(211, POS_X) = 323.0
list(211, POS_Y) = 162.0
list(212, POS_X) = 307.0
list(212, POS_Y) = 166.0
list(213, POS_X) = 275.0
list(213, POS_Y) = 166.0
list(214, POS_X) = 251.0
list(214, POS_Y) = 165.0
list(215, POS_X) = 228.0
list(215, POS_Y) = 168.0
list(216, POS_X) = -1.0
list(216, POS_Y) = -1.0
list(217, POS_X) = 386.0
list(217, POS_Y) = 291.0
list(218, POS_X) = 381.0
list(218, POS_Y) = 317.0
list(219, POS_X) = 374.0
list(219, POS_Y) = 339.0
list(220, POS_X) = 366.0
list(220, POS_Y) = 354.0
list(221, POS_X) = -1.0
list(221, POS_Y) = -1.0
list(222, POS_X) = 391.0
list(222, POS_Y) = 296.0
list(223, POS_X) = 388.0
list(223, POS_Y) = 320.0
list(224, POS_X) = 383.0
list(224, POS_Y) = 337.0
list(225, POS_X) = 373.0
list(225, POS_Y) = 356.0
list(226, POS_X) = -1.0
list(226, POS_Y) = -1.0
list(227, POS_X) = 228.0
list(227, POS_Y) = 314.0
list(228, POS_X) = 230.0
list(228, POS_Y) = 334.0
list(229, POS_X) = 244.0
list(229, POS_Y) = 355.0
list(230, POS_X) = -1.0
list(230, POS_Y) = -1.0
list(231, POS_X) = 223.0
list(231, POS_Y) = 314.0
list(232, POS_X) = 223.0
list(232, POS_Y) = 336.0
list(233, POS_X) = 228.0
list(233, POS_Y) = 357.0
list(234, POS_X) = -1.0
list(234, POS_Y) = -1.0
list(235, POS_X) = 205.0
list(235, POS_Y) = 271.0
list(236, POS_X) = 153.0
list(236, POS_Y) = 297.0
list(237, POS_X) = 95.0
list(237, POS_Y) = 323.0
list(238, POS_X) = 84.0
list(238, POS_Y) = 354.0
list(239, POS_X) = -1.0
list(239, POS_Y) = -1.0
list(240, POS_X) = 93.0
list(240, POS_Y) = 322.0
list(241, POS_X) = 67.0
list(241, POS_Y) = 340.0
list(242, POS_X) = 57.0
list(242, POS_Y) = 356.0
list(243, POS_X) = -1.0
list(243, POS_Y) = -1.0
list(244, POS_X) = 413.0
list(244, POS_Y) = 267.0
list(245, POS_X) = 465.0
list(245, POS_Y) = 300.0
list(246, POS_X) = 518.0
list(246, POS_Y) = 312.0
list(247, POS_X) = 527.0
list(247, POS_Y) = 322.0
list(248, POS_X) = 536.0
list(248, POS_Y) = 353.0
list(249, POS_X) = -1.0
list(249, POS_Y) = -1.0
list(250, POS_X) = 202.0
list(250, POS_Y) = 239.0
list(251, POS_X) = 189.0
list(251, POS_Y) = 241.0
list(252, POS_X) = 184.0
list(252, POS_Y) = 235.0
list(253, POS_X) = 182.0
list(253, POS_Y) = 221.0
list(254, POS_X) = 183.0
list(254, POS_Y) = 216.0
list(255, POS_X) = -1.0
list(255, POS_Y) = -1.0
list(256, POS_X) = 202.0
list(256, POS_Y) = 244.0
list(257, POS_X) = 194.0
list(257, POS_Y) = 252.0
list(258, POS_X) = 198.0
list(258, POS_Y) = 260.0
list(259, POS_X) = 203.0
list(259, POS_Y) = 268.0
list(260, POS_X) = -1.0
list(260, POS_Y) = -1.0
list(261, POS_X) = 301.0
list(261, POS_Y) = 78.0
list(262, POS_X) = 281.0
list(262, POS_Y) = 87.0
list(263, POS_X) = 256.0
list(263, POS_Y) = 86.0
list(264, POS_X) = 239.0
list(264, POS_Y) = 85.0
list(265, POS_X) = 209.0
list(265, POS_Y) = 105.0
list(266, POS_X) = -1.0
list(266, POS_Y) = -1.0
list(267, POS_X) = 296.0
list(267, POS_Y) = 75.0
list(268, POS_X) = 271.0
list(268, POS_Y) = 81.0
list(269, POS_X) = 244.0
list(269, POS_Y) = 78.0
list(270, POS_X) = 220.0
list(270, POS_Y) = 90.0
list(271, POS_X) = 210.0
list(271, POS_Y) = 97.0
list(272, POS_X) = -1.0
list(272, POS_Y) = -1.0
list(273, POS_X) = 327.0
list(273, POS_Y) = 46.0
list(274, POS_X) = 349.0
list(274, POS_Y) = 44.0
list(275, POS_X) = 370.0
list(275, POS_Y) = 51.0
list(276, POS_X) = 392.0
list(276, POS_Y) = 67.0
list(277, POS_X) = -1.0
list(277, POS_Y) = -1.0
list(278, POS_X) = 331.0
list(278, POS_Y) = 37.0
list(279, POS_X) = 347.0
list(279, POS_Y) = 32.0
list(280, POS_X) = 366.0
list(280, POS_Y) = 39.0
list(281, POS_X) = 395.0
list(281, POS_Y) = 55.0
list(282, POS_X) = -1.0
list(282, POS_Y) = -1.0
list(283, POS_X) = 349.0
list(283, POS_Y) = 49.0
list(284, POS_X) = 369.0
list(284, POS_Y) = 64.0
list(285, POS_X) = -1.0
list(285, POS_Y) = -1.0
list(286, POS_X) = 353.0
list(286, POS_Y) = 78.0
list(287, POS_X) = 382.0
list(287, POS_Y) = 89.0
list(288, POS_X) = 401.0
list(288, POS_Y) = 104.0
list(289, POS_X) = 411.0
list(289, POS_Y) = 122.0
list(290, POS_X) = -1.0
list(290, POS_Y) = -1.0
list(291, POS_X) = 213.0
list(291, POS_Y) = 69.0
list(292, POS_X) = 204.0
list(292, POS_Y) = 80.0
list(293, POS_X) = -1.0
list(293, POS_Y) = -1.0
list(294, POS_X) = 207.0
list(294, POS_Y) = 63.0
list(295, POS_X) = 196.0
list(295, POS_Y) = 70.0
list(296, POS_X) = -1.0
list(296, POS_Y) = -1.0
list(297, POS_X) = 202.0
list(297, POS_Y) = 94.0
list(298, POS_X) = 189.0
list(298, POS_Y) = 106.0
list(299, POS_X) = -1.0
list(299, POS_Y) = -1.0
list(300, POS_X) = 182.0
list(300, POS_Y) = 129.0
list(301, POS_X) = 178.0
list(301, POS_Y) = 142.0
list(302, POS_X) = -1.0
list(302, POS_Y) = -1.0
list(303, POS_X) = 316.0
list(303, POS_Y) = 27.0
list(304, POS_X) = 327.0
list(304, POS_Y) = 18.0
list(305, POS_X) = 338.0
list(305, POS_Y) = 16.0
list(306, POS_X) = 360.0
list(306, POS_Y) = 17.0
list(307, POS_X) = 372.0
list(307, POS_Y) = 26.0
list(308, POS_X) = -1.0
list(308, POS_Y) = -1.0
list(309, POS_X) = 328.0
list(309, POS_Y) = 26.0
list(310, POS_X) = 342.0
list(310, POS_Y) = 23.0
list(311, POS_X) = 365.0
list(311, POS_Y) = 28.0
list(312, POS_X) = 375.0
list(312, POS_Y) = 35.0
list(313, POS_X) = -1.0
list(313, POS_Y) = -1.0
list(314, POS_X) = 386.0
list(314, POS_Y) = 115.0
list(315, POS_X) = 405.0
list(315, POS_Y) = 143.0
list(316, POS_X) = -1.0
list(316, POS_Y) = -1.0
list(317, POS_X) = 386.0
list(317, POS_Y) = 142.0
list(318, POS_X) = 391.0
list(318, POS_Y) = 153.0
list(319, POS_X) = 384.0
list(319, POS_Y) = 154.0
list(320, POS_X) = 386.0
list(320, POS_Y) = 144.0
list(321, POS_X) = -1.0
list(321, POS_Y) = -1.0
list(322, POS_X) = 415.0
list(322, POS_Y) = 162.0
list(323, POS_X) = -1.0
list(323, POS_Y) = -1.0
list(324, POS_X) = 428.0
list(324, POS_Y) = 185.0
list(325, POS_X) = 426.0
list(325, POS_Y) = 202.0
list(326, POS_X) = -1.0
list(326, POS_Y) = -1.0
list(327, POS_X) = 347.0
list(327, POS_Y) = 62.0
list(328, POS_X) = 357.0
list(328, POS_Y) = 67.0
list(329, POS_X) = -1.0
list(329, POS_Y) = -1.0
list(330, POS_X) = 245.0
list(330, POS_Y) = 32.0
list(331, POS_X) = 230.0
list(331, POS_Y) = 45.0
list(332, POS_X) = -1.0
list(332, POS_Y) = -1.0
list(333, POS_X) = 232.0
list(333, POS_Y) = 55.0
list(334, POS_X) = 225.0
list(334, POS_Y) = 63.0
list(335, POS_X) = -1.0
list(335, POS_Y) = -1.0
list(336, POS_X) = 225.0
list(336, POS_Y) = 58.0
list(337, POS_X) = 204.0
list(337, POS_Y) = 82.0
list(338, POS_X) = -1.0
list(338, POS_Y) = -1.0
list(339, POS_X) = 225.0
list(339, POS_Y) = 29.0
list(340, POS_X) = 211.0
list(340, POS_Y) = 46.0
list(341, POS_X) = -1.0
list(341, POS_Y) = -1.0
list(342, POS_X) = 197.0
list(342, POS_Y) = 156.0
list(343, POS_X) = 192.0
list(343, POS_Y) = 170.0
list(344, POS_X) = -1.0
list(344, POS_Y) = -1.0
list(345, POS_X) = 400.0
list(345, POS_Y) = 73.0
list(346, POS_X) = 414.0
list(346, POS_Y) = 93.0
list(347, POS_X) = -1.0
list(347, POS_Y) = -1.0
list(348, POS_X) = 318.0
list(348, POS_Y) = 199.0
list(349, POS_X) = 312.0
list(349, POS_Y) = 201.0
list(350, POS_X) = 316.0
list(350, POS_Y) = 203.0
list(351, POS_X) = -1.0
list(351, POS_Y) = -1.0
list(352, POS_X) = 264.0
list(352, POS_Y) = 199.0
list(353, POS_X) = 259.0
list(353, POS_Y) = 203.0
list(354, POS_X) = -1.0
list(354, POS_Y) = -1.0



'img = loadImage("hansolo.jpg")

'f = openToEdit("fug.txt")
'seekFile f, fileSize("fug.txt")

speed = 15 // fps = 15
frames = speed * 10 // 10 seconds
frameLimit speed
global f_ofs_x as float
global f_ofs_y as float
f_ofs_x = -248.0
f_ofs_y = -198.0
dim eyes(1, 1) as float
eyes(0, 0) = 248' + f_ofs_x
eyes(0, 1) = 198' + f_ofs_y
eyes(1, 0) = 335' + f_ofs_x
eyes(1, 1) = 198' + f_ofs_y

start = timer()
frame = 0
ind = 0
img_y = 15


function draw(xx#, yy#, s#, iter)
	if iter <= 0 then return 0
	
	for i = 0 to LINE_COUNT
r = 1
x1# = list(i, POS_X) 
y1# = list(i, POS_Y) 

list2(i, POS_X)  = x1'+ rand(-r, r)
list2(i, POS_Y) = y1 '+ rand(-r, r)

if x1 <> -1 and y1 <> -1 then
list2(i, POS_X)  = (x1+ rand(-r, r) + f_ofs_x)*s + xx
list2(i, POS_Y) = (y1+ rand(-r, r) +f_ofs_y)*s + yy
endif
	next i
	if iter mod 2 = 0 then
		color 255,0,0
	else
		color 255,255,255
	endif
	for i = 1 to LINE_COUNT
		x1# = list2(i, POS_X)
		y1# = list2(i, POS_Y)
		x2# = list2(i+1, POS_X)
		y2# = list2(i+1, POS_Y)
		
		
		if (x2 <> -1 and y2 <> -1) and (x1 <> -1 and y2 <> -1) then
			line x1, y1, x2, y2
		endif
	next i
	
	
	for i = 0 to 1
		ex# = (eyes(i, 0) + f_ofs_x)*s + xx
		ey# = (eyes(i, 1) + f_ofs_y)*s + yy
		draw(ex, ey, 0.03*s, iter-1)
		'box ex,ey , 8,8,1 
	next i
endFunction
frames = 63
scale# = 1.0
temp = makeImage(screenWidth(), screenHeight())

repeat
	//drawImage img, 0, img_y
	'453 167
	mx# = mouseX()
	my# = mouseY()
	'scale = scale + mouseMoveZ()*scale*0.1
	scale = 2.0^(frame*0.16)

	f_ofs_x = f_ofs_x + (-leftKey() + rightKey())*0.1
	f_ofs_y = f_ofs_y + (-upKey() + downKey())*0.1
	
'drawToImage temp
	'color 0,0,0
	'box 0,0,imageWidth(temp), imageHeight(temp), 1
	draw(453, 167, scale, 4)
'drawToScreen 
	
	'text 0,0,frame
	'text 0,12,(timer()-start) / 1000.0
	'text 0,24, ind + ": " + mx + ", "+ my
	'text 0,36, f_ofs_x + ", " + f_ofs_y
	
	drawScreen
	'setWindow "FPS " + FPS()
	'wait roundDown((1.0 / speed) * 1000)
	
	'saveImage temp, "frames/kuva" + frame + ".bmp"
	'if frame=frames-1 then end
	frame = (frame + 1) mod frames

	
	
	/*
	drawToImage img
	if mouseHit(1) or mouseHit(2) then
		
		if mouseHit(2) then
			mx = -1
			my = -1
		endif
		writeLine f, "("+ind+", POS_X) = " + mx
		writeLine f, "("+ind+", POS_Y) = " + my
		ind = ind + 1
		
		if mx <> -1 and my <> -1 and ind > 0 then
			line old_x#, old_y# - img_y, mx, my - img_y
		endif
		old_x# = mx
		old_y# = my
	endif
	drawToScreen
	
	if keyHit(cbKeySpace) then
		closeFile(f)
	endif
	*/
forever
Sijoititko kyseiset kordinaattilukuarvot ihan puhtaasti päästäsi? :o
Arvostan työtä jokatapauksessa *Applauds*
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Efektit

Post by CCE »

Jopas jotakin wrote:Sijoititko kyseiset kordinaattilukuarvot ihan puhtaasti päästäsi? :o
En suinkaan, vaan käytin hiiripohjaista editoria, jonka kommentoitu lähdekoodi on mukana viestissäni. :ugeek:
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Huhhuh, pitkästä aikaa koneella jolla CB toimii, joten pitäähän sitä jotain heti koodata!

Tämmöi plasma tästä tuli, en ees tiiä mikä piti alunperin olla, mutta eipä sen väliä :)

Code: Select all

SCREEN 400,300,0,1
Const BLOK=8
Function RGB(r,g,b)
	r=Min(255,Max(0,r))
	g=Min(255,Max(0,g))
	b=Min(255,Max(0,b))
	Return r Shl 16 + g Shl 8 + b
End Function 
Dim plasma(400,300) As Float 
'ClsColor 64,64,64
Cls
mode=0
z#=10
Repeat	
	t#=t+0.1
	If z>1.1 Then 
		z=z-0.1
	Else 
		z=1.1
	End If 
	mode=mode+(KeyHit(200)-KeyHit(208))
	Lock 
	a#=a+10
	sina#=Sin(a)
	cosa#=Cos(a)
	For x = 0 To 400 Step BLOK
		For y = 0 To 300 Step BLOK
			Select mode
				Case 0
					plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*Sin(x+t*17)+t*11)*2),plasma(x,y),20)
				Case 1
					plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*0.7+t*11)),plasma(x,y),20)
				Case 2
					plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*x+t*11)),plasma(x,y),20)
				Default 
					plasma(x,y)=CurveValue(0,plasma(x,y),20)
			End Select 
			r=255*(-plasma(x,y))
			g=255*(-plasma(x,y))
			b=255*(plasma(x,y))
			If 1=1 Then 
				xx=(x-200)+plasma(x,y)*BLOK+Rnd(-1,1)
				yy=(y-150)+plasma(x,y)*BLOK+Rnd(-1,1)
				xx=xx*(1/z)
				yy=yy*(1/z)
				'xx=xx*cosa+yy*-sina
				'yy=xx*-sina+yy*cosa
				xx=xx+200+plasma(x,y)*BLOK
				yy=yy+150-plasma(x,y)*BLOK
				rg=RGB(r/2,g/2,b/2)
				PutPixel2 xx,yy,RGB(r*4,g*4,b*4)
				PutPixel2 xx+1,yy,rg
				PutPixel2 xx,yy+1,rg
				PutPixel2 xx-1,yy,rg
				PutPixel2 xx,yy-1,rg
				PutPixel2 xx+1,yy+1,rg
				PutPixel2 xx-1,yy+1,rg
				PutPixel2 xx-1,yy-1,rg
				PutPixel2 xx+1,yy-1,rg
			End If 
		Next y
	Next x
	Unlock 
	DrawScreen 
Forever 
- - - -
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Efektit

Post by atomimalli »

Hurjan paljon hienoja efektejä tullut tänne :o

Wingman:
Tykkään varsinkin alusta. Tulee mieleen jotkut nykypartikkelidemot :)

Joitain vuosia sitten alotin tekemään(ei eka yritys) nopeaa pyöritystä cb:llä. Kaivoin sen nyt taas backupista ja tein suht nopean rotozoomin. Siihen voi myös piirtää ja siinä on esilasketut mipmapit kartalle, jotta se näyttäisi hiukan nätimmältä.

Image

Taustatarinaa: Huomasin ala-asteella paintilla, että pyörityksen voi tehdä useammalla viistoamisoperaatiolla. Myöhemmin luin, että tästä hajotelmasta on hyötyä pyörityksen optimoinnissa. Silloin säästää laskutoimituksia. Coolbasicilla tämä menee hiukan erilailla, mutta on kuitenkin sovellettavissa, sillä copyboxilla voi toteuttaa viistoamisoperaation suht helposti ja nopeasti. Ongelmaksi jäi, etten tiennyt että paljonko pitää viistota mihinkin suuntaan. Yliopistossa sitten matematiikan(lineaarialgebra ja matriisilaskenta 1) tehtäviä tehdessä keksin, miten se ratkaistaan ja koodasinkin ensimmäisen version: http://atomim.kapsi.fi/r/pyor.cb

Tässä on taas uusin, hiukan rönsyillyt versio:

Code: Select all

'This is your first CoolBasic intro!  

'katso alkuperäinen selitys: http://atomim.kapsi.fi/r/pyor.cb
'lisätty zoomaus
SetWindow "ladataan mipmappeja"

SCREEN 400,300,0,2
'SCREEN 800,600
img= LoadImage("media/map.bmp")

Smooth2D ON
'remstart
img2=CloneImage(img)
ResizeImage img2,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img2)
ResizeImage img2,ImageWidth(img),ImageHeight(img)
fiximg(img2)
img3=CloneImage(img2)
ResizeImage img3,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img3)
ResizeImage img3,ImageWidth(img),ImageHeight(img)
fiximg(img3)
img4=CloneImage(img3)
ResizeImage img4,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img4)
ResizeImage img4,ImageWidth(img),ImageHeight(img)
fiximg(img4)
ResizeImage img4,ImageWidth(img)*0.5,ImageHeight(img)*0.5
fiximg(img4)
img5=CloneImage(img4)
ResizeImage img5,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img5)
ResizeImage img5,ImageWidth(img),ImageHeight(img)
fiximg(img5)
ResizeImage img5,ImageWidth(img)*0.5,ImageHeight(img)*0.5
fiximg(img5)

imgb=CloneImage(img)
ResizeImage imgb,ImageWidth(img)*2,ImageHeight(img)*2
fiximg(imgb)
'remend


Global extraspace#
extraspace=3.7//1.75
bw=ImageWidth(img)*extraspace
bh=imageHeight(img)
ix=(bw-ImageWidth(img))/2
iy=(bh*extraspace-bh)/2
buf = MakeImage(bw,Int(bh*extraspace))
buf2 = makeImage(bw,Int(bh*extraspace))
buf3 = makeImage(bw,bh)
buf4 = makeImage(bw,bh)
t=timer()
kulma#=0

Repeat
    'ajanotto alku
    t=Timer()
    tt=t*0.3
    
    zoom#=1+Sin(tt*0.2)*0.4*2.0
	kulma#=tt*0.13
    
    cposx#=Sin(tt*0.03)*2000
    cposy#=Sin(tt*0.017)*2000
    
	clear(buf):clear(buf2):clear(buf3):clear(buf4)
	DrawToImage buf
        'DrawImage img,ix,iy
        cx#=(cposx+400*10) Mod 400
        cy#=(cposy+300*10) Mod 300
        For x=-1 To 1 Step 1
            For y=-1 To 1 Step 1 
                If zoom<1.0 And zoom>0.7 Then
                    DrawImage imgb*(zoom>=1.0)+img2*(zoom>0.85 And zoom<1.0)+img3*(zoom<=0.85 And zoom>=0.7),ix+x*400+cx,iy+y*300+cy
                ElseIf zoom<0.7 Then
                    DrawImage img5*(zoom<=0.6)+img4*(zoom<0.7 And zoom >0.6),ix+ImageWidth(img)*0.5*0.5+x*400*0.5+cx*0.5,iy+bh*0.5*0.5+y*300*0.5+cy*0.5
                Else 
                    DrawImage imgb,ix-ImageWidth(img)*0.5+x*400*2+cx*2,iy-bh*0.5+y*300*2+cy*2
                        
                EndIf
           Next y
        Next x
	DrawToScreen
	
	pyör(buf,buf2,buf3,buf4,kulma,zoom*((1.0/2)^(0+(zoom>=1.0)-(zoom<=0.7))) )
	
    DrawImage buf4,-ix,0

    For x=10 To -10 Step -1
        For y=10 To- 10 Step -1
            xo=Cos(kulma)*zoom*(400)*y-Sin(kulma)*zoom*(300)*x
            yo=-Cos(kulma)*zoom*(300)*x-Sin(kulma)*zoom*(400)*y
            DrawImage buf4,-ix+xo,yo
        Next y
    Next x
    
    If MouseDown(1)
        Color Sin(kulma)*127+128,Cos(MouseX())*127+128,Sin(MouseY()+tt*0.01)*127+128
        a2=GetAngle(200,150,MouseX(),MouseY())
        a3=kulma-a2
        d=Distance(MouseX(),MouseY(),200,150)/zoom
        xx#=(200+Cos(a3)*d-cposx+400*100) Mod 400
        yy#=(150+Sin(a3)*d-cposy+300*100) Mod 300
        DrawToImage img2
            Circle xx,yy,10
        DrawToScreen
        DrawToImage img3
            Circle xx,yy,10
        DrawToScreen
        DrawToImage img4
            Circle xx*0.5,yy*0.5,5
        DrawToScreen
        DrawToImage img5
            Circle xx*0.5,yy*0.5,5
        DrawToScreen
        DrawToImage imgb
            Circle xx*2,yy*2,20
        DrawToScreen
    EndIf
    
	'DrawImage buf,-ix,-iy:DrawImage buf2,400-ix,-iy:DrawImage buf3,-ix,300:DrawImage buf4,400-ix+(kulma Mod 2)*0,300
    //ajanotto loppu
    t2=Timer()-t
    
    setWindow "kulma: "+a+" pyöritysaika: "+t2
	DrawScreen
Forever

Function pyör(buf,buf2,buf3,buf4, a#, zoom#)
	w=ImageWidth(buf4)
	w2#=w/2
    
	h=ImageHeight(buf4)
	h2#=h/2

    he=h*extraspace
    he2#=h2*extraspace
    
    izoom#=1.0/zoom
    
	If (a+270) mod 360 > 180 Then
		a#= (a+90) mod 360 - 90
		y#=sin(a)
		x#=- tan(a/2.0)	
		For i=0 To he
            CopyBox 0,Int((i-he2)*izoom+he2+1000)-1000,w,1,Int((he2-i)*x*izoom),i,Image(buf),Image(buf2)
		Next i
		For i=0 To w 
			CopyBox Int((i-w2)*izoom+w2+1000)-1000,0,1,he,i,Int((w2-i)*y)+Int(h2-he2),Image(buf2),Image(buf3)
		Next i
		For i=0 to h
			CopyBox 0,i,w,1,Int((h2-i)*x),i,image(buf3),image(buf4)
		next i
	//lasketaan toiset 180 astetta suunnilleen samanlailla
    'remstart
	Else
		a#=((a+90) mod 360 + 90)
		y#=sin(a)
		x#=-tan(a/2.0)
        For i=0 to he
			CopyBox 0,Int((i-he2)*izoom+he2+1000)-1000,w,1,Int((he2-i)*x*izoom),i,Image(buf),image(buf2)
		Next i
		For i=0 To w 
			CopyBox Int(w-((i-w2)*izoom+w2)+1000)-1000,0,1,he,i,-Int((w2-i)*y)+Int(h2-he2),Image(buf2),Image(buf3)
		Next i
		For i=0 to h
			CopyBox 0,h-i,w,1,Int((h2-i)*x),i,image(buf3),image(buf4)
		Next i 
	EndIf
    'remend
EndFunction

function clear(buf)
	drawToImage buf
		cls
	DrawToScreen
EndFunction

'tällä korjataan resizeimagen tummentamat reunat
Function Fiximg(buf)
    DrawToImage(buf)
    For i=1 To 2
    CopyBox 0,i,ImageWidth(buf),1,0,0,Image(buf)
    CopyBox i,0,1,ImageHeight(buf),0,0,Image(buf)
    CopyBox 0,ImageHeight(buf)-1-i,ImageWidth(buf),1,0,ImageHeight(buf)-i,Image(buf)
    CopyBox ImageWidth(buf)-1-i,0,1,ImageHeight(buf),ImageWidth(buf)-i,0,Image(buf)
    Next i
    DrawToScreen
EndFunction
Ensimmäinen versio on varmaan esimerkillisempi. Uudemmassa on paljon toistoa kun vasta testasin mipmappeja :P

Saa käyttää peleissä ja demoissa. Siinä kuitenkin tulee ongelmaksi se, että drawgame ei piirrä ruutua isompaa aluetta ja silloin pyörittäessä jää mustaa reunoille. Mustan voi piilottaa suurentamalla kuvaa samalla kun pyörittää. Myöhemmässä versiossa on mukana suurennus. Mipmapit(muut kuin img) ja toisto(for x ja y-loopit) kannattaa ottaa ensimmäisenä pois käytöstä.

buf1, buf2, buf3 ja buf4 ovat väliaikaisia kuvia, joita pyöritys käyttää. Ensimmäiseen niistä piirretään pyöritettävä kuva ja viimeisestä sen saa pyöritettynä.

Pyöritys tehdään hiukan erilailla toiselle puoliskolle, sillä koko ympyrän kattaminen samanlailla vaatisi äärettömän viiston. Voit koittaa kommentoida toisen pois. Siellä on valmiiksi remstartit. Iffi pitää poistaa myös. Debugginäkymän saa kun ottaa screenin pois kommenteista ja vaihtaa pitkän drawimagerivin tuon for x=10-jutun sijaan.

Ainiin. Optimointivaraa jäi nyt kun en jaksanut hinkata niin paljoa kun tuota tarvi muuttaa. Noin kolme kertaa hitaammaksi tuli tätä tehdessä, mistä ehkä puolet on turhaa, mutta noista copyboxien kaavoista ottaa vähän huonosti selvää. Kunhan vaan laskisi, voisi jättää ne copyboxit pois, jotka eivät siirtäisi muutenkaan mitään. Tyhjän siirtäminen näyttää olevan kuitenkin nopeampaa kuin normaali siirto, joten vaikea sanoa varmasti, paljonko on varaa.
Hmm... Toisto taitaa viedä sen edun ja optimoitivaran kun tyhjää ei enää pitäisi olla :S
Controller
Newcomer
Posts: 1
Joined: Tue Nov 13, 2007 11:54 am

Re: Efektit

Post by Controller »

koodaaja wrote:Isketääs tämä tännekin. Shadebobeja yhden ZX -demon innoittamana, renderöintinopeuksia eri pallomäärille saa ilmoitella.

Code: Select all

SCREEN 640, 480
Dim imgs(9)

Repeat
    If im = 0 And ang = 0 Then
        ball = MakeImage(50, 50)
        DrawToImage ball
        For i = 0 To 49
            If i<10 then imgs(i) = MakeImage(640, 480)
            For j = 0 To 49
                If Distance(i,j,25,25)<23 Then
                    c# = Max(.0, .1+.45*((i-25)/24.0-(j-25)/24.0+Sqrt(1-(i-25)*(i-25)/576.0-(j-25)*(j-25)/756.0)))
                    Color 20+c*80, 40+c*80, 100+c*100
                Else
                    Color 255, 0, 255
                EndIf
                Dot i, j
            Next j
        Next i
        DrawToScreen
        MaskImage ball, 255, 0, 255
        
        Color 255, 255, 255
        im = 0
    EndIf
    im = (im + 1) Mod 10
    DrawToImage imgs(im)
    For i = 0 To balls + 1
        DrawImage ball, 320+120.0*Cos(.20*(ang+im))-80*Sin(.60*(ang+im))-25, 240+120*Sin(.17*(ang+im))+80*Cos(.57*(ang+im))-25
    Next i
    If im = 9 Then
        ang = ang + 9
        count + 1
    EndIf
    DrawToScreen
    DrawImage imgs(im), 0, 0
    Text 5,5, "CB knows no boundaries (FPS():"+Str(FPS())+")"
    Text 400, 460, Str(count)+" bobs by msqrt/Peisik"
    DrawScreen
Forever
Annoin sen pyöriä jonkun aikaa mutta 10.000 "bobs" eikä FPS tipu.
Post Reply