我目前正在制作一些行星生成的项目,主要是为了好玩并且希望最终能够拥有一些非常棒的行星。我使用的是一个立方体,通过规格化被映射成了一个球体。
在这张图片中,地形还没有正确贴图。这只是高度图的渲染。然而这不是我的问题所在。当从一个立方体创建一个球体时,你会发现6个面都弯曲成了球体的形状。因此,我没有经纬度可以用于将球形高度图包裹到地形上。目前我正在使用立方体贴图。然而,这引起了一些问题,如下图所示:
这就是我的问题所在。问题是由于球体仍具有立方体的拓扑结构所致。我必须为每个面生成一个高度图。我目前使用Libnoise来处理高度图,这也是大问题的开始。我可以将其导出为球形高度图,但如果我只有一个立方体,那就没有用了;或者我可以使用平面高度图,但必须将其映射到所有6个面上。然而,由于映射的工作原理,我可以让3个面沿中间对接无缝拼接,但最后一个高度图与第一个高度图不匹配,因为Libnoise使用边界并创建坐标网格。
球体的创建方法如下—
这样做的原因可以在这里看到:这里。
然而,球体的结构将使得后期以Quad-Tree形式实现LOD更容易。我是否可以使用LibNoise生成立方体贴图高度图?或者我是否可以做些什么来使球体能够使用球形高度图?
我找到了如何使用Sphere Maps进行渲染,但是当我使用Quad Tree时这种方法行不通。但是,它产生了一些不错的结果,比如: 所以,我需要知道如何将噪声平铺到立方体贴图中。可以使用Libnoise或在顶点着色器中实现。
球体的创建方法如下—
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-Tree形式实现LOD更容易。我是否可以使用LibNoise生成立方体贴图高度图?或者我是否可以做些什么来使球体能够使用球形高度图?
我找到了如何使用Sphere Maps进行渲染,但是当我使用Quad Tree时这种方法行不通。但是,它产生了一些不错的结果,比如: 所以,我需要知道如何将噪声平铺到立方体贴图中。可以使用Libnoise或在顶点着色器中实现。