亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? noise.cc

?? 一個用MATLAB語言編寫的攝像機標定工具箱,內(nèi)容豐富
?? CC
?? 第 1 頁 / 共 2 頁
字號:
//
// Noise.cc
//
// original implementation due to Ken Perlin, via Ken Musgrave
//
// $Id: noise.cc,v 1.1.1.1 2001/02/28 00:28:37 cstolte Exp $
//

#include <sgl/noise.h>
#include <sgl/mathfunc.h>
#include <sgl/vecmath3.h>
#include <assert.h>

extern int p_precomputed[];
extern double g_precomputed[][3];
const u_int hash_size = 0x100;

//#define FILTER_ARGS

// utility functions

static void
setup(double pos, int &hash0, int &hash1, double &r0, double &r1)
{
  const int big_random_constant = 0x100000;

  double tmp = pos + big_random_constant;
  int int_tmp = int(tmp);

  hash0 = int_tmp & (hash_size-1);
  hash1 = (hash0+1) & (hash_size-1);
  r0 = tmp-int_tmp;
  r1 = r0-1.;
}

static double 
at2(double rx, double ry, double *q)
{
  return rx*q[0]+ry*q[1];
}

static double 
s_curve(double val)
{
  return val*val*(3-2*val);
}

static double 
at3(double rx, double ry, double rz, double *q)
{
  return rx*q[0]+ry*q[1]+rz*q[2];
}

#ifdef FILTER_ARGS
static void 
filter_arg(double *arg)
{
  assert(fabs(*arg) < 1.e13);
  const u_int maxval = 2147483647;
  const u_int two_maxval = 4294967294;

  if (*arg < 0) *arg = -*arg;

  while (*arg > maxval || *arg < 0)
    {
      if (*arg > maxval)
	  *arg = two_maxval - *arg;
      else
	  *arg = -*arg;
    }
}
#endif /* FILTER_ARGS */

// implementations of noise functions

double
Noise(double x)
{
    return Noise2(x, 0.5525221);
}

double 
Noise2(double x, double y)
{
  int bx0,bx1,by0,by1;
  double rx0,rx1,ry0,ry1;

#ifdef FILTER_ARGS
  filter_arg(&x);
  filter_arg(&y);
#endif /* FILTER_ARGS */

  setup(x, bx0, bx1, rx0, rx1);
  setup(y, by0, by1, ry0, ry1);

  int hashLL = p_precomputed[p_precomputed[bx0]+by0];
  int hashLR = p_precomputed[p_precomputed[bx1]+by0];
  int hashUL = p_precomputed[p_precomputed[bx0]+by1];
  int hashUR = p_precomputed[p_precomputed[bx1]+by1];

  double weightLL = at2(rx0, ry0, g_precomputed[hashLL]);
  double weightLR = at2(rx1, ry0, g_precomputed[hashLR]);
  double weightUL = at2(rx0, ry1, g_precomputed[hashUL]);
  double weightUR = at2(rx1, ry1, g_precomputed[hashUR]);

  double sx = s_curve(rx0);
  double lower_weight = lerp(sx, weightLL, weightLR);
  double upper_weight = lerp(sx, weightUL, weightUR);
  double sy = s_curve(ry0);
  double alt = lerp(sy, lower_weight, upper_weight);

  return alt;
}

