1

我刚开始做一些测试libnoise从关于 getvalue() 的文档中,这个方法应该返回一个从 -1 到 1 的值,但是下一个代码(不是本教程的到目前为止)返回一些超过 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;
}

然后我尝试复制+粘贴教程并更改一件事,即我想要获得价值的点。显然,我使用了一个点,我的代码返回一个大于 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 ......所以现在,我看到没有人在 google & co 上抱怨这一点。所以不知道我是否弄乱了某些东西,但是由于我使用了教程并且由于要点不具体,所以我认为这不是我的错...

(我仍然可以得到最大值和最小值并进行归一化)

我现在也为此开了一张错误票。

4

1 回答 1

2

GradientNoise3D 函数 (noisegen.cpp) 中有一个错误。最终的点积乘以 2.12,据说使值在 [-1,1] 范围内。但是,正确的值应该是 0.57735... (1/sqrt(3))

于 2014-02-13T23:33:50.463 回答