C++ 纹理Opengl地形?

C++ 纹理Opengl地形?,c++,opengl,textures,terrain,C++,Opengl,Textures,Terrain,在OpenGL中对四边形地形进行纹理处理的最佳方法是什么?我有大约30种不同的纹理,我想我的地形(1纹理每地形类型,所以30地形类型),并希望有平滑过渡之间的任何两个地形 我一直在网上浏览,发现有很多不同的方法,包括3d纹理、Alpha通道、混合和使用着色器。但是,哪一个是最有效的,并且可以处理我希望使用的纹理数量?例如:介绍如何使用某些技术,但由于mixmap只有4个属性(RGBA),因此只能支持4个纹理 我还应该注意,我对着色器一无所知,所以最好使用不需要着色器的技术 既然您链接到了一个描述

在OpenGL中对四边形地形进行纹理处理的最佳方法是什么?我有大约30种不同的纹理,我想我的地形(1纹理每地形类型,所以30地形类型),并希望有平滑过渡之间的任何两个地形

我一直在网上浏览,发现有很多不同的方法,包括3d纹理、Alpha通道、混合和使用着色器。但是,哪一个是最有效的,并且可以处理我希望使用的纹理数量?例如:介绍如何使用某些技术,但由于mixmap只有4个属性(RGBA),因此只能支持4个纹理


我还应该注意,我对着色器一无所知,所以最好使用不需要着色器的技术

既然您链接到了一个描述游戏的答案,并且它的问题提到了游戏遗忘,我可以提供一些额外的见解

使用RGBA混合贴图的基本纹理散点仅支持每个地形四边形四个纹理,但可以为不同四边形使用不同的纹理集。Oblivion将其地形划分为每侧32个网格点(192英尺)的正方形(称为“单元”),每个单元定义自己的一组四种地形纹理。所以你不可能在一个小区域内有很多纹理多样性,但是你可以在更大的区域内很容易地改变你的纹理。如果愿意,可以为较小的区域(甚至单个四边形)定义纹理集,但需要使用更多内存

如果一个四边形中确实需要四个以上的纹理,则可以使用多个混合贴图。对于每个附加的纹理,您只需执行另一个纹理查找以获得四个混合因子,并在上一个混合贴图的结果的基础上再混合四个纹理。您可以根据需要放大到任意多个纹理,这同样是以牺牲内存为代价的


纹理散点可能很难与高度贴图上的技术结合,因为当单个低细节地形四边形表示一组高细节四边形时,必须为大四边形的不同区域采样多个不同的混合贴图。Oblivion通过仅对全细节地形使用纹理散点来回避这个问题;以较低分辨率渲染的远距离单元使用编辑器生成的预计算纹理,该编辑器会提前进行展开和缩小缩放。

纹理展开的一种替代方法是使用渲染器渲染“”。使用这种方法,您可以拥有一个表示整个地形的大纹理,并且可以通过加载不同部分来避免填充RAM,因为加载的细节仅与根据查看器当前位置渲染所需的细节相同。(地形的远处部分无法看到全部细节,因此无需加载全部细节。)


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

您是否使用LOD技术,例如或?这可能会影响你的纹理选择。我目前没有做任何LOD技术,但我会研究这些技术。FWIW。,谢谢你的解释:)