double 
DNoise2(double x, double y, double *dx,double *dy)
{
  int bx0, bx1, by0, by1;
  double rx0, rx1, ry0, ry1;

#ifdef FILTER_ARGS
  filter_arg(&x);
  filter_arg(&y);
#endif /* FILTER_ARGS */

  setup(x, bx0, bx1, rx0, rx1);
  setup(y, by0, by1, ry0, ry1);

  int hashLL = p_precomputed[p_precomputed[bx0]+by0];
  int hashLR = p_precomputed[p_precomputed[bx1]+by0];
  int hashUL = p_precomputed[p_precomputed[bx0]+by1];
  int hashUR = p_precomputed[p_precomputed[bx1]+by1];

  double weightLL = at2(rx0, ry0, g_precomputed[hashLL]);
  double weightLR = at2(rx1, ry0, g_precomputed[hashLR]);
  double weightUL = at2(rx0, ry1, g_precomputed[hashUL]);
  double weightUR = at2(rx1, ry1, g_precomputed[hashUR]);

  double sx = s_curve(rx0);
  double lower_weight = lerp(sx, weightLL, weightLR);
  double upper_weight = lerp(sx, weightUL, weightUR);
  double sy = s_curve(ry0);
  double alt = lerp(sy, lower_weight, upper_weight);

  const double delta = 0.001;
  const double delta_inv = 1000.;

  double sxd = s_curve(rx0+delta);
  double syd = s_curve(ry0+delta);
  double dx0 = lerp(sxd, weightLL, weightLR) - lower_weight;

  double dx1= lerp(sxd, weightUL, weightUR) - upper_weight;
  *dx = lerp(sy, dx0, dx1) * delta_inv;
  *dy = (lerp(syd, lower_weight, upper_weight) - alt) * delta_inv;

  return alt;
}

double 
Noise3(double x, double y, double z)
{
  int bx0, bx1, by0, by1, bz0, bz1;
  double rx0, rx1, ry0, ry1, rz0, rz1;
  double a,b,c,d;

#ifdef FILTER_ARGS
  filter_arg(&x);
  filter_arg(&y);
  filter_arg(&z);
#endif /* FILTER_ARGS */

  setup(x,bx0,bx1,rx0,rx1);
  setup(y,by0,by1,ry0,ry1);
  setup(z,bz0,bz1,rz0,rz1);

  int hashLL = p_precomputed[p_precomputed[bx0]+by0];
  int hashLR = p_precomputed[p_precomputed[bx1]+by0];
  int hashUL = p_precomputed[p_precomputed[bx0]+by1];
  int hashUR = p_precomputed[p_precomputed[bx1]+by1];

  double weightBLL = at3(rx0, ry0, rz0, g_precomputed[hashLL+bz0]);
  double weightBLR = at3(rx1, ry0, rz0, g_precomputed[hashLR+bz0]);
  double weightBUL = at3(rx0, ry1, rz0, g_precomputed[hashUL+bz0]);
  double weightBUR = at3(rx1, ry1, rz0, g_precomputed[hashUR+bz0]);
  double weightTLL = at3(rx0, ry0, rz1, g_precomputed[hashLL+bz1]);
  double weightTLR = at3(rx1, ry0, rz1, g_precomputed[hashLR+bz1]);
  double weightTUL = at3(rx0, ry1, rz1, g_precomputed[hashUL+bz1]);
  double weightTUR = at3(rx1, ry1, rz1, g_precomputed[hashUR+bz1]);

  double sx = s_curve(rx0);
  double sy = s_curve(ry0);
  double sz = s_curve(rz0);

  a = lerp(sx, weightBLL, weightBLR);
  b = lerp(sx, weightBUL, weightBUR);
  c = lerp(sy, a, b);
  a = lerp(sx, weightTLL, weightTLR);
  b = lerp(sx, weightTUL, weightTUR);
  d = lerp(sy, a, b);

  return lerp(sz,c,d);
}

double 
Noise3(const Tuple3d &p)
{
    return Noise3(p.x, p.y, p.z);
}

