1. ## Working Improved Perlin Noise

This is a translation of Ken Perlin's Improved Noise Function written in Java.

https://github.com/kryton9/thinBasic-PerlinNoise.git

There are two functions for the programmer:

1. PerlinNoiseSeed( seedValue )
seedValue is an integer number, it will affect the noise returned from:

2. PerlinNoise( x, y, z )
x, y, z are double values

You generally use PerlinNoiseSeed( seedValue ) once in the beginning of your code.
It gives you the same controlled noise results

As more examples are made it will be more apparent the value of these two functions.

You don't need Git to use these files. Just follow the link and click on the following to download a zip file of all the needed code:

2. Thank you kryton9 for the noise function, i haven't focused on this subject before, now i find it interesting. but what confuse me is that for any 3 numbers the result is the same as before ie it is not like the RND function. which gives different results , i will read the explanation here about perlin noise http://web.archive.org/web/201602271...s/m_perlin.htm
since he said "If you pass it the same parameter twice, it produces the same number twice. It is very important that it behaves in this way, otherwise the Prelim function will simply produce nonsense"

i have tried your function noise to plot x, y, 0 by plotting the noise output as if it is y. the result is like a chaotic heart pulses

if we change yy = yy + 0.03 to yy = yy + 1 it will be more chaotic
using a Canvas_SineCurve.tbasuc as a template:
```  Uses "UI"
#INCLUDE "PerlinNoise.tbasici"
'-----------------------------------------------------------
'---Global variables
'-----------------------------------------------------------
Function TBMain () As Long

Dim ScreenWidth     As Long = 800
Dim ScreenHeight    As Long = 600
Dim hWin            As DWord        '---Handle of the canvas window
Dim x,y,yy             As Double
Dim thick          As Double
Long f

'-----------------------------------------------------------
'---Main program
'-----------------------------------------------------------
hWin = Canvas_Window("Perlin Noise: press ESC to exit", 1, 1, ScreenWidth, ScreenHeight)

Canvas_Attach(hWin, 0, %TRUE) ' <- double buffer

'---Init canvas
Canvas_Clear %BLACK
Canvas_Font "Arial" , 8, %CANVAS_FONTSTYLE_NORMAL

'---Set personalized canvas scale
Canvas_Scale(-20, -5, 20, 20)
yy = -15
'---Loop For All steps
For x = -15 To 15 Step 0.02

yy = yy + 0.03
y = PerlinNoise( x, yy, 0 )

thick = 3
Canvas_Width(thick)
Canvas_Line( (x, y*3), (x, y*3) , Rgb(25 * thick, 255, 0) )

f+1
If f=6 Then 'to make the animation faster
Canvas_Redraw
f=0
End If
If GetAsyncKeyState(%VK_ESCAPE) Then Exit For

Next

Do

Loop While All( Asc(Canvas_WaitKey) <> 27, IsWindow(hWin) )
Canvas_Window End

End Function
```

3. Hi Primo,

Thanks for your example, that is really neat! It is fun to watch!!

Yes the noise function from Ken Perlin will give the same results with smooth randomness where the differences are realistic to Nature. As you see in your fine example what looks like a heartbeat can become in 3D terrain, clouds and almost any type of natural material when used to create procedural textures.

I need to make some more useful code in include files to start tapping into even more complex uses for Perlin Noise. Hope to have more in the coming days.

4. Kent,

I prepared proposal for change in your repository, you can accept it or not, please review here:
https://github.com/kryton9/thinBasic-PerlinNoise/pull/1

The point is - by default, you have not guarantee, that Git will preserve Windows line endings. This will force it.

Petr

5. Kent,

I also found one minor imprecision in your port of the code. I prepared second pull request to correct the data types:
https://github.com/kryton9/thinBasic-PerlinNoise/pull/2

As usually, feel free to ignore

As with all pull requests - to review changes, click the File changes tab, where you see it line by line, side by side. Git rules.

Petr

6. Thanks Petr, you have to bare with me as I learn GitHub. Thanks for your help!

I downloaded the github desktop program. I tell it to sync, I tell it to upload commits
and it seems random it works, and it doesn't work. It then merged 2 different copies
together into one big mess. It does a lot and I understand and appreciate what all it can do. So will
keep trying to learn it. But I spent most of the day syncing by hand all the things I messed up
using git's tools

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•