Efektit

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Efektit

Post by naputtelija » Sun Jun 24, 2012 2:17 am

Tulipas tehtyä tällainen Sini+Cosini käyräntekolaite. Katsokaa, kun hieno sinin ja kosinin voimaa havainnollistava satunnaiskäyrä piirtyy ruudulle ja luokaa oma painamalla s-näppäintä ja kirjoittamalla siemenluku.

Code: Select all

SCREEN 800,600,0
FrameLimit 61
start:
k=Rand(50,250)
t=Rand(100,300)
t2=Rand(1,3)
t3=Rand(50,300)
sico=Rand(1,4)
sico2=Rand(1,4)
sico3=Rand(1,4)
sico4=Rand(1,4)
sw=400
sh=300
Color cbWhite


Repeat
    k=k+2
    Select sico
        Case 1
            x1=Sin(k)*100+sw
        Case 2
            x1=Cos(k)*100+sw+Cos(k)*t3
        Case 3
            x1=-Cos(k)*100+sw
        Case 4
            x1=-Sin(k)*100+sw+Cos(k)*t3
    EndSelect
    
    Select sico2
        Case 1
            y1=Sin(k)*100+sh
        Case 2
            y1=Cos(k)*100+sh+Cos(k)*t3
        Case 3
            y1=-Cos(k)*100+sh+Cos(k)*t3
        Case 4
            y1=-Sin(k)*100+sh
    EndSelect
    
    Select sico3
        Case 1
            x2=Sin(k)*100+sw+Cos(k)*t3
        Case 2
            x2=Cos(k)*100+sw
        Case 3
            x2=-Cos(k)*100+sw
        Case 4
            x2=-Sin(k)*100+sw+Cos(k)*t3
    EndSelect
    
    Select sico4
        Case 1
            y2=Sin(k)*100+sh
        Case 2
            y2=Cos(k)*100+sh+Cos(k)*t3
        Case 3
            y2=-Cos(k)*100+sh
        Case 4
            y2=-Sin(k)*100+sh+Cos(k)*t3
    EndSelect

    Line x1,y1,x2,y2
    Line x2,x1,y1,y2
    Text 0,0,"Paina s kirjoittaaksesi uuden siemenarvon"
    If KeyHit(cbKeyS) Then Goto seed
    DrawScreen 0

Forever
For x=0 To ScreenWidth()
For y=0 To ScreenHeight()

Next y
Next x

seed:
Repeat
    sd$=Input ("Syötä siemenluku (voi olla myös teksti): ")
    If KeyHit(cbKeyReturn) Then
        Randomize HexToDec(MD5(sd))
        CloseInput
        Exit
    EndIf
    DrawScreen
Forever
Goto start

//md5
Function MD5(jono$)

    nblk = ((Len(jono$) + 8) Shr 6) + 1

    Dim MD5_x(nblk * 16 - 1)

    For i = 0 To nblk * 16 - 1
        MD5_x(i) = 0
    Next i

    For i = 0 To (Len(jono$) - 1)
        MD5_x(i Shr 2) = BinOr(MD5_x(i Shr 2), (Asc(Mid(jono$, (i + 1), 1)) Shl ((i Mod 4) * 8)))
    Next i

    MD5_x(i Shr 2) = BinOr(MD5_x(i Shr 2), (128 Shl (((i) Mod 4) * 8)))
    MD5_x(nblk * 16 - 2) = Len(jono$) * 8

    MD5_a = 1732584193 //&H67452301
    MD5_b = -271733879 //&HEFCDAB89
    MD5_c = -1732584194 //&H98BADCFE
    MD5_d = 271733878 //&H10325476

    // Käydään sanat läpi
    For k = 0 To (nblk * 16 - 1) Step 16
        MD5_AA = MD5_a
        MD5_BB = MD5_b
        MD5_CC = MD5_c
        MD5_DD = MD5_d

        // Kierros 1
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 0), 7, -680876936) //&HD76AA478
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 1), 12, -389564586) //&HE8C7B756
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 2), 17, 606105819 )//&H242070DB
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 3), 22, -1044525330) //&HC1BDCEEE
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 4), 7, -176418897) //&HF57C0FAF
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 5), 12, 1200080426 )//&H4787C62A
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 6), 17, -1473231341) //&HA8304613
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 7), 22, -45705983) //&HFD469501
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 8), 7, 1770035416) //&H698098D8
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 9), 12, -1958414417 )//&H8B44F7AF
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 10), 17, -42063 )//&HFFFF5BB1
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 11), 22, -1990404162) //&H895CD7BE
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 12), 7, 1804603682) //&H6B901122
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 13), 12, -40341101) //&HFD987193
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 14), 17, -1502002290) //&HA679438E
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 15), 22, 1236535329) //&H49B40821

        // Kierros 2
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 1), 5, -165796510) //&HF61E2562
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 6), 9, -1069501632) //&HC040B340
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 11), 14, 643717713) //&H265E5A51
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 0), 20, -373897302) //&HE9B6C7AA
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 5), 5, -701558691) //&HD62F105D
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 10), 9, 38016083) //&H2441453
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 15), 14, -660478335) //&HD8A1E681
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 4), 20, -405537848) //&HE7D3FBC8
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 9), 5, 568446438) //&H21E1CDE6
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 14), 9, -1019803690) //&HC33707D6
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 3), 14, -187363961) //&HF4D50D87
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 8), 20, 1163531501) //&H455A14ED
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 13), 5, -1444681467) //&HA9E3E905
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 2), 9, -51403784) //&HFCEFA3F8
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 7), 14, 1735328473) //&H676F02D9
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 12), 20, -1926607734) //&H8D2A4C8A

        // Kierros 3
        MD5_a =  MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 5), 4, -378558) //&HFFFA3942
        MD5_d =  MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 8), 11, -2022574463) //&H8771F681
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 11), 16, 1839030562) //&H6D9D6122
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 14), 23, -35309556) //&HFDE5380C
        MD5_a =  MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 1), 4, -1530992060) //&HA4BEEA44
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 4), 11, 1272893353) //&H4BDECFA9
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 7), 16, -155497632) //&HF6BB4B60
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 10), 23, -1094730640) //&HBEBFBC70
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 13), 4, 681279174) //&H289B7EC6
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 0), 11, -358537222) //&HEAA127FA
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 3), 16, -722521979) //&HD4EF3085
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 6), 23, 76029189) //&H4881D05
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 9), 4, -640364487) //&HD9D4D039
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 12), 11, -421815835) //&HE6DB99E5
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 15), 16, 530742520) //&H1FA27CF8
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 2), 23, -995338651) //&HC4AC5665

        // Kierros 4
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 0), 6, -198630844) //&HF4292244
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 7), 10, 1126891415) //&H432AFF97
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 14), 15, -1416354905) //&HAB9423A7
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 5), 21, -57434055) //&HFC93A039
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 12), 6, 1700485571) //&H655B59C3
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 3), 10, -1894986606) //&H8F0CCC92
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 10), 15, -1051523) //&HFFEFF47D
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 1), 21, -2054922799) //&H85845DD1
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 8), 6, 1873313359) //&H6FA87E4F
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 15), 10, -30611744) //&HFE2CE6E0
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 6), 15, -1560198380 )//&HA3014314
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 13), 21, 1309151649) //&H4E0811A1
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x(k + 4), 6, -145523070) //&HF7537E82
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x(k + 11), 10, -1120210379) //&HBD3AF235
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x(k + 2), 15, 718787259) //&H2AD7D2BB
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x(k + 9), 21, -343485551) //&HEB86D391

        MD5_a = MD5_a + MD5_AA
        MD5_b = MD5_b + MD5_BB
        MD5_c = MD5_c + MD5_CC
        MD5_d = MD5_d + MD5_DD
    Next k

    Return Lower(Str(WordToHex(MD5_a)) + Str(WordToHex(MD5_b)) + Str(WordToHex(MD5_c)) + Str(WordToHex(MD5_d)))
