OpenGL中的CLOD Planet宽纹理

Posted

技术标签:

【中文标题】OpenGL中的CLOD Planet宽纹理【英文标题】:CLOD Planet wide texturing in OpenGL 【发布时间】:2009-05-29 21:28:11 【问题描述】:

我正在使用 ROAM(连续细节)完成一个 3D 星球。

我现在的目标是使用纹理进行高质量的渲染。

我正在尝试找到一种可以使用平铺系统的方法(组合好的小纹理),但在某种程度上我可以利用我的 CLOD 网格。

使用这种平铺系统的当前算法(根据我的发现)会产生巨大的纹理,然后直接应用它。那不是我想要的……星球很大,我想要的不仅仅是增加纹理大小。

这种东西有什么已知的算法/opengl 特性吗?

我对着色器了解不多,但是是否有可能创建一个单独绘制对象的着色器...我的意思是,不给出 texcoords,而是为网格的每个像素(不是顶点)设置正确的颜色?

PS:我的世界是使用柏林噪声构建的......所以我可以得到任何世界点的高度(无限分辨率的高度图)

【问题讨论】:

真棒的问题,可惜我有一段时间没票了 像素着色器做你想做的事:对于每个像素,计算它应该是什么颜色。着色器语言有一些严格的限制,但诸如“点积”和“在 1d/2d/3d 地图中查找”之类的操作是原语。 您的问题到底是什么? - 你没有 (u,v) 纹理坐标并且你想动态生成一些? - 您希望您的纹理在放大时添加细节 @purpledog...我基本上想要一种更好的方式来纹理化我的星球。我在一个平铺系统上有几个纹理,具有适当的 (u,v)。每个图块的百分比与该点的高度和为纹理定义的范围之间的距离成正比...但是我的星球有很多重复...它是一个大图块...需要更好的东西。 【参考方案1】:

您已经为地形使用了 3D Perlin 噪波,为什么不同时生成纹理呢?通常,像 Terragen、Vistapro 等程序使用高度从调色板中随机选择一个颜色范围,根据坡度修改该颜色,并可能根据坡度和高度从较小的纹理中添加细节。在您的情况下,距离也可以修改细节。就此而言,2d perlin 噪声对于细节纹理效果很好。

你有没有修改过高度图?使用纯 3d Perlin 噪声很难实现类似海洋的效果,但是将低于特定高度的所有内容展平并应用良好的算法海洋纹理(适当调整 2d Perlin 噪声,透明度低于一定水平)看起来不错。

【讨论】:

你能提供更多关于你的第二句话的信息吗?使用柏林噪声的算法海洋上有任何样本或链接吗?主要是如何处理灯光...... 好吧,看看这张幻灯片。 (noisemachine.com/talk1/9.html) Perlin 正在演示布料,但是如果不考虑他介绍的分离纤维的操作,那么水会变得很好,尤其是如果您注意镜面反射。他在演讲开始时在大理石花瓶上所做的事情对于更陌生的海洋非常有效。我认为幻灯片 22 最适合水 - 只是对噪声函数的一系列调用的绝对值的总和。

以上是关于OpenGL中的CLOD Planet宽纹理的主要内容,如果未能解决你的问题,请参考以下文章

一个主 OpenGL 程序中的多个着色器

将 CIFilter 应用于 OpenGL 渲染到纹理

纹理未正确显示 - 可能坐标是错误的 OpenGL、C++

OpenGL第八节:非二次幂的纹理渲染处理

OpenGL ES纹理

opengl翻转后为啥出现两个图像