FLOAT32 CFrmPerlin::TileableNoise3(const FLOAT32 x, const FLOAT32 y, const FLOAT32 z, const FLOAT32 w, const FLOAT32 h, const FLOAT32 d)
{
	return ( Noise3( x,     y,     z )     * ( w - x ) * ( h - y ) * ( d - z ) +
			 Noise3( x - w, y,     z )     *        x  * ( h - y ) * ( d - z ) +
			 Noise3( x,     y - h, z )     * ( w - x ) *       y   * ( d - z ) +
			 Noise3( x - w, y - h, z )     *        x  *       y   * ( d - z ) + 
			 Noise3( x,     y,     z - d ) * ( w - x ) * ( h - y ) *       z  +
			 Noise3( x - w, y,     z - d ) *        x  * ( h - y ) *       z  +
			 Noise3( x,     y - h, z - d ) * ( w - x ) *       y   *       z  +
			 Noise3( x - w, y - h, z - d ) *        x  *       y   *       z ) / ( w * h * d );
}
float PerlinNoiseTurbulence::Turbulence3(float fX, float fY, float fZ, float fFreq)
{
	float t = 0.0f;

	do {
		t += Noise3(fFreq*fX, fFreq*fY, fFreq*fZ)/fFreq;
		fFreq *= 0.5f;
	} while (fFreq >= 1.0f);
	
	return t;
}
FLOAT32 CFrmPerlin::Turbulence3( const FLOAT32 x, const FLOAT32 y, const FLOAT32 z, FLOAT32 fFreq )
{
	FLOAT32 t = 0.0f;

	do
    {
		t += Noise3(fFreq * x, fFreq * y, fFreq * z) / fFreq;
		fFreq *= 0.5f;
	} while (fFreq >= 1.0f);
	
	return t;
}
Exemple #4
0
// 타뷸런스는 진폭의 변화폭을 결정한다..
float GNoise::Turbulence(float *v, float freq)
{
	float t, vec[3];
	for (t = 0. ; freq >= 1. ; freq /= 2) 
	{
		vec[0] = freq * v[0];
		vec[1] = freq * v[1];
		vec[2] = freq * v[2];
		t += fabs(Noise3(vec)) / freq;
	}
	return t;
}
Exemple #5
0
float GNoise::Noise(float vec[], int len)
{
	switch (len) 
	{
		case 0:
			return 0.;
		case 1:
			return Noise1(vec[0]);
		case 2:
			return Noise2(vec);
		default:
			return Noise3(vec);
	}
}
/*!
 * Multiband Noise 3D
 * @param[in] 
 * @return 
 */
RXREAL rxWaveletNoise::MultibandNoise3(RXREAL p[3], RXREAL s, RXREAL *normal, int firstBand, int nbands, RXREAL *w)
{
	RXREAL q[3], result = 0, variance = 0;
	for(int b = 0; b < nbands && s+firstBand+b < 0; ++b){
		for(int i = 0; i < 3; ++i){
			q[i] = 2*p[i]*pow((RXREAL)2.0, (RXREAL)(firstBand+b));
		}
		
		result += (normal) ? w[b]*ProjectedNoise(q, normal) : w[b]*Noise3(q);
	}
	for(int b = 0; b < nbands; ++b){
		variance += w[b]*w[b];
	}

	// Adjust the noise so it has a variance of 1.
	if(variance) result /= sqrt(variance*((normal) ? 0.296 : 0.210));

	return result;
}