我使用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 );
}发布于 2013-10-25 02:04:35
我在代码中添加了以下行以进行编译(除了清理缓存外,基本上没有任何更改):
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。
https://stackoverflow.com/questions/19578503
复制相似问题