End Function


Function MD5_F(x, y, z)
    Return BinOr(BinAnd(x, y), BinAnd(BinNot(x), z))
End Function

Function MD5_G(x, y, z)
    Return BinOr(BinAnd(x, z), BinAnd(y, BinNot(z)))
End Function

Function MD5_H(x, y, z)
    Return BinXor(BinXor(x, y), z)
End Function

Function MD5_I(x, y, z)
    Return BinXor(y, BinOr(x, BinNot(z)))
End Function

Function MD5_FF(a, b, c, d, x, s, ac)
    a = (a + ((MD5_F(b, c, d)+ x)+ ac))
    a = RotateLeft(a, s)
    Return a + b
End Function

Function MD5_GG(a, b, c, d, x, s, ac)
    a = (a + ((MD5_G(b, c, d) + x) + ac))
    a = RotateLeft(a, s)
    Return a + b
End Function

Function MD5_HH(a, b, c, d, x, s, ac)
    a = (a + ((MD5_H(b, c, d) + x) + ac))
    a = RotateLeft(a, s)
    Return a + b
End Function

Function MD5_II(a, b, c, d, x, s, ac)
    a = (a + ((MD5_I(b, c, d) + x) + ac))
    a = RotateLeft(a, s)
    Return a + b
End Function

Function RotateLeft(lValue, iShiftBits)
    Return BinOr(lValue Shl iShiftBits, lValue Shr (32 - iShiftBits))
End Function

Function WordToHex(lValue)
    For lCount = 0 To 3
        lByte = BinAnd(lValue Shr lCount * 8, 255)
        ToHex$ = ToHex$ + Right("0" + Hex(lByte), 2)
    Next lCount
    Return ToHex$
End Function

Function BinAnd(luku1, luku2)
    For i = 0 To 31
        luku3 = luku3 + (((luku1 Shr i) Mod 2) And ((luku2 Shr i) Mod 2)) Shl i
    Next i
    Return luku3
End Function

Function BinNot(luku1)
    For i = 0 To 31
        luku3 = luku3 + (Not ((luku1 Shr i) Mod 2)) Shl i
    Next i
    Return luku3
End Function

Function BinXor(luku1, luku2)
    For i = 0 To 31
        luku3 = luku3 + (((luku1 Shr i) Mod 2) Xor ((luku2 Shr i) Mod 2)) Shl i
    Next i
    Return luku3
End Function

Function BinOr(luku1, luku2)
    For i = 0 To 31
        luku3 = luku3 + (((luku1 Shr i) Mod 2) Or ((luku2 Shr i) Mod 2)) Shl i
    Next i
    Return luku3
End Function

Function Bin2Dec(jono$)
    For i = Len(jono$) To 1 Step -1
        arvo = Int(Mid(jono$, i, 1))
        If arvo = 1 Then
            luku = luku + 2 ^ (Len(jono$) - i)
        EndIf
    Next i
    Return luku
End Function 

