【问题标题】:Using multiple texture atlases in glsl when using gl.DrawElements使用 gl.DrawElements 时在 glsl 中使用多个纹理图集
【发布时间】:2013-10-25 06:37:46
【问题描述】:

所以我正在使用现代 OpenGL 制作一个相当复杂的 2d 游戏。现在,我正在将一个带有模型矩阵、纹理线等的 VBO 传递给着色器,并使用 glDrawElements 绘制它们。一切工作正常,我可以绘制成千上万个变换的精灵,并且我有一个可以使用缩放等功能的相机系统。但是,我使用一个带有纹理图集的 sampler2D 制服。问题是我希望能够使用多个纹理图集。其他游戏/引擎如何处理这个问题?

我唯一能想到的是这样的:

我知道我最多可以绑定GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 纹理,但是为了绘制它们,我需要为每个纹理设置sampler2D 统一并将它们传递给着色器。然后,在着色器中,我需要知道绘制时使用哪个sampler2D。我需要根据我在 VBO 中的数据来解决这个问题(我假设我会为每个顶点传递一个纹理 id 或其他东西)。这种方法甚至可以使用glDrawElements,有没有更好/更理智的方法来做到这一点?我意识到我可以通过纹理图集对精灵进行排序并使用多个glDrawElement 调用,但问题是我需要精灵按照特定的顺序进行分层。

如果这不是很清楚,请告诉我,以便我尝试改写它。我是 OpenGL 新手,所以当我什至不知道自己在做什么时,我很难解释我正在尝试做什么。

【问题讨论】:

标签: opengl textures glsl


【解决方案1】:
  • 绑定图集1
  • 使用图集 1 绘制对象
  • 绑定图集2
  • 使用图集 2 绘制对象
  • ...

将是简单的方法。对于性能不那么重要的 2D 游戏,其他方法往往过于复杂。使用 VBO 时,您只需要为您使用的每个图集提供一个索引缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多