C OpenGL立方体将Perlin噪声映射到球体

C OpenGL立方体将Perlin噪声映射到球体,第1张

概述我目前正在研究一些行星生成,主要是为了好玩,并希望最终得到一些踢屁股行星.我正在使用一个已通过规范化映射到球体立方体. 在这张照片中,地形没有正确纹理.这只是Heightmap的渲染.但这不是我的问题.从立方体创建球体时,您将留下6个弯曲成球体形状的面.因此,我没有可用于在地形周围包裹球形高度图的纬度和经度.目前我正在使用Cube Mapping.但是,这会导致一些问题,您可以看到: – 我的问 我目前正在研究一些行星生成,主要是为了好玩,并希望最终得到一些踢屁股行星.我正在使用一个已通过规范化映射到球体的立方体.

在这张照片中,地形没有正确纹理.这只是Heightmap的渲染.但这不是我的问题.从立方体创建球体时,您将留下6个弯曲成球体形状的面.因此,我没有可用于在地形周围包裹球形高度图的纬度和经度.目前我正在使用Cube MapPing.但是,这会导致一些问题,您可以看到:

– 我的问题变得明显了.问题是由于球体仍然具有立方体的拓扑结构.我必须为每张脸生成一个高度图.我目前使用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:那不是月亮,而是太阳.为了测试目的它更接近,我现在没有太阳纹理,所以我只使用旧的灰度高度图纹理,所以我可以看到它更好.现在这个星球开始变得很棒了.

总结

以上是内存溢出为你收集整理的C OpenGL立方体将Perlin噪声映射到球体全部内容,希望文章能够帮你解决C OpenGL立方体将Perlin噪声映射到球体所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1226452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存