//hextodec converter
Function HexToDec(jono$) 'by Bagard
    For i = Len(jono$) To 1 Step -1
        merkki$ = Mid(jono$, i, 1)

        If merkki$ = "a" Then
            kerroin = 10
        ElseIf merkki$ = "b" Then
            kerroin = 11
        ElseIf merkki$ = "c" Then
            kerroin = 12
        ElseIf merkki$ = "d" Then
            kerroin = 13
        ElseIf merkki$ = "e" Then
            kerroin = 14
        ElseIf merkki$ = "f" Then
            kerroin = 15
        Else
            kerroin = Int(merkki$)
        EndIf

        luku = luku + (kerroin * 16 ^ (Len(jono$) - i))
    Next i
    Return luku
End Function 
Kiitokset Bagardin tekemälle md5-funktiolle ja SDK:sta laiskana kaivetulle HexToDec-funktiolle jotka auttoivat kummasti merkkijonosiemenen muuttamisessa desimaaliksi.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 4:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Efektit

Post by Konstaduck » Sun Jun 24, 2012 5:25 am

HYvä kun joku hallitsee nuo sinit ja cosinit, itse kun en ole koskaan niitä oppinut, vaikka yritystä on ollut...
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Efektit

Post by naputtelija » Sun Jun 24, 2012 11:23 am

Konstaduck wrote:HYvä kun joku hallitsee nuo sinit ja cosinit, itse kun en ole koskaan niitä oppinut, vaikka yritystä on ollut...
Ne opetetaan 9. Luokalla. Jos et jaksa odottaa siihen asti, kerron lyhyesti mihin niitä voi käyttää.

Sini ja kosini tekevät oikeastaan saman asian: luovat pehmeyttä lukuun. Nämä funktiot ottavat parametrikseen kokonaisluvun väliltä 0-360 (muitakin lukuja saa käyttää) ja palauttavat arvon väliltä -1 ja 1. Normaalisti, kun lisäät luvun arvoa koko ajan samalla luvulla, se lisäytyy täysin suoraan. (minun koodissa muuttuja k) mutta sini ja kosini pehmentävät luvun lisäystä niin että se lisäytyy käyrämäisesti. Tätä voi ohjelmoinnissa käyttää muodostamaan ympyröitä, soikioita ja kaaria. Kun pehmennettyjen pisteiden välille piirtää viivan, ruudulle piirtyy hienoa taidetta :-D
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Efektit

Post by esa94 » Sun Jun 24, 2012 3:17 pm

naputtelija wrote:
Konstaduck wrote:HYvä kun joku hallitsee nuo sinit ja cosinit, itse kun en ole koskaan niitä oppinut, vaikka yritystä on ollut...
Ne opetetaan 9. Luokalla. Jos et jaksa odottaa siihen asti, kerron lyhyesti mihin niitä voi käyttää.

Sini ja kosini tekevät oikeastaan saman asian: luovat pehmeyttä lukuun. Nämä funktiot ottavat parametrikseen kokonaisluvun väliltä 0-360 (muitakin lukuja saa käyttää) ja palauttavat arvon väliltä -1 ja 1. Normaalisti, kun lisäät luvun arvoa koko ajan samalla luvulla, se lisäytyy täysin suoraan. (minun koodissa muuttuja k) mutta sini ja kosini pehmentävät luvun lisäystä niin että se lisäytyy käyrämäisesti. Tätä voi ohjelmoinnissa käyttää muodostamaan ympyröitä, soikioita ja kaaria. Kun pehmennettyjen pisteiden välille piirtää viivan, ruudulle piirtyy hienoa taidetta :-D
Mitä helvettiä

sin α = a/c
cos α = b/c
tan α = a/b

Missä α on toinen suorakulmaisen kolmion terävistä kulmista, a on sen vastainen kateetti, b viereinen kateetti ja c hypotenuusa.
⁴⁰Ar
<@mikeful> kissatehtaalla on miukuhihna.

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Efektit

Post by naputtelija » Sun Jun 24, 2012 6:18 pm

esa94 wrote:
naputtelija wrote:
Konstaduck wrote:HYvä kun joku hallitsee nuo sinit ja cosinit, itse kun en ole koskaan niitä oppinut, vaikka yritystä on ollut...
Ne opetetaan 9. Luokalla. Jos et jaksa odottaa siihen asti, kerron lyhyesti mihin niitä voi käyttää.

Sini ja kosini tekevät oikeastaan saman asian: luovat pehmeyttä lukuun. Nämä funktiot ottavat parametrikseen kokonaisluvun väliltä 0-360 (muitakin lukuja saa käyttää) ja palauttavat arvon väliltä -1 ja 1. Normaalisti, kun lisäät luvun arvoa koko ajan samalla luvulla, se lisäytyy täysin suoraan. (minun koodissa muuttuja k) mutta sini ja kosini pehmentävät luvun lisäystä niin että se lisäytyy käyrämäisesti. Tätä voi ohjelmoinnissa käyttää muodostamaan ympyröitä, soikioita ja kaaria. Kun pehmennettyjen pisteiden välille piirtää viivan, ruudulle piirtyy hienoa taidetta :-D
Mitä helvettiä

sin α = a/c
cos α = b/c
tan α = a/b

