opengl - C++ OpenGL Cube Map Perlin Noise to Sphere

标签 opengl geometry mapping perlin-noise heightmap

我目前正在制作一些行星生成,主要是为了好玩,并希望最终能得到一些很棒的行星。我正在使用通过归一化映射到球体的立方体。 planet terrain and sky

这张图片中的地形纹理尚未正确。这只是来自高度图的渲染。然而这不是我的问题。从立方体创建球体时,您会留下 6 个弯曲成球体形状的面。因此,我没有可用于在地形周围包裹球形高度图的纬度和经度。目前我正在使用立方体映射。但是,这导致了几个问题,如您所见:
cube-to-sphere mapping problems
——我的问题变得明显了。问题是由于球体仍然具有立方体的拓扑结构。我必须为每张脸生成一个高度图。我目前使用 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 进行渲染,但是当我开始使用四叉树时,这将不起作用。但是,它会产生一些不错的结果,例如:

enter image description here

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

最佳答案

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

enter image description here

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

关于opengl - C++ OpenGL Cube Map Perlin Noise to Sphere,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14532022/

相关文章:

在球体上计算 Voronoi 图的算法?

algorithm - 在 C++ 中查找所有对欧几里德距离的更快方法

mongodb - 使用 Spring Data 将 Kotlin 内联类存储到 MongoDB

multithreading - 为什么 GPUImage 使用信号量和处理队列而不是带有运行循环的线程?

c++ - Xcode 上的 OpenGL 版本 - glfw 与 sfml

c++ - OpenGL/glut/stdc++ 构建错误

c++ - 不断向 glBufferData 添加新点的最佳方法是什么?

c++ - 交线多边形 boost 几何体

fluent-nhibernate - NHibernate fluent 防止 child 被更新

javascript - 映射具有用户 ID 的对象数组并从该用户 ID 获取用户详细信息