我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些很棒的行星。我正在使用通过归一化映射到球体的立方体。
这张图片中的地形纹理尚未正确。这只是来自高度图的渲染。然而这不是我的问题。从立方体创建球体时,您会留下 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);
}
这背后的原因可以在 here 中看到。
但是,球体的结构将使以后更容易以 Quad-Ttee 的形式实现 lod。无论如何,我可以使用 LibNoise 生成立方体贴图高度图吗?或者我可以做些什么来使球体能够使用球面高度图?
我想出了如何使用 Sphere Maps 进行渲染,但是当我开始使用四叉树时,这将不起作用。但是,它会产生一些不错的结果,例如:
所以,我几乎需要知道如何将噪声平铺到立方体贴图中。使用 Libnoise 或在顶点着色器中。
最佳答案
我终于让它按照我的意图工作了。为此,我通常在没有立方体贴图或球体贴图的情况下打开立方体。我以立方体贴图的形式应用具有 3D Perlin 噪声的高度,但我没有使用 UV 坐标,因此我没有将其展开为立方体贴图也没有关系。然后我根据顶点的高度应用纹理,它似乎产生了很好的结果。也许我以后会遇到问题谁知道。这是我现在得到的图片:
PS:那不是月亮,而是太阳。出于测试目的,它更近了,我现在还没有太阳纹理,所以我只使用了旧的灰度高度图纹理,这样我就可以更好地看到它。这个星球现在开始看起来很棒了。
关于opengl - C++ OpenGL Cube Map Perlin Noise to Sphere,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14532022/