Missä α on toinen suorakulmaisen kolmion terävistä kulmista, a on sen vastainen kateetti, b viereinen kateetti ja c hypotenuusa.
En siis ajatellut tuossa selittää sitä, että miten sin ja cos toimii, vaan sitä, miten niitä voidaan käyttää efekteissä. Minusta konstaduckin ei tarvitse tietää funktioiden tapaa toimia tehdäkseen niillä efektejä. DJ-Filbekin selitti kosinit ja sinit sillä lailla, että ne "palauttavat arvon väliltä -1 ja 1, mutta hieman eri tavalla." Itse kyllä tunnen trigonometriset funktiot varsin hyvin.
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 4:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Efektit

Post by Konstaduck » Sun Jun 24, 2012 9:16 pm

Värkkäsin cbE:llä tällaisen kurssikäyrän, joka luo käyrää tasaisesti ruudulle. Koodi käyttää cbE:n customfunktoita, joten jos et vielä ladannut uudelleenkirjoitettua runtimea,

Lataa se tästä. (Version 0.3.0 latauslinkki löytyy kyseisellä sivulla alempaa)(Sinun ei tarvitse ladata cbE:tä, toimii ilmankin. Customfunktiot ei vain silloin toimi)

Koodi on säädettävää mm. värin,ajan, ja koon kanssa.
Ja sitten tämä:

Code: Select all


// Muutama "vakio" - alustus
SCREEN 400,400
Randomize Timer()
aika = Timer()
Y_ = 5
X = -5
pituus = -5

// Kuinka paksu viiva on? (normaali on 1.0)
cbeSetLineWidth(3.0)
// Näytetäänkö konsoli?
cbeShowConsole(True)
// Kuinka kauan uuden viivan tekoon menee millisekuntteina?
Const aika_ = 500
// Minkävärinen viiva on?
Color cbWhite

Repeat
    SetWindow "Fps: "+FPS()
    If Timer() > aika+aika_ 'Jos haluttu aika on kulunut, lisätään uusi viiva
        X + 5
        Y = Y_
        Y_ = Rand(2,398)
        X_ = X + 5
        Line X,Y,X_,Y_
        aika = Timer()
        pituus + 5
    EndIf 
    If pituus >= 400 'Jos ylitetään ohjelman leveys, aloitetaan alusta
        Cls 
        X = -5
        Y = Y_
        pituus = -5
    EndIf
    DrawScreen OFF
Forever 

Function cbeSetLineWidth(width As Float = 1.0)
    group = 1 'Tarkoittaa samaa kuin vakio CBE_CUSTOM_FUNCTION_GROUP
    funcId = 21
EndFunction 

Function cbeShowConsole(visibleOrNot)
    group = 1
    funcId = 12
EndFunction 
Koodia voi vapaasti muokata, ja mihinkään creditseihin ei tarvitse nimiä laittaa.

EDIT: Koodi tuppaa lagaamaan aina, kun yritetään sammuttaa ohjelman omasta raksista. Onneksi konsoli on keksitty, mutta tässä näkyy ainakin cbE:n yksi bugi.

naputtelija wrote: Ne opetetaan 9. Luokalla.
Miksi ihmeessä vasta silloin?
Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
Awaclus
Forum Veteran
Posts: 2938
Joined: Tue Aug 28, 2007 2:50 pm
Location: Sulkava

Re: Efektit

Post by Awaclus » Sun Jun 24, 2012 10:35 pm

Konstaduck wrote:
naputtelija wrote: Ne opetetaan 9. Luokalla.
Miksi ihmeessä vasta silloin?
Ei niitä kunnolla opeteta vielä silloinkaan (meille ainakin opetettiin pelkästään kolmion ratkaiseminen laskimen trigonometrisfunkkarinäppäinten avulla kertomatta, mitä trigonometriset funktiot oikeastaan tekevät). Siksi, ettei suurin osa ihmisistä käytä niitä yhtään mihinkään.
Every day I'm reshuffling.
[22:19] <@Grandi> Ha! Tiesin koko ajan, että Awaclus_ oli Awaclus. Hieno peitenimimerkki, mutta Grandia et huiputtanut.

User avatar
Latexi95
Guru
Posts: 1163
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Efektit

Post by Latexi95 » Sun Jun 24, 2012 10:41 pm

Konstaduck wrote: EDIT: Koodi tuppaa lagaamaan aina, kun yritetään sammuttaa ohjelman omasta raksista. Onneksi konsoli on keksitty, mutta tässä näkyy ainakin cbE:n yksi bugi.
Minulla ei ainakaan moista ongelmaa ole. Ohjelman kyllä pitäisi sammua raksista DrawScreenin, WaitKeyn tai WaitMousen kohdalla.
Konstaduck wrote: Miksi ihmeessä vasta silloin?
Ilmeisesti asiasta päättävät poliitikot eivät ole huomioinneet koodaajien tarvetta näille funktioille.

Siniä ja kosinia tarvitaan yleisimmin. Tavallisin käyttötarkoitus on kun halutaan laskea paljonko koordinaatteihin pitäisi lisätä jos liikutaan tietyssä kulmassa.

Code: Select all

x = x + Cos(angle) * dist
y = y + Sin(angle) * dist
angle on kulma jonka mukaan liikutaan ja dist on matka joka liikutaan.
Tuo koodi toimii nyt maailmakoordinaateissa jossa y-akselin arvot kasvavat ylöspäin mentäessä. Näyttökoordinaattien tapauksessa Sin(angle) * dist pitäisi vähentää alkuperäisestä koordinaatista. Hankalampi ja täsmällisempi selitys on sitten tuo:
esa94 wrote:sin α = a/c
cos α = b/c
tan α = a/b
Missä α on toinen suorakulmaisen kolmion terävistä kulmista, a on sen vastainen kateetti, b viereinen kateetti ja c hypotenuusa.
Tuon ymmärtämistä helpottanee tämä kuva. Tuossa tosin hypotenuusan pituutta on merkitty h:lla eikä c:llä.

