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

时间:2010-11-16 16:50:05

标签: opengl textures graphics

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

另一个例子: 通常,地形是由平铺纹理构建的。为了实现更少的“tilly”外观,你可以在它上面应用4倍大(或16等等)平铺纹理,然后你将获得一个漂亮的“随机”平铺纹理(见于UDK的文档)。

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

我如何在自己的OpenGL应用程序中执行此操作? 谢谢,  阿米尔

P.S: 我正在寻找一个更好的解决方案,而不是用tex a渲染50个tris,再用tex b渲染3个tris。

1 个答案:

答案 0 :(得分:1)

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

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

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