繁体   English   中英

纹理Opengl地形?

[英]Texturing Opengl Terrain?

在OpenGL中用四边形构造地形的最佳方法是什么? 我想为我的地形提供大约30种不同的纹理(每种地形类型有1种纹理,因此有30种地形类型),并且希望在任意两种地形之间有平滑的过渡。

我一直在网上做一些浏览,发现有很多不同的方法,包括3D纹理,Alpha通道,混合和使用着色器。 但是,哪些是最有效的,可以处理我想要使用的纹理量? 例如: 这个流行的答案描述了如何使用某些技术,但由于mixmap只有4个属性(RGBA),因此只能支持4个纹理。

我还应该注意,我对着色器一无所知,因此非着色器需要的技术会更好。

由于您链接到描述纹理喷溅的答案,并且其问题提到游戏Oblivion,我可以提供一些额外的洞察力。

使用RGBA mixmap的基本纹理splatting仅支持每个terrain四个纹理四个纹理,但您可以为不同的四边形使用不同的纹理集。 Oblivion将其地形划分为每边32个网格点(192英尺)的正方形(称为“单元格”),每个单元格定义自己的四个地形纹理集。 因此,您不能在一个小区域内拥有大量纹理多样性,但您可以轻松地在较大区域上改变纹理。 如果您愿意,可以为较小的区域(甚至是单个四边形)定义纹理集,但代价是使用更多内存。

如果您在四元组中确实需要四个以上的纹理,则可以使用多个混合地图。 对于每个额外的一个,您只需执行另一个纹理查找以获得另外四个混合因子,并在前一个mixmap的结果之上混合另外四个纹理。 您可以根据需要扩展到尽可能多的纹理,同样以牺牲内存为代价。

纹理喷溅在高度图上与LOD技术相结合可能很棘手,因为当单个低细节地形四边形代表一组高细节四边形时,您必须为大四边形的不同区域采样几个不同的混合图。 Oblivion通过仅对全细节地形使用纹理喷溅来回避这个问题; 以较低分辨率渲染的远程单元格使用由编辑器生成的预先计算的纹理,其预先进行喷溅和缩小。

一种可以替代的质感泼洒是使用clipmap渲染“ megatexture ”。 使用这种方法,您可以使用单个大型纹理来表示整个地形,并且可以通过加载RAM的不同部分来填充RAM,其中只需要根据查看器的当前位置实际渲染它所需的细节。 (在完整细节处无法看到地形的远处部分,因此无需在完整细节处加载它们。)

这种方法的优点是它的艺术自由:您可以在纹理中的任何位置放置精细的细节,而不考虑顶点网格。 缺点是它实现起来相当复杂,并且整个剪贴图必须存储在某个地方 ,可能存储在磁盘上的大文件中,以便您可以根据需要将部分内容加载到RAM中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM