首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环的Java - Perlin噪声

循环的Java - Perlin噪声
EN

Stack Overflow用户
提问于 2012-08-28 15:37:11
回答 2查看 1.1K关注 0票数 0

我需要使用我编写的perlin noise程序在Java中为3D行星(球体)生成纹理。但是需要注意的是,左侧和右侧需要相同,上下也一样,这样才能将纹理放置在球体上。

我不能把柏林噪声源放在这里,因为它太长了,但它主要是基于http://devmag.org.za/2009/04/25/perlin-noise/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-28 15:47:57

perlin噪声的工作方式是它在栅格值之间进行插值。

为此,简单噪波将更合适(否则噪波密度将不会在极点相同,因为您无法使用正方形正确地铺设球体)。

您需要将球体划分为单形(在本例中为三角形),然后为每个三角形角度(每个点只有一次)随机化值。

然后,您可以通过使用单纯形噪波方法插值来计算三角形每个点处的纹理。

票数 1
EN

Stack Overflow用户

发布于 2012-09-22 00:50:34

如果您的噪波函数缩放到4D,那么您可以向x,y,z,w提供两个2D圆的坐标。生成的图像将在x和y轴上以最佳方式平铺。

例如(非常草率,但为了清楚起见):

代码语言:javascript
运行
复制
float textureSize = 1024.0f;

    for(float i = 0.0f; i < textureSize; i += 1.0f){

      for(float j = 0.0f; j < textureSize; j += 1.0f){

        nx = cos((i / textureSize) * 2.0f * PI);
        ny = cos((j / textureSize) * 2.0f * PI);
        nz = sin((i / textureSize) * 2.0f * PI);
        nw = sin((j / textureSize) * 2.0f * PI);

        looped_noise = noise_4D( nx, ny, nz, nw, octaves, persistence, lacunarity, blah...);
        noise_buffer[((int)i * (int)textureSize) + (int)j] = looped_noise;

      }
    }

如果您的函数不能轻松扩展到4D,请尝试使用任何简单的噪声实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12154749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档