我刚刚开始使用libnoise
,from the documentation about getvalue()进行一些测试,此方法应返回-1到1之间的值,但下一个代码(not so far of this tutorial)会返回一些值1:
// g++ test.cc -lnoise#include<iostream>
#include<noise/noise.h>
int main(){
noise::module::Perlin Ken; // Ken Perlin dat's the guy who developed the noise
// I do some noise some time too... more heavy \m/
int i; // dat's the guys who dev... just kidding...
int j;
double dragon;
for(j=0;j<100;j++) for(i=0;i<100;i++){
dragon = Ken.GetValue(double(i)/100.,double(j)/100.,0.5);
if(dragon>1)std::cout<<"("<<double(i)/100.<<";"<<double(j)/100.<<")= "<<dragon<<std::endl;
}
return 0;
}
然后我尝试复制+粘贴tutorial并更改一件事,我希望获得该值。显然,我使用了一个点,我的代码返回一个超过1的值,比如:(0.8,0.19,0.5)谁给了1.00101。所以,
#include <iostream>
#include <noise/noise.h>
using namespace noise;
int main (int argc, char** argv)
{
module::Perlin myModule;
double value = myModule.GetValue (0.8, 0.19, 0.50);
std::cout << value << std::endl;
return 0;
}
并且仍然返回1.00101仍然超过1 ... 所以现在,我看到没有人抱怨谷歌&amp;合。所以不知道我是否搞砸了一些东西,但是因为我使用了教程,因为这一点并不特别,我觉得这不是我的错...
(我仍然可以获得最大值和最小值并标准化)
我现在也为此开了一张错误票。
答案 0 :(得分:2)
GradientNoise3D函数(noisegen.cpp)中存在错误。最终的点积乘以2.12,据说可以使值在[-1,1]范围内。但是,正确的值应为0.57735 ...(1 / sqrt(3))