Example #1
0
void PerlinNoise_Impl::create_noise3d(PerlinNoise_PixelWriter &writer, float start_x, float end_x, float start_y, float end_y, float z_position)
{
	float size_x = end_x - start_x;
	float size_y = end_y - start_y;
	float fheight = (float) height;
	float fwidth = (float) width;

	for (int y = 0; y < height; y++)
	{
		for (int x = 0; x < width; x++)
		{
			float result = 0.0f;
			float current_amplitude = amplitude;
			float value_x = start_x + (((float) x) * size_x) / fwidth;
			float value_y = start_y + (((float) y) * size_y) / fheight;
			float value_z = z_position;

			for( int i=0; i<octaves; i++ )
			{
				result += current_amplitude * noise_3d(value_x, value_y, value_z);
				value_x *= 2.0f;
				value_y *= 2.0f;
				value_z *= 2.0f;
				current_amplitude *= 0.5f;
			}

			writer.write_pixel(result);
		}
		writer.line_end();
	}
}
Example #2
0
void wrinkles::apply( Vector& p, surface_data& t )
{
   Vector result (0.0);
   Vector value;
   double scale = 1.0;
   int   i;

   if(   amount == 0.0 )   return;

   for( i = 0; i <   10;   scale *= 2.0, i++ )
   {
      value =  noise_3d( p * scale  );
      result.x += fabs(value.x / scale);
      result.y += fabs(value.y / scale);
      result.z += fabs(value.z / scale);
   }
   t.n   += result * amount;
   t.n   = normalize( t.n );
}
Example #3
0
static double	smooth_noise(double x, double y, double z)
{
	t_perlin	p;

	s_n_integer(&p, x, y, z);
	p.fract.x = x - p.integer.x;
	p.fract.y = y - p.integer.y;
	p.fract.z = z - p.integer.z;
	p.a.y = noise_3d(p.integer.x, p.integer.y, p.integer.z);
	p.a.z = noise_3d(p.integer.x + 1, p.integer.y, p.integer.z);
	p.b.y = noise_3d(p.integer.x, p.integer.y + 1, p.integer.z);
	p.b.z = noise_3d(p.integer.x + 1, p.integer.y + 1, p.integer.z);
	p.c.y = noise_3d(p.integer.x, p.integer.y, p.integer.z + 1);
	p.c.z = noise_3d(p.integer.x + 1, p.integer.y, p.integer.z + 1);
	p.d.y = noise_3d(p.integer.x, p.integer.y + 1, p.integer.z + 1);
	p.d.z = noise_3d(p.integer.x + 1, p.integer.y + 1, p.integer.z + 1);
	p.a.x = cos_interpolate(p.a.y, p.a.z, p.fract.x);
	p.b.x = cos_interpolate(p.b.y, p.b.z, p.fract.x);
	p.c.x = cos_interpolate(p.c.y, p.c.z, p.fract.x);
	p.d.x = cos_interpolate(p.d.y, p.d.z, p.fract.x);
	p.v = cos_interpolate(p.a.x, p.b.x, p.fract.y);
	p.w = cos_interpolate(p.c.x, p.d.x, p.fract.y);
	return (cos_interpolate(p.v, p.w, p.fract.z));
}