如何在 OpenGL 中将多个纹理分配到单个网格中?

Posted

技术标签:

【中文标题】如何在 OpenGL 中将多个纹理分配到单个网格中?【英文标题】:How do I assign multiple textures into single a mesh in OpenGL? 【发布时间】:2010-11-16 16:50:04 【问题描述】:

第一个例子: 您可以使用一个巨大的岩石形状的网格并在其上放置一个平铺的岩石纹理。 现在,有些地方需要用草纹理(或其他植被)覆盖。

另一个例子: 通常,地形是由平铺纹理构建的。为了获得不那么“平铺”的外观,您可以在其上应用 4 倍大(或 16 等..)的平铺纹理,这样您将获得一个不错的“随机”平铺纹理(在UDK 的文档)。

Blender(3d 图形应用程序)基于 OpenGL,它允许您将多个材质分配给单个网格。

如何在我自己的 OpenGL 应用程序中做到这一点? 谢谢, 阿米尔

附注: 我正在寻找比使用 tex a 渲染 50 个 tris 和使用 tex b 渲染另外 3 个 tris 更好的解决方案。

【问题讨论】:

【参考方案1】:

您正在寻找的是所谓的多重纹理。现代显卡有几个纹理单元,每个单元都可以采样不同的纹理。渲染岩石时,您为要渲染的每个纹理指定具有 UV 坐标的顶点。

在 OpenGL 中,您可以使用 glActiveTexture 到 select 您的活动纹理单元,以便您可以将纹理绑定到它并在后续渲染中使用它。您的顶点将需要额外的纹理坐标对;您打算渲染的每个纹理一对。

进行多重纹理的现代方法是使用着色器(通常在 OpenGL 中使用 GLSL)。将每个纹理加载并绑定到不同的纹理单元,将着色器制服设置为您正在使用的纹理单元的值(0 表示纹理单元 0 等),对每个纹理进行采样,并使用所需的混合函数进行混合以获得输出颜色。

【讨论】:

我怎么知道应该用纹理a渲染哪块tris,用纹理b渲染哪块? 谢谢..我看过它是怎么做的,和你说的完全一样:)

以上是关于如何在 OpenGL 中将多个纹理分配到单个网格中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在OpenGL中将像素作为纹理绘制到多边形?

使用 OpenGL 和纹理在同一窗口中查看 2x2 网格中的多个图像

在OpenGL中将纹理bmp文件作为纹理平铺到矩形上?

OpenGL - 在一个函数中加载多个纹理

使用单个 FBO 将单个场景从多个视点绘制到多个纹理中(每个视点 1 个)仅产生一个有效纹理

如何在 C++ 中将位图绘制为 OpenGL 纹理?