Tuo on varmaankin yleisin käyttötarkoitus, mutta efekteissä hyödynnetään myös sinin ja kosinin palauttamaa säännöllistä käyrää. Sillä sitten saadaan tehtyä erilaisia kuvioita ja pehmeitä mutkia ja sen sellaista. :)

User avatar
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 8:56 pm
Location: Joku piste pohjoisessa.

Re: Efektit

Post by naputtelija » Sun Jun 24, 2012 11:50 pm

Latexi95 wrote:
Konstaduck wrote: EDIT: Koodi tuppaa lagaamaan aina, kun yritetään sammuttaa ohjelman omasta raksista. Onneksi konsoli on keksitty, mutta tässä näkyy ainakin cbE:n yksi bugi.
Minulla ei ainakaan moista ongelmaa ole. Ohjelman kyllä pitäisi sammua raksista DrawScreenin, WaitKeyn tai WaitMousen kohdalla.
Konstaduck wrote: Miksi ihmeessä vasta silloin?
Ilmeisesti asiasta päättävät poliitikot eivät ole huomioinneet koodaajien tarvetta näille funktioille.

Siniä ja kosinia tarvitaan yleisimmin. Tavallisin käyttötarkoitus on kun halutaan laskea paljonko koordinaatteihin pitäisi lisätä jos liikutaan tietyssä kulmassa.

Code: Select all

x = x + Cos(angle) * dist
y = y + Sin(angle) * dist
angle on kulma jonka mukaan liikutaan ja dist on matka joka liikutaan.
Tuo koodi toimii nyt maailmakoordinaateissa jossa y-akselin arvot kasvavat ylöspäin mentäessä. Näyttökoordinaattien tapauksessa Sin(angle) * dist pitäisi vähentää alkuperäisestä koordinaatista. Hankalampi ja täsmällisempi selitys on sitten tuo:
esa94 wrote:sin α = a/c
cos α = b/c
tan α = a/b
Missä α on toinen suorakulmaisen kolmion terävistä kulmista, a on sen vastainen kateetti, b viereinen kateetti ja c hypotenuusa.
Tuon ymmärtämistä helpottanee tämä kuva. Tuossa tosin hypotenuusan pituutta on merkitty h:lla eikä c:llä.

Tuo on varmaankin yleisin käyttötarkoitus, mutta efekteissä hyödynnetään myös sinin ja kosinin palauttamaa säännöllistä käyrää. Sillä sitten saadaan tehtyä erilaisia kuvioita ja pehmeitä mutkia ja sen sellaista. :)
Tuota yritinkin oikeastaan tarkoittaa, mutta myönnetään, ei kukaan saa järkevää postia aikaiseksi kello kolmelta aamulla :)
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman » Thu Jul 26, 2012 4:07 pm

Oli irkissä keskustelua väriarvoista ja putpixelistä, ja huomattiin että nopeinta lumisadetta ei ole vielä CB.llä tehty. No, kirjoitinpas nopeahkosti sellaisen.

Code: Select all

alku:
	Lock 
	For x=0 To 399
		For y=0 To 299
			PutPixel2 x,y,Rand(255)*65793
		Next y
	Next x
	Unlock 
	DrawScreen 
Goto alku
EDIT:

Eipäs olekaan nopein, muuttamalla for-loopit goto-kutsuiksi siitä tulee yhä nopeampi!

- - - -

User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Efektit

Post by Peltsi » Fri Aug 24, 2012 9:47 pm

Wingman wrote:Oli irkissä keskustelua väriarvoista ja putpixelistä, ja huomattiin että nopeinta lumisadetta ei ole vielä CB.llä tehty. No, kirjoitinpas nopeahkosti sellaisen.

Code: Select all

alku:
	Lock 
	For x=0 To 399
		For y=0 To 299
			PutPixel2 x,y,Rand(255)*65793
		Next y
	Next x
	Unlock 
	DrawScreen 
Goto alku
EDIT:

Eipäs olekaan nopein, muuttamalla for-loopit goto-kutsuiksi siitä tulee yhä nopeampi!


Jumatsuka tuo ero jos ei piirrä lukittuun puskuriin... Ainakin omalla koneella lukittu pyöri mainiosti, lukitsematon lagitti hyvinkin paljon.
Hassu huomata tällästäkin, luulin ettei ero sentään noin suuri olis :D

User avatar
Buke
Newcomer
Posts: 11
Joined: Mon Aug 27, 2012 5:51 pm
Location: Helsinki

Re: Efektit

Post by Buke » Mon Aug 27, 2012 8:26 pm

Wingman wrote:Oli irkissä keskustelua väriarvoista ja putpixelistä, ja huomattiin että nopeinta lumisadetta ei ole vielä CB.llä tehty. No, kirjoitinpas nopeahkosti sellaisen.

Code: Select all

alku:
	Lock 
	For x=0 To 399
		For y=0 To 299
			PutPixel2 x,y,Rand(255)*65793
		Next y
	Next x
	Unlock 
	DrawScreen 
Goto alku
EDIT:

Eipäs olekaan nopein, muuttamalla for-loopit goto-kutsuiksi siitä tulee yhä nopeampi!

Pöh, ihan hidas!

Code: Select all

