Halusin kokeilla Perlin's noise algoritmiä.
En ole varma onko tämä alkuperäinen, mutta se tuottaa ainakin hyvin samankaltaisia kuvia.
Kopioi tämä koodi vaan suoraan kaiken jo olemassa olevan koodin päälle.
Syntyvää kuvaa voi kutsua ihan miksi huvittaa. Minun mielestäni se näyttää pilviltä.
Tätä voisi soveltaa vaikka 3D-räiskintä pelin Skyboxissa.
Edit: En viitsinyt tuota
" Windows Form Designer generated code " - regionia poistaa, sillä se oli tällä kertaa niin lyhyt...
Public Class frmNoise Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents picSurface As System.Windows.Forms.PictureBox <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.picSurface = New System.Windows.Forms.PictureBox Me.SuspendLayout() ' 'picSurface ' Me.picSurface.Location = New System.Drawing.Point(0, 0) Me.picSurface.Name = "picSurface" Me.picSurface.Size = New System.Drawing.Size(464, 416) Me.picSurface.TabIndex = 0 Me.picSurface.TabStop = False ' 'frmNoise ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(464, 414) Me.Controls.Add(Me.picSurface) Me.Name = "frmNoise" Me.Text = "Noise" Me.ResumeLayout(False) End Sub #End Region Dim b As Bitmap Dim _Random() As Double Private Sub Ran() ' tehdään random lukuja sisältävä taulukko Dim r As New Random Dim i As Integer ReDim _Random(picSurface.Width * picSurface.Height) For i = 0 To picSurface.Width * picSurface.Height _Random(i) = r.NextDouble() Next End Sub Private Sub frmNoise_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim x, y, i As Integer Dim r As New Random Dim N As Double = 0.0 b = New Bitmap(picSurface.Width, picSurface.Height) Ran() For y = 1 To picSurface.Height - 1 For x = 1 To picSurface.Width - 1 N = 0 ' lisäilemällä ja poistelemalla näitä rivejä voidaan muuttaa melun näköä ' esim. ' kommentoi seuraavasta kaikki muut, paitsi ensimmäinen rivi ' muuta myös rivi N /= 6.0 ==> N /= 1.0 (jotta keskiarvo säilyisi) N += GetColor(x, y, 40 / 1) N += GetColor(x, y, 40 / 2) N += GetColor(x, y, 40 / 4) N += GetColor(x, y, 40 / 8) N += GetColor(x, y, 40 / 16) N += GetColor(x, y, 40 / 32) '------------------------------------------------------- N /= 6.0 b.SetPixel(x, y, Color.FromArgb(0, 0, N * 255)) Next Next picSurface.BackgroundImage = b End Sub Private Function GetColor(ByVal x As Integer, ByVal y As Integer, ByVal M As Integer) As Double Dim x0 As Integer = x - (x Mod M) Dim x1 As Integer = x0 + M Dim y0 As Integer = y - (y Mod M) Dim y1 As Integer = y0 + M ' melua talteen =) Dim x0y0 As Double = Noise(x0, y0) Dim x1y0 As Double = Noise(x1, y0) Dim x0y1 As Double = Noise(x0, y1) Dim x1y1 As Double = Noise(x1, y1) ' interpoloidaan(meniköhän tuo taivutus oikein?) Dim xx0 As Double = f(x0, x0y0, x1, x1y0, x) Dim xx1 As Double = f(x0, x0y1, x1, x1y1, x) Dim N As Double = f(y0, xx0, y1, xx1, y) Return N End Function Private Function Noise(ByVal x As Integer, ByVal y As Integer) As Double ' melua If (x < picSurface.Width And y < picSurface.Height) Then Return _Random(y * picSurface.Width + x) Else Return 0.0 End If End Function Private Function f(ByVal x0 As Double, ByVal y0 As Double, ByVal x1 As Double, ByVal y1 As Double, ByVal x As Double) As Double ' Tämä saadaan vaikeasta yhtälöstä, jota en ole itse keksinyt. Ylistäkää Googlea! Return (1.0 + Math.Cos(Math.PI + (Math.PI / (x1 - x0)) * (x - x0))) / 2.0 * (y1 - y0) + y0 End Function End Class
Jos tätä kokeilette, niin kokeilkaa tuota esimerkkiä, jonka tonne kommenttiin laitoin. Se tekee niin paljon erilaisen "kuvan"
Ajatelkaa, jos tän mappais jonkun Direct3D sphren päälle ja vielä saman lainen Bumpmappi taustalle, ja pyöritys koodi päälle. Ah...
Jepjep, jos vain olisi exe millä katsoa :(
Sori T.M. en saa sitä lähetettyä postiisi mbnet valittaa. =(
MSCOREE.DLL tiedosto puuttuu :P
Microsoft .NET Runtime Execution Engine, v. 1.0.3705.0
Mitä muuta näihin .NET-hommiin tarttee? Mulla WinXP Pro ja aina tulee jotain "Alustus epäonnistui"
Koska käännän nämä ohjelmat .NET 2003:lla tarvitaan .NET Framework 1.1 sitä ei tietääkseni XP itsessään sisällä(sisältää 1.0:n). Käykää lataamassa Microsoftin kotisivuilta.
Kiva kun kouluun ei voi asentaa mitään kun ei ole oikeuksia! Nyyh! Eli en voi testata tota koulussa :(
Niinpä!
Jaahas, ottakaa sittenkin vain pelkkiä kuvankaappauksia, en jaksa enää pelleillä näitten kanssa: http://koti.mbnet.fi/winuus/noiseerror.jpg
Kivahko esimerkki, juuri tällaiset vinkit ovat kivoja selventämään joskus ah niin sekavia dokumentteja. Kommentointi oli tietysti ainakin teoreettiselta kannalta aika heikkoa mutta eikait siinä :)
KOLME hyvää koodivinkkejä, ja ei yksikään VB:lle.... Kaikki vaan VBnetille :(
Fisher kirjoitti:
KOLME hyvää koodivinkkejä, ja ei yksikään VB:lle.... Kaikki vaan VBnetille :(
Samat sanat
Eikö näistä pekin jutuist ajoku voisi ottaa muutaman screenshotin ja pistää niitä johonkin nähtäväksi?
T.M: En saa kaappauksia lähetettyä sähköpostiisi.
MBnet blokkaa kaikki postit, joita yritän osoitteeseesi lähettää. Voisiko joku muu ystävällisesti auttaa minua ja lähettää T.M:lle/laittaa tänne nähtäväksi muutaman Screenshotin?
Uploadaa ne johonkin sivulle :P Tai joku muu vois tehä sen jos et voi.
Noh, hmhph.
peki: tee joku toinen emailosote eri paikkaan, ja lähetä sieltä Esim: suomi24.fi
Tässä olis tuo sama ohjelma C:llä kirjoitettuna. Ei vaadi mitään .NET:n viittaavaa.
http://www.geocities.com/prlnsop/prlns.zip
Se on melkein samanlainen paitsi että lisäsin siihen samaan tuon toisen viivajutun ja vielä yhden extran joka myös perusutuu Perlinin noise algoritmeihin. 1-näppäimellä tulee tuon esimerkin mukainen, 2-näppäimellä tuo viivajuttu ja 3-näppäimellä tuo extra.
tässä screenshotti tuosta ohjelmasta(sain ftp ohjelman pelaamaan) :D
http://koti.mbnet.fi/peku1/n.PNG
Aihe on jo aika vanha, joten et voi enää vastata siihen.