4

我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些踢屁股的行星。我正在使用已通过标准化映射到球体的 Cube。行星地形和天空

这张照片中的地形尚未正确纹理化。这只是高度图的渲染。然而,这不是我的问题。从立方体创建球体时,您会留下 6 个弯曲成球体形状的面。因此,我没有可用于将球形高度图包裹在地形周围的纬度和经度。目前我正在使用立方体映射。但是,这会导致几个问题,如您所见: 立方体到球体映射问题 ——我的问题变得很明显。问题是由于球体仍然具有立方体的拓扑结构。我必须为每个面生成一个高度图。我目前使用 Libnoise 作为高度图,这就是大问题的开始。我可以将它导出为球形高度图(如果我有一个球体,这将很有用),或者我可以使用必须映射到所有 6 个面的平面高度图。但是,由于映射的工作方式。我可以让 3 个面在中间排列并且是无缝的,但最后一个高度图不会加入第一个高度图,因为 Lib 噪声使用边界并创建坐标网格。

球体是这样创建的——

for(int i = 0; i < vertices.size(); i++)
{

    glm::vec3 oldVec = vertices[i];
    glm::vec3 newVec = glm::normalize(oldVec);
    vertices[i] = newVec * glm::vec3(500, 500, 500);
}

这背后的原因可以在这里看到。

但是,球体的结构将使以后更容易以 Quad-Ttee 的形式实现 lod。无论如何我可以用 LibNoise 生成立方体贴图高度图吗?或者我可以做些什么来使球体能够使用球形高度图?

我想出了如何使用 Sphere Maps 进行渲染,但是当我开始使用四叉树时,这将不起作用。但是,它会产生一些不错的结果,例如:

在此处输入图像描述

所以,我几乎需要知道如何将噪声平铺到立方体贴图中。使用 Libnoise 或在顶点着色器中。

4

1 回答 1

1

我终于让它按我的意图工作了。为此,我通常在没有立方体贴图或球体贴图的情况下展开立方体。我以立方体贴图的形式应用具有 3D Perlin 噪声的高度,但我没有使用 UV 坐标,因此我没有将其展开为立方体贴图并不重要。然后我根据顶点的高度应用纹理,它似乎产生了很好的结果。也许我以后会遇到问题,谁知道呢。这是我现在得到的图片:

在此处输入图像描述

PS:那不是月亮,是太阳。出于测试目的,它更近了,我目前没有太阳纹理,所以我只使用了旧的灰度高度图纹理,这样我可以更好地看到它。这颗星球现在开始看起来很棒了。

于 2013-01-27T13:25:43.777 回答