Vector3
DNoise3(double x, double y, double z)
{
  int bx0, bx1, by0, by1, bz0, bz1;
  double rx0, rx1, ry0, ry1, rz0, rz1;
  double sx, sy, sz;
  double a0, a1, a2, b0, b1, b2, c0, c1, c2, d0, d1, d2;
  double u0, u1, u2, v0, v1, v2;

#ifdef FILTER_ARGS
  filter_arg(&x);
  filter_arg(&y);
  filter_arg(&z);
#endif // FILTER_ARGS

  setup(x, bx0, bx1, rx0, rx1);
  setup(y, by0, by1, ry0, ry1);
  setup(z, bz0, bz1, rz0, rz1);

  int hashLL = p_precomputed[p_precomputed[bx0]+by0];
  int hashLR = p_precomputed[p_precomputed[bx1]+by0];
  int hashUL = p_precomputed[p_precomputed[bx0]+by1];
  int hashUR = p_precomputed[p_precomputed[bx1]+by1];

  sx = s_curve(rx0);
  sy = s_curve(ry0);
  sz = s_curve(rz0);

  u0 = at3(rx0, ry0, rz0, g_precomputed[hashLL+bz0]);
  u1 = at3(rx0, ry0, rz0, g_precomputed[hashLL+bz0+1]);
  u2 = at3(rx0, ry0, rz0, g_precomputed[hashLL+bz0+2]);
  v0 = at3(rx1, ry0, rz0, g_precomputed[hashLR+bz0]);
  v1 = at3(rx1, ry0, rz0, g_precomputed[hashLR+bz0+1]);
  v2 = at3(rx1, ry0, rz0, g_precomputed[hashLR+bz0+2]);
  a0 = lerp(sx, u0, v0);
  a1 = lerp(sx, u1, v1);
  a2 = lerp(sx, u2, v2);

  u0 = at3(rx0, ry1, rz0, g_precomputed[hashUL+bz0]);
  u1 = at3(rx0, ry1, rz0, g_precomputed[hashUL+bz0+1]);
  u2 = at3(rx0, ry1, rz0, g_precomputed[hashUL+bz0+2]);
  v0 = at3(rx1, ry1, rz0, g_precomputed[hashUR+bz0]);
  v1 = at3(rx1, ry1, rz0, g_precomputed[hashUR+bz0+1]);
  v2 = at3(rx1, ry1, rz0, g_precomputed[hashUR+bz0+2]);
  b0 = lerp(sx, u0, v0);
  b1 = lerp(sx, u1, v1);
  b2 = lerp(sx, u2, v2);

  c0= lerp(sy, a0, b0);
  c1= lerp(sy, a1, b1);
  c2= lerp(sy, a2, b2);

  u0 = at3(rx0, ry0, rz1, g_precomputed[hashLL+bz1]);
  u1 = at3(rx0, ry0, rz1, g_precomputed[hashLL+bz1+1]);
  u2 = at3(rx0, ry0, rz1, g_precomputed[hashLL+bz1+2]);
  v0 = at3(rx1, ry0, rz1, g_precomputed[hashLR+bz1]);
  v1 = at3(rx1, ry0, rz1, g_precomputed[hashLR+bz1+1]);
  v2 = at3(rx1, ry0, rz1, g_precomputed[hashLR+bz1+2]);
  a0 = lerp(sx, u0, v0);
  a1 = lerp(sx, u1, v1);
  a2 = lerp(sx, u2, v2);

  u0 = at3(rx0,ry1,rz1,g_precomputed[hashUL+bz1]);
  u1 = at3(rx0,ry1,rz1,g_precomputed[hashUL+bz1+1]);
  u2 = at3(rx0,ry1,rz1,g_precomputed[hashUL+bz1+2]);
  v0 = at3(rx1,ry1,rz1,g_precomputed[hashUR+bz1]);
  v1 = at3(rx1,ry1,rz1,g_precomputed[hashUR+bz1+1]);
  v2 = at3(rx1,ry1,rz1,g_precomputed[hashUR+bz1+2]);
  b0 = lerp(sx,u0,v0);
  b1 = lerp(sx,u1,v1);
  b2 = lerp(sx,u2,v2);

  d0 = lerp(sy,a0,b0);
  d1 = lerp(sy,a1,b1);
  d2 = lerp(sy,a2,b2);

  return Vector3(c0 + sz * (d0 - c0),
		 c1 + sz * (d1 - c1),
		 c2 + sz * (d2 - c2));
#if 0
  // why oh why does g++ give errors with this? cpp's output
  // checks out just fine--it's same as the above fix, just with
  // more (all balanced, etc) parenthesis.. --mmp

  return Tuple3d((lerp(sz,c0,d0)),
		 (lerp(sz,c1,d1)),
		 (lerp(sz,c2,d2)));
#endif
}

