见编辑:
我将如何绘制一个具有多个贴图纹理的模型?我有一些想法,但都有缺点,这里有一些(顺便说一下,这是一个opengl游戏):
-Use是一个巨大的纹理,但这是以纹理昂贵为代价的。
-Render不同的对象为每个纹理对象(例如:一个模型可以是一个房子的砖,另一个可以在屋顶,每一个有自己的瓷砖纹理),但这将变得非常混乱,非常迅速。
这是一个(惊人的)图像,以帮助演示我正在努力做的事情。
红色区域上重复的"R“可能代表着重复的砖块纹理,而绿色的表示屋顶,也许是屋顶瓦。另外,我还添加了一个窗口纹理。
我的问题是,大多数游戏是如何处理这个问题的?我似乎不能把我的头包围在我如何能把它放在一个纹理,但我看到许多其他游戏做我想做的事情。
编辑:
这应该提供一个更好的视觉演示。我想要一个大的网格(在演示中不是很大)使用一个纹理地图集。(请记住,不是地图集中的所有纹理都是相同大小的!)
让我们说这是我的对象,它使用地图集上的每一个纹理,但不是相同数量的重复(砖块重复3次,当笑脸重复9次左右)
大多数游戏是如何实现这样的目标的?而不用重复纹理的大文件。
例如(从BOTW),我想他们不只是重复这个纹理在地图集上,考虑到这将是多么大(和昂贵)。
发布于 2017-04-18 17:28:02
我似乎找到了最好的答案,它可能是懒惰,但如果你有时间,我会尝试做@DMGregory建议,因为它可能更有效。
因此,我最终做的是使用与OBJ一起导出的材料文件,这让我可以定义什么时候面部应该使用不同的纹理。所以我会渲染一个纹理,然后交换纹理,用这个纹理渲染其余的脸,再这样做,直到整个模型被渲染。当然,这意味着很多额外的平局呼叫,但对我来说,这似乎是最简单的选择。
发布于 2017-04-17 20:17:54
我对OpenGL不太熟悉,所以我将在这里给出一个粗略的草图,并将它作为一个社区wiki,以防更了解该技术的人想要用精确的代码提示来更新它。
首先,如果您的目标是OpenGL 3.0或更高版本,则可以使用阵列纹理。这些允许您将同一分辨率的多个贴图纹理打包到一个采样器中。您的工作流程如下所示:
如果您需要将不支持Array纹理的设备作为目标,那么您可以使用纹理地图集来完成这方面的工作,只需稍微大惊小怪:
https://gamedev.stackexchange.com/questions/140012
复制相似问题