kuva1 = MakeImage(399,299,4)
DrawToImage kuva1

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva1,"kuva1.bmp"
kuva2 = MakeImage(399,299,4)
DrawToImage kuva2

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva2,"kuva2.bmp"
kuva3 = MakeImage(399,299,4)
DrawToImage kuva3

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva3,"kuva3.bmp"

DeleteImage kuva1
DeleteImage kuva2
DeleteImage kuva3

kuva1 = LoadImage("kuva1.bmp")
kuva2 = LoadImage("kuva2.bmp")
kuva3 = LoadImage("kuva3.bmp")

alku:

DrawImage kuva1,0,0
DrawScreen
DrawImage kuva2,0,0
drawscreen 
DrawImage kuva3,0,0
DrawScreen 

SetWindow Str(FPS())

Goto alku
FPS erot olivat seuraavanlaiset:

Sinun: 60-80FPS
Minun: 120-240FPS

Sinun efektisi on tietysti sulavampi, mutta eikös graafiset nopeusvertailut tehdä yleensä FPS:n perusteella? ;D
Intel 3960X @ 4.2ghz
4 x nVidia GTX 690 SLI
64GB RAM
960GB SSD
12TB HDD

Unelmointi ei ole rikos, eihän?

User avatar
Peltsi
Active Member
Posts: 121
Joined: Thu Sep 30, 2010 12:16 pm

Re: Efektit

Post by Peltsi » Mon Aug 27, 2012 9:23 pm

Buke wrote:
Pöh, ihan hidas!

Code: Select all

kuva1 = MakeImage(399,299,4)
DrawToImage kuva1

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva1,"kuva1.bmp"
kuva2 = MakeImage(399,299,4)
DrawToImage kuva2

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva2,"kuva2.bmp"
kuva3 = MakeImage(399,299,4)
DrawToImage kuva3

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

SaveImage kuva3,"kuva3.bmp"

DeleteImage kuva1
DeleteImage kuva2
DeleteImage kuva3

kuva1 = LoadImage("kuva1.bmp")
kuva2 = LoadImage("kuva2.bmp")
kuva3 = LoadImage("kuva3.bmp")

alku:

DrawImage kuva1,0,0
DrawScreen
DrawImage kuva2,0,0
drawscreen 
DrawImage kuva3,0,0
DrawScreen 

SetWindow Str(FPS())

Goto alku
FPS erot olivat seuraavanlaiset:

Sinun: 60-80FPS
Minun: 120-240FPS

Sinun efektisi on tietysti sulavampi, mutta eikös graafiset nopeusvertailut tehdä yleensä FPS:n perusteella? ;D
Vaikka Wingmanin version fps oli reippaasti pienempi 13, ja omasi oli semmoset 60, niin silti näytti että tuo sun kuvakikkailu pätkii kuin fps olisi 1-2... hassua. Testattu siis oikeasti hitaalla läppärillä.

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja » Mon Aug 27, 2012 11:34 pm

Buke wrote:Sinun efektisi on tietysti sulavampi, mutta eikös graafiset nopeusvertailut tehdä yleensä FPS:n perusteella? ;D
Ei vaan renderöintiin kuluneen ajan, koska sitä on mielekkäämpää mitata - jos 2ms kestävä renderöinti suoritetaan kuudesti framessa, se kestää 12ms. Jos ilmoitetaan että FPS on 800 ja sama asia tehdään kuusi kertaa, on huomattavasti haastavampaa suoraan päässä arvioida, mikä FPS sen jälkeen on. Lisäksi millisekunteina ilmoitettaessa voidaan kertoa yksittäisen osaoperaation kesto luontevammin, vaikka "blur-passiin menee 3ms" kun taas FPS-lukema on aina koko silmukan viemä aika.

Koodissasi on muuten aivan turhaan makeimagella kolmas parametri, tallennat syyttä levylle vaikka voisit käyttää kuvia suoraan muistista (yksinkertaisesti poistaa kaikki saveimage/deleteimage/loadimage-kohdat) ja unohdit precalccien jälkeen drawtoscreenin, minkä takia efekti tökkii julmetusti vaikka fps-mittari sanookin kovaa lukua. Minkä lisäksi kolmen framen noise ei näytä kovin uskottavalta.

Itse huijaisin noisessa copyboxilla, esimerkiksi seuraavasti:

Code: Select all

SCREEN 640, 480

PositionCamera 320, -240

Repeat
    
    start = Timer()
    
    Lock
        For i = 0 To 63
            For j = 0 To 47
                PutPixel2 i, j, Rand(255)*65793
            Next j
        Next i
    Unlock
    
    For i = 48 To 479
        CopyBox 0, Rand(47), 64, 1, 0, i
    Next i
    
    For i = 64 To 639
        CopyBox Rand(63), 0, 1, 480, i, 0
    Next i
    
    DrawScreen
    
    SetWindow "rendered in " + Str(Timer()-start) + "ms"
    
Forever
Toinen mieleen tuleva vaihtoehto olisi läiskiä satunnaisiin paikkoihin paloja noisea tai rikkoa tuon antamaa kuviota jollain offsetillä.

User avatar
Buke
Newcomer
Posts: 11
Joined: Mon Aug 27, 2012 5:51 pm
Location: Helsinki

Re: Efektit

Post by Buke » Tue Aug 28, 2012 3:55 pm

