Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026 #include "cinder/Vector.h"
00027
00028 namespace cinder {
00029
00030 class Perlin
00031 {
00032 public:
00033 Perlin( uint8_t aOctaves = 4 );
00034 Perlin( uint8_t aOctaves, int32_t aSeed );
00035
00036 void setSeed( int32_t aSeed );
00037 uint8_t getOctaves() const { return mOctaves; }
00038 void setOctaves( uint8_t aOctaves ) { mOctaves = aOctaves; }
00039
00041 float fBm( float v ) const;
00042 float fBm( const Vec2f &v ) const;
00043 float fBm( float x, float y ) const { return fBm( Vec2f( x, y ) ); }
00044 float fBm( const Vec3f &v ) const;
00045 float fBm( float x, float y, float z ) const { return fBm( Vec3f( x, y, z ) ); }
00046
00048
00049 Vec2f dfBm( const Vec2f &v ) const;
00050 Vec2f dfBm( float x, float y ) const { return dfBm( Vec2f( x, y ) ); }
00051 Vec3f dfBm( const Vec3f &v ) const;
00052 Vec3f dfBm( float x, float y, float z ) const { return dfBm( Vec3f( x, y, z ) ); }
00053
00055 float noise( float x ) const;
00056 float noise( float x, float y ) const;
00057 float noise( float x, float y, float z ) const;
00058
00060
00061 Vec2f dnoise( float x, float y ) const;
00062 Vec3f dnoise( float x, float y, float z ) const;
00063
00064 private:
00065 void initPermutationTable();
00066
00067 float grad( int32_t hash, float x ) const;
00068 float grad( int32_t hash, float x, float y ) const;
00069 float grad( int32_t hash, float x, float y, float z ) const;
00070
00071 uint8_t mOctaves;
00072 int32_t mSeed;
00073
00074 uint8_t mPerms[512];
00075 };
00076
00077 }