Noise ++ Perlin Module все время возвращает 0

Я использую библиотеку Noise ++ для генерации шума в моей программе, по крайней мере, такова цель.
Я настроил его как один из тестов, чтобы протестировать его, однако независимо от того, какие параметры я ему предоставляю, я получаю только 0 обратно

Если у кого-то есть опыт работы с Noise ++, было бы очень полезно, если бы вы могли проверить и убедиться, что я делаю что-то не так.

//
// Defaults are
// Frequency    =   1
// Octaves      =   6
// Seed         =   0
// Quality      =   1
// Lacunarity   =   2
// Persistence  =   0.5
// Scale        =   2.12
//

NoiseppNoise::NoiseppNoise( ) : mPipeline2d( 2 )
{
mThreadCount = noisepp::utils::System::getNumberOfCPUs ();

mPerlin.setSeed(4321);
if ( mThreadCount > 2 ) {
mPipeline2d = noisepp::ThreadedPipeline2D( mThreadCount );
}

mNoiseID2D = mPerlin.addToPipe ( mPipeline2d );
mCache2d = mPipeline2d.createCache();
}

double NoiseppNoise::Generate( double x, double y )
{
return mPipeline2d.getElement( mNoiseID2D )->getValue ( x, y, mCache2d );
}

0

Решение

Я добавил следующие строки в ваш код для компиляции (в основном без изменений, кроме очистки кеша):

struct NoiseppNoise
{
NoiseppNoise();
double Generate( double x, double y );

noisepp::ThreadedPipeline2D mPipeline2d;
noisepp::ElementID mThreadCount;
noisepp::PerlinModule mPerlin;
noisepp::ElementID mNoiseID2D;
noisepp::Cache*  mCache2d;
};

/* constructor as in the question */

double NoiseppNoise::Generate( double x, double y )
{
mPipeline2d.cleanCache (mCache2d);  // clean the cache before calculating value
return mPipeline2d.getElement( mNoiseID2D )->getValue ( x, y, mCache2d );
}

Называя это с

NoiseppNoise np;
std::cout<<np.Generate(1.5,1)<<std::endl;

на самом деле выводит хорошее значение, 0,0909 для меня.

Однако, если вы называете это с двумя «целыми числами» (например, 3.0 и 5.0), результат будет 0, потому что в какой-то момент выполняется что-то похожее на следующее утверждение:

const Real xs = Math::CubicCurve3 (x - Real(x0));

Если параметры являются целыми числами, то x а также Real(x0) всегда одинаковы, потому что Real(x0) в основном целая часть x так что xs будет установлен в 0. После этого есть больше вычислений, чтобы получить фактическое значение, но оно становится детерминированным 0.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]