我使用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 );
}
最佳答案
我已经在您的代码中添加了以下几行来进行编译(除清理缓存外,基本上没有其他更改):
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。关于c++ - Noise++ Perlin模块始终返回0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19578503/