gpt4 book ai didi

c++ - Noise++ Perlin 模块一直返回 0

转载 作者:行者123 更新时间:2023-11-28 07:20:21 25 4
gpt4 key购买 nike

我使用 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));

如果参数是整数,那么 xReal(x0) 总是相同的,因为 Real(x0) 基本上是整数部分xxs 将被设置为 0。在此之后,有更多的计算来获取实​​际值,但它确定性地变为 0。

关于c++ - Noise++ Perlin 模块一直返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com