Skip to content

Commit

Permalink
chronological order
Browse files Browse the repository at this point in the history
  • Loading branch information
mayakraft committed Jul 25, 2016
1 parent 5e8419c commit 5beebe7
Show file tree
Hide file tree
Showing 25 changed files with 809 additions and 285 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

int main(int argc, char **argv){
time_t t;
srand((unsigned) time(&t));

float seed = rand()%100/100.0;
float seed = rand()%1000/100.0;

int width = 800;
int height = 800;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

int main(int argc, char **argv){
time_t t;
srand((unsigned) time(&t));

float seed = rand()%100/100.0;
float seed = rand()%1000/100.0;

int width = 800;
int height = 800;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>

#include "noise.c"
#include "../common/noise.c"

#define TWOPI 6.28318530718

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <time.h>
#include <math.h>

#include "noise1234.c"
#include "../common/noise1234.c"

#define TWOPI 6.28318530718

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
201 changes: 201 additions & 0 deletions common/noise.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
/* coherent noise function over 1, 2 or 3 dimensions */
/* (copyright Ken Perlin) */

#include "noise.h"

#define B 0x100
#define BM 0xff

#define N 0x1000
#define NP 12 /* 2^N */
#define NM 0xfff

static int p[B + B + 2];
static float g3[B + B + 2][3];
static float g2[B + B + 2][2];
static float g1[B + B + 2];
static int start = 1;

static void init(void);

#define s_curve(t) ( t * t * (3. - 2. * t) )

#define lerp(t, a, b) ( a + t * (b - a) )

#define setup(i,b0,b1,r0,r1)\
t = vec[i] + N;\
b0 = ((int)t) & BM;\
b1 = (b0+1) & BM;\
r0 = t - (int)t;\
r1 = r0 - 1.;

double peach()
{
return 0.5;
}

double noise1(double arg)
{
int bx0, bx1;
float rx0, rx1, sx, t, u, v, vec[1];

vec[0] = arg;
if (start) {
start = 0;
init();
}

setup(0, bx0,bx1, rx0,rx1);

sx = s_curve(rx0);

u = rx0 * g1[ p[ bx0 ] ];
v = rx1 * g1[ p[ bx1 ] ];

return lerp(sx, u, v);
}

float noise2(float vec[2])
{
int bx0, bx1, by0, by1, b00, b10, b01, b11;
float rx0, rx1, ry0, ry1, *q, sx, sy, a, b, t, u, v;
int i;
int j;

if (start) {
start = 0;
init();
}

setup(0, bx0,bx1, rx0,rx1);
setup(1, by0,by1, ry0,ry1);

i = p[ bx0 ];
j = p[ bx1 ];

b00 = p[ i + by0 ];
b10 = p[ j + by0 ];
b01 = p[ i + by1 ];
b11 = p[ j + by1 ];

sx = s_curve(rx0);
sy = s_curve(ry0);

#define at2(rx,ry) ( rx * q[0] + ry * q[1] )

q = g2[ b00 ] ; u = at2(rx0,ry0);
q = g2[ b10 ] ; v = at2(rx1,ry0);
a = lerp(sx, u, v);

q = g2[ b01 ] ; u = at2(rx0,ry1);
q = g2[ b11 ] ; v = at2(rx1,ry1);
b = lerp(sx, u, v);

return lerp(sy, a, b);
}

float noise3(float vec[3])
{
int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
float rx0, rx1, ry0, ry1, rz0, rz1, *q, sy, sz, a, b, c, d, t, u, v;
int i;
int j;

if (start) {
start = 0;
init();
}

setup(0, bx0,bx1, rx0,rx1);
setup(1, by0,by1, ry0,ry1);
setup(2, bz0,bz1, rz0,rz1);

i = p[ bx0 ];
j = p[ bx1 ];

b00 = p[ i + by0 ];
b10 = p[ j + by0 ];
b01 = p[ i + by1 ];
b11 = p[ j + by1 ];

t = s_curve(rx0);
sy = s_curve(ry0);
sz = s_curve(rz0);

#define at3(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] )

q = g3[ b00 + bz0 ] ; u = at3(rx0,ry0,rz0);
q = g3[ b10 + bz0 ] ; v = at3(rx1,ry0,rz0);
a = lerp(t, u, v);

q = g3[ b01 + bz0 ] ; u = at3(rx0,ry1,rz0);
q = g3[ b11 + bz0 ] ; v = at3(rx1,ry1,rz0);
b = lerp(t, u, v);

c = lerp(sy, a, b);

q = g3[ b00 + bz1 ] ; u = at3(rx0,ry0,rz1);
q = g3[ b10 + bz1 ] ; v = at3(rx1,ry0,rz1);
a = lerp(t, u, v);

q = g3[ b01 + bz1 ] ; u = at3(rx0,ry1,rz1);
q = g3[ b11 + bz1 ] ; v = at3(rx1,ry1,rz1);
b = lerp(t, u, v);

d = lerp(sy, a, b);

return lerp(sz, c, d);
}

static void normalize2(float v[2])
{
float s;

s = sqrt(v[0] * v[0] + v[1] * v[1]);
v[0] = v[0] / s;
v[1] = v[1] / s;
}

static void normalize3(float v[3])
{
float s;

s = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
v[0] = v[0] / s;
v[1] = v[1] / s;
v[2] = v[2] / s;
}

static void init(void)
{
int i, j, k;

for (i = 0 ; i < B ; i++) {
p[i] = i;

g1[i] = (float)((random() % (B + B)) - B) / B;

for (j = 0 ; j < 2 ; j++)
g2[i][j] = (float)((random() % (B + B)) - B) / B;
normalize2(g2[i]);

for (j = 0 ; j < 3 ; j++)
g3[i][j] = (float)((random() % (B + B)) - B) / B;
normalize3(g3[i]);
}

while (--i) {
k = p[i];
p[i] = p[j = random() % B];
p[j] = k;
}

for (i = 0 ; i < B + 2 ; i++) {
p[B + i] = p[i];
g1[B + i] = g1[i];
for (j = 0 ; j < 2 ; j++)
g2[B + i][j] = g2[i][j];
for (j = 0 ; j < 3 ; j++)
g3[B + i][j] = g3[i][j];
}
}
12 changes: 12 additions & 0 deletions common/noise.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef Perlin_noise_h
#define Perlin_noise_h

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

double noise1(double arg);
float noise2(float vec[2]);
float noise3(float vec[3]);

#endif
Loading

0 comments on commit 5beebe7

Please sign in to comment.