koodaaja wrote:Ei vaan renderöintiin kuluneen ajan, koska sitä on mielekkäämpää mitata - jos 2ms kestävä renderöinti suoritetaan kuudesti framessa, se kestää 12ms. Jos ilmoitetaan että FPS on 800 ja sama asia tehdään kuusi kertaa, on huomattavasti haastavampaa suoraan päässä arvioida, mikä FPS sen jälkeen on. Lisäksi millisekunteina ilmoitettaessa voidaan kertoa yksittäisen osaoperaation kesto luontevammin, vaikka "blur-passiin menee 3ms" kun taas FPS-lukema on aina koko silmukan viemä aika.

Koodissasi on muuten aivan turhaan makeimagella kolmas parametri, tallennat syyttä levylle vaikka voisit käyttää kuvia suoraan muistista (yksinkertaisesti poistaa kaikki saveimage/deleteimage/loadimage-kohdat) ja unohdit precalccien jälkeen drawtoscreenin, minkä takia efekti tökkii julmetusti vaikka fps-mittari sanookin kovaa lukua. Minkä lisäksi kolmen framen noise näytä kovin uskottavalta.
Kiitos neuvoista. Tarkoitukseni ei kuitenkaan ollut tehdä efektistä uskottavaa, ajoin vain takaa sitä, että se olisi nopeampi, kuin Wingmanin. Mutta, jos halutaan uskottavuutta, niin tässä versio, joka renderöi yhden kuvan 16-17 millisekunnissa ja frameja on 12 ja niitähän voi lisätä kokoajan enemmän, mutta tämäkin on jo melko uskottava noise-efekti(kiitos, nyt tiedän sen oikean terminkin!):

Code: Select all

kuva1 = MakeImage(399,299,4)
DrawToImage kuva1

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva2 = MakeImage(399,299,4)
DrawToImage kuva2

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva3 = MakeImage(399,299,4)
DrawToImage kuva3

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 
   
kuva4 = MakeImage(399,299,4)
DrawToImage kuva4

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva5 = MakeImage(399,299,4)
DrawToImage kuva5

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva6 = MakeImage(399,299,4)
DrawToImage kuva6

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 
   
kuva7 = MakeImage(399,299,4)
DrawToImage kuva7

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva8 = MakeImage(399,299,4)
DrawToImage kuva8

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva9 = MakeImage(399,299,4)
DrawToImage kuva9

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 
   
kuva10 = MakeImage(399,299,4)
DrawToImage kuva10

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva11 = MakeImage(399,299,4)
DrawToImage kuva11

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

kuva12 = MakeImage(399,299,4)
DrawToImage kuva12

   Lock 
        For x=0 To 399
            For y=0 To 299
                PutPixel2 x,y,Rand(255)*65793
            Next y
        Next x
   Unlock 

DrawToScreen 

alku:

start = Timer()
DrawImage kuva1,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva2,0,0
DrawScreen 
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva3,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva4,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva5,0,0
DrawScreen 
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva6,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva7,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva8,0,0
DrawScreen 
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva9,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva10,0,0
DrawScreen
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva11,0,0
DrawScreen 
SetWindow Str(FPS()) + " " + Str(Timer()-start)

start = Timer()
DrawImage kuva12,0,0
DrawScreen 
SetWindow Str(FPS()) + " " + Str(Timer()-start)

Goto alku
Miksikäs en voi ajaa tuota koodia 640x480 tilassa, vaan tulee MAV. Olisi mukava pystyä ajamaan tuo koodi 640x480 tilassa, että se olisi vertailukelpoinen sinun koodiisi.
Intel 3960X @ 4.2ghz
4 x nVidia GTX 690 SLI
64GB RAM
960GB SSD
12TB HDD

Unelmointi ei ole rikos, eihän?

User avatar
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 9:06 pm

Re: Efektit

Post by legend » Tue Aug 28, 2012 4:17 pm

Buke wrote:*#"(&%)*
Realiaikaista ja randomisoitua on turha verrata etukäteen laskettuun versioon...
Etukäteen laskettu voittaa melkein aina :shock:

User avatar
Buke
Newcomer
Posts: 11
Joined: Mon Aug 27, 2012 5:51 pm
Location: Helsinki

Re: Efektit

Post by Buke » Tue Aug 28, 2012 4:25 pm

legend wrote:
Buke wrote:*#"(&%)*
Realiaikaista ja randomisoitua on turha verrata etukäteen laskettuun versioon...
Etukäteen laskettu voittaa melkein aina :shock:
Eli minulla on tällä hetkellä koko Coolbasic-yhteisön nopein noise-efekti?
Image
Intel 3960X @ 4.2ghz
4 x nVidia GTX 690 SLI
64GB RAM
960GB SSD
12TB HDD

Unelmointi ei ole rikos, eihän?

User avatar
Latexi95
Guru
Posts: 1163
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Efektit

Post by Latexi95 » Tue Aug 28, 2012 4:49 pm

Buke wrote:Eli minulla on tällä hetkellä koko Coolbasic-yhteisön nopein noise-efekti?
Image
Protip: Jos haluat kenenkään täällä yhtään pitävän sinusta, niin en suosittele ylpeilemään tuolla saavutuksella.

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman » Tue Aug 28, 2012 5:28 pm

Kuten sanottu, oma noiseni tosiaankaan ei ole esilaskettu, ja esilaskemalla noisesta saa vaikka kuinka nopeaa.

Mutta niin, nyt kun emme atomimallin kanssa oikeastaan saaneetkaan demoa/introa kasaan niin voisin paljastella yhden efektinpoikasen jonka tein introon, digisäröily/noise/rikkominen/mikävain. Efekti on tarkoituksella 'liian' voimakas, tämä tosiaan on vain testiversio;

