载入中
  • 题目:三维随机分形地形生成(续五)
  • 作者:佚名
  • 发表日期:十月 02, 2007
  • 浏览:214次
  • 收藏本文
  • 编者导读:参考前五幅插图,下图示意了使用我们的 diamond-square 算法两次经过数组时发生的情况。     对于第一遍经过 diamond 步时,我们依据四个角的值在数组中心生成一个值。我们平均四个角的值(如果种子值相等则完全没必要),并加上一个 -1.0 到 1.0 之间的随机...
  • 参考前五幅插图,下图示意了使用我们的 diamond-square 算法两次经过数组时发生的情况。

        对于第一遍经过 diamond 步时,我们依据四个角的值在数组中心生成一个值。我们平均四个角的值(如果种子值相等则完全没必要),并加上一个 -1.0 到 1.0 之间的随机值。在插图 b 中,新值显示成黑色,已经存在的点显示为灰色。

        对于 square 步,我们在相同的范围内生成随机值。这一步时有四个棱锥;他们在数组中心相交,这样我们计算四个 diamond 中心。 diamonds 的角被平均以找出新值的基数。插图 C 用黑色显示新值,现存值为灰色。

        以上是第一遍,如果用线将这 9 个点边起来,就可以得到一个线框的表面,看起来就象:

         现在进行第二遍。再次从 diamond 步开始。第二遍与第一遍有两点不同。首先,我们现在有四人四边形面不是一个,因此我们得计算四个方面的中心。其次,这是关键,生成随机数的范围已经被减小了。因为例子的缘故,让我们认为正在使用一个 H=1.0 的值。这将把我们的随机数取值范围将从 (-1.0,1.0) 到 (-0.5,0.5) 。在插图 D 中,我们这一步计算得到的四个正方形中心值显示为黑色。

        最后,我们进行第二遍的 square 步。有 12 个棱锥中心,我们现在需要计算 12 个新值,如图 e 中黑色所示。

        现在数组中全部 25 个元素都已经生成。我们可以得到如下的线框曲面。

        如果分配更大的数组,我们可以进行更多遍,每一遍加入更多细节。例如, 5 遍之后表面看起来如下所示:

        前面提到过,数组维数需要为 2 的整数次方加 1 。这是因为 2D 数组中的浮点数必须等于 (2n+1)2 。 8 次迭代将需要一个 257X257 的浮点数组,对于标准的 32 位 IEEE 浮点数来说超过 256K 内存。

        好了,它就是这么大。用 char 取代 floats 会有所帮助。例子程序使用 floats ,但你要真的关注内存使用那么使用 char 。修改例子使用之使用 -128 到 128 的范围是很容易的,但别忘了将你生成的值限定在 -128 到 128 范围里,子序列通过时会生成该范围以外的值,这会导致溢出。这在使用较小的 H 时尤其可能。

        例子程序演示了处理尺寸的另外一种方法。用一个大数组依据 diamond-square 算法进行定位及拼嵌。然后从平行投影体顶视图进行绘制。这个图像被读回来并用作已经拼嵌成较小范围的第二个数组上的纹理图。然而,例子程序并没有这样做,一但图像从帧缓冲读回,第一个数组就被释放了。

  • 【引用地址】http://www.suanshu.net/list/5052.aspx
  • 【关键字】题目:三维随机分形地形生成(续五)
载入中
版权申明:非特殊申明,本站文章均系转载自互联网,如果侵犯了你的合法权益,请告知我们,我们会第一时间处理. 要点评这篇文章,请在下面留言
针对这篇文章的评论
  • 评论载入中
    评论载入中...请稍后...

发表您的评论您的评论

用户名: 验证码: 说明:评论并不需要注册.如果您不是本站会员,你可以注册为本站会员. 注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
  • 不良评论请用报告管理员,以利管理员及时删除。
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规。
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任。
  • 本站评论管理人员有权保留或删除其管辖评论中的任意内容。
  • 您在本站发表的作品,本站有权在网站内转载或引用。
  • 参与本评论即表明您已经阅读并接受上述条款。

赞助商链接