Vector3
DNoise3(const Tuple3d &p)
{
    return DNoise3(p.x, p.y, p.z);
}

// functions built on top of noise

double 
FBm(double x, double y, double z, double omega, double lambda, double octaves)
{
  double omega_prime = 1;
  double ret = 0;

  for (int i = 0; i < int(octaves); ++i)
    {
      ret += omega_prime * Noise3(x, y, z);
      omega_prime *= omega;
      x *= lambda;
      y *= lambda;
      z *= lambda;
    }
  ret += (octaves-int(octaves)) * omega_prime * Noise3(x, y, z);
  return ret;
}

double
FBm(const Tuple3d &p, double omega, double lambda, double octaves)
{
    return FBm(p.x, p.y, p.z, omega, lambda, octaves);
}

double 
Chaos(double x, double y, double z, double octaves)
{
  return FBm(x, y, z, .5, 2., octaves);
}

double 
Chaos(const Tuple3d &p, double octaves)
{
  return FBm(p.x, p.y, p.z, .5, 2., octaves);
}

Vector3
VfBm(double x, double y, double z, double omega, double lambda, double octaves)
{
  double omega_prime = 1;
  Vector3 ret(0, 0, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清视频一区| 国产欧美精品在线观看| 久久女同性恋中文字幕| 一区二区三区四区激情| 国产精品 欧美精品| 欧美一区二区三区思思人| 亚洲伦理在线免费看| 国产中文字幕精品| 91精品一区二区三区久久久久久| 日本一区二区三区电影| 国产在线不卡视频| 欧美午夜精品一区| 亚洲欧洲精品一区二区三区不卡 | 国产高清精品网站| 欧美一区二区三区小说| 亚洲已满18点击进入久久| www.日韩精品| 国产精品污网站| 国产一区二区三区日韩| 欧美电影免费观看完整版| 男女男精品网站| 欧美一区二区三区啪啪| 亚洲高清免费观看| 欧美日韩国产首页| 午夜伦理一区二区| 欧美日韩高清一区二区| 亚洲.国产.中文慕字在线| 在线精品国精品国产尤物884a| 国产精品久久精品日日| 成人午夜激情在线| 国产精品久久看| 99re成人在线| 亚洲黄色免费电影| 欧美日韩在线播放一区| 亚洲v日本v欧美v久久精品| 欧美视频一区二区三区| 亚洲一区二区四区蜜桃| 欧美日韩一区二区三区视频| 亚洲一区国产视频| 3751色影院一区二区三区| 午夜欧美电影在线观看| 日韩欧美一区二区久久婷婷| 激情图片小说一区| 中文字幕精品三区| 91猫先生在线| 日本成人中文字幕| 欧美精品一区二区久久婷婷 | 色视频一区二区| 亚洲制服丝袜av| 日韩一区二区三区视频| 国产在线一区观看| 亚洲欧美综合色| 欧美男人的天堂一二区| 美女诱惑一区二区| 国产精品嫩草久久久久| 91黄色激情网站| 毛片av一区二区| 欧美国产综合一区二区| 欧美无砖砖区免费| 久久国产欧美日韩精品| 欧美国产日韩一二三区| 在线观看日韩国产| 激情图片小说一区| 一区二区三区在线视频播放| 欧美一区二区在线免费观看| 国产伦理精品不卡| 亚洲成av人片一区二区梦乃 | 亚洲欧美一区二区久久| 欧美精选一区二区| 成人性色生活片免费看爆迷你毛片| 中文字幕一区二区三中文字幕| 欧美另类高清zo欧美| 福利一区在线观看| 午夜成人免费视频| 国产日韩影视精品| 6080国产精品一区二区| 不卡一区二区三区四区| 青青草国产精品97视觉盛宴 | 成人av在线一区二区三区| 亚洲香蕉伊在人在线观| 26uuu久久天堂性欧美| 日本韩国精品在线| 国产一二三精品| 丝袜亚洲另类欧美| 中文字幕中文字幕在线一区| 日韩视频免费直播| 在线观看欧美日本| 色综合久久综合网欧美综合网| 麻豆高清免费国产一区| 亚洲高清免费视频| 亚洲免费观看视频| 一区免费观看视频| 国产视频在线观看一区二区三区| 日韩三级免费观看| 欧美麻豆精品久久久久久| 在线精品观看国产| 91福利小视频| 色欧美乱欧美15图片| www.亚洲在线| 成人爱爱电影网址| 国产成人免费在线视频| 国内精品在线播放| 狠狠狠色丁香婷婷综合激情| 日本麻豆一区二区三区视频| 日韩—二三区免费观看av| 一区二区三区欧美在线观看| 亚洲欧美综合在线精品| 最新久久zyz资源站| 亚洲欧洲在线观看av| 日韩一区中文字幕| 自拍偷自拍亚洲精品播放| 国产精品久久免费看| 中文字幕亚洲区| 亚洲图片欧美激情| 亚洲欧美日韩系列| 一区二区三区在线不卡| 亚洲一区二区av电影| 亚洲成av人片观看| 奇米影视在线99精品| 久久精品国产亚洲高清剧情介绍| 免费人成黄页网站在线一区二区| 美脚の诱脚舐め脚责91| 久久精品国产亚洲高清剧情介绍| 精品中文字幕一区二区小辣椒| 国产自产2019最新不卡| 国产成人免费9x9x人网站视频| 成人高清免费在线播放| 91亚洲午夜精品久久久久久| 欧美三级三级三级| 精品欧美一区二区在线观看| 久久久综合精品| 亚洲色图在线播放| 亚洲成国产人片在线观看| 美女任你摸久久| 国产成人精品免费看| 色伊人久久综合中文字幕| 欧美三级电影在线看| 精品三级av在线| 中文字幕永久在线不卡| 天使萌一区二区三区免费观看| 免费观看久久久4p| 91在线视频免费观看| 欧美精品久久久久久久多人混战| 日韩亚洲电影在线| 国产精品九色蝌蚪自拍| 天堂一区二区在线免费观看| 精品一区二区三区免费| 成人18视频日本| 91精品国产综合久久精品app| 久久蜜臀中文字幕| 一区二区三区在线免费| 国产在线视频一区二区| 一本久久综合亚洲鲁鲁五月天| 3d动漫精品啪啪| 成人免费在线播放视频| 蜜臀91精品一区二区三区| 99久久综合狠狠综合久久| 在线不卡欧美精品一区二区三区| 久久精品视频在线看| 亚洲午夜免费视频| 国产91在线观看丝袜| 欧美日韩dvd在线观看| 国产精品激情偷乱一区二区∴| 日本在线播放一区二区三区| av中文字幕不卡| 精品少妇一区二区三区在线视频 | 国产日韩欧美不卡在线| 亚洲国产精品久久久久秋霞影院| 国产福利视频一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲精品ww久久久久久p站| 久久电影网电视剧免费观看| 欧美在线三级电影| 亚洲人成精品久久久久| 国产成人精品影视| 久久先锋影音av鲁色资源| 日韩成人dvd| 欧美特级限制片免费在线观看| 国产精品视频你懂的| 国产在线一区二区| 亚洲精品在线观| 久久国内精品自在自线400部| 欧美日韩三级在线| 亚洲福利视频一区二区| 欧美在线一二三| 亚洲一区二区欧美日韩| 色综合一个色综合亚洲| 国产精品福利一区二区三区| 国产高清在线观看免费不卡| 久久尤物电影视频在线观看| 午夜不卡av免费| 欧美日韩一二三区| 亚洲高清视频的网址| 在线视频欧美精品| 亚洲自拍另类综合| 欧美日韩大陆一区二区| 五月综合激情婷婷六月色窝| 欧美日韩电影一区| 天天综合天天做天天综合| 欧美日本国产视频|