Code: Select all

Const SW=320
Const SH=240
SCREEN SW*2,SH*2,0,1
zoomed_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
zoomed_screen 	= MakeImage(ScreenWidth(), ScreenHeight())
MaskImage zoomed_screen_a, 255, 0, 254
MaskImage zoomed_screen, 255, 0, 254
damage_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
damage_screen 	= MakeImage(ScreenWidth(), ScreenHeight())
MaskImage damage_screen_a, 255, 0, 254
MaskImage damage_screen, 255, 0, 254
img=MakeImage(320,240) //tämä nyt vain jotta efektistä näkee jotain
DrawToImage img
	For i=0 To 100
		Color Rand(255),Rand(255),Rand(255)
		Box Rand(SW),Rand(SH),Rand(80),Rand(60),Rand(1)
	Next i
DrawToScreen 
blockynes=1
mode=1
power=10 		//tällä voi säätää särön voimakkuutta
dh=sh
dw=sw
Dim c(dh*2)
Dim rn(dh*2)
Dim digibox(dw,dh)
Dim digi(dw,dh)
For x=0 To dw
	For y=0 To dh
		digibox(x,y)=Rand(-4,4)
	Next y
Next x
Repeat 
	//säröilyn koordinaatit 
	dx=0'MouseX()/2-20
	dy=0'MouseY()/2-20
	dw=sw'40
	dh=sh'40
	If KeyHit(29) Then mode=Not mode
	DrawImage img,0,0
	If KeyHit(28) Then 
		lin=dh*5
	EndIf 
	If KeyDown(57) Then 
		Gosub damage
	EndIf 
	If Rand(10)=0 Then 
		lin=dh*5
		For x=0 To dw
			For y=0 To dh
				digi(x,y)=0
			Next y
		Next x
	EndIf 
	'dx=sw-MouseX()/2-20
	'dy=sh-MouseY()/2-20
	'dw=40
	'dh=40
	'If KeyDown(57) Then 
	'	Gosub damage
	'EndIf 
	//tähän väliin kaikki joka ei säröydy
	Color 255,255,255
	Text 0,0,FPS()
	Gosub doublepixel
	DrawScreen 
Forever 
doublePixel:  //Peisikin sedät tehny hyvää työtä, kätevä doublepixel ;P
	For y=0 To ScreenHeight() / 2
		CopyBox 0, y/blockynes*blockynes, SW*2, 1, 0, y*2, SCREEN(), Image(zoomed_screen_a)
		CopyBox 0, (y+1)/blockynes*blockynes, SW*2, 1, 0, y*2+1, SCREEN(), Image(zoomed_screen_a)
	Next y
	For x=0 To ScreenWidth() / 2
		CopyBox x/blockynes*blockynes,0, 1, SH*2, x*2, 0, Image(zoomed_screen_a), Image(zoomed_screen)
		CopyBox x/blockynes*blockynes,0, 1, SH*2, x*2+1, 0, Image(zoomed_screen_a), Image(zoomed_screen)
	Next x
	DrawImage zoomed_screen, 0, 0
Return 
damage: //jahas ja digi-säröilyä pitäis tehdä
	CopyBox 0,0,sw,sh,0,0,SCREEN(),Image(damage_screen_a)
	If Rand(20)=0 And mode=1 Then lin=dh*Rnd(0.5,5)
	linn#=CurveValue(lin,linn,100)
	linn=Max(0,lin)
	For y=dy To dy+dh
		If y Mod 8 = 0 And mode=1 Then
			cc=Rand(64,255)
			For ii=y To y+8
				c(ii)=cc
			Next ii
		EndIf 
		If mode=1 Then  rn(y)=Rand(-power,power)*(linn*8+1)
		lin=Max(0,lin)
		If Rand(1,50)<>1 And lin=0 Then 
			CopyBox dx+rn(y),y,dw,1,dx+rn(y)/2,y,SCREEN(),Image(damage_screen_a)
		Else
			If mode=1 Then lin=lin-1
			DrawToImage damage_screen_a
				Color c(y),c(y),c(y)
				Box dx,y,dw,1,1
			DrawToScreen 
		EndIf 
	Next y
	CopyBox 0,0,sw,sh,0,0,Image(damage_screen_a),Image(damage_screen)
	For y=dy To dy+dh Step 8
		For x=dx To dx+dw Step 8
			If Rand(20)=0 Then 
				digi(x,y)=Rand(20,100)
			EndIf 
			If digi(x,y)>0 Then 
				digi(x,y)=digi(x,y)-1
				PickColor Max(0,Min(dw,x+(8*digibox(x,y)))),y
				DrawToImage damage_screen
					Box x,y,8,8
				DrawToScreen 
			EndIf 
		Next x
	Next y
	DrawImage damage_screen,0,0
Return 
EDIT:

Koodissa tosiaan käytän peisikin setien tuplapikseliä, koska sillä sai grafiikan kivan kokoiseksi, ja siitä kattelin myös vähän miten itse tekisin mitäkin. Kiitosta Peisikin leiriin

- - - -

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja » Tue Aug 28, 2012 8:21 pm

Buke wrote:Eli minulla on tällä hetkellä koko Coolbasic-yhteisön nopein noise-efekti?
Noisesi rendautuu yhtä nopeasti kuin muidenkin, teet vain vähemmän frameja ja toistat niitä :) Piirtämällä parisataa framea tauluun voisi saada jo varsin pehmeää jälkeä, etenkin jos randomoisi esitysjärjestyksen.

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests