我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些踢屁股的行星。我正在使用已通过标准化映射到球体的 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 或在顶点着色器中。