gpt4 book ai didi

shader - 在libgdx中使用ShaderProgram为游戏菜单创建叠加层

转载 作者:行者123 更新时间:2023-12-04 13:51:53 30 4
gpt4 key购买 nike

当前正在制作游戏,并试图在单击“菜单”按钮时获得覆盖屏幕的覆盖层-我想这应该是相当普遍/简单的,但是在实现它时仍然有问题。

我当前的设置是:

  • TiledMapRenderer:渲染TMX切片(背景/ map )
  • SpriteBatch:用于各种 Assets (例如,玩家图像)
  • 阶段:按住菜单按钮
  • ShaderProgram:使用GLSL创建叠加/阴影效果
  • 设置
  • SpriteBatch和map以使用ShaderProgram

  • 正如许多人所建议的那样,为了提高性能,我只使用了一个SpriteBatch-因此,各种 Assets 和菜单Stage都使用相同的Sprite Batch。

    着色器的目的是添加一个黑暗/半透明的覆盖层,以使屏幕变灰,以便在打开菜单时可以更轻松地阅读菜单。

    我遇到的主要问题是,由于 Assets 和菜单共享相同的SpriteBatch,因此它们也共享相同的着色器...因此,当我启用阴影效果 时,所有(背景和菜单按钮)都变灰了。

    如何仅使用一个SpriteBatch,而仅将Shader应用于背景(并使菜单按钮保持正常/无阴影)?

    最佳答案

    可以使用

  • :setShader(ShaderProgram着色器)
  • 您可以向着色器中添加一些逻辑以启用覆盖(统一,读取一些变化的属性等),但是不建议这样做,因为您放置在其中的每一行每秒都会执行数千次。
  • [推荐]您实际上可以绘制一个真实的叠加层。具有透明的小灰色纹理(8x8px),并在背景之后和菜单之前绘制它。就像菜单一样,这将在屏幕坐标上显示,对不对?因此也不会增加任何复杂性(创建足够大的 Sprite )。
  • [高级]如果您在按菜单时游戏暂停,则可以在单击菜单按钮时将屏幕复制到FBO。然后,您可以对图像进行后处理(变暗,模糊),并将其用作菜单的背景。这将带来更好的效果,并且实际上会更有效,因为孔场景图形被“缓存”在fbo内部(绘制单个fbo纹理比重新计算孔场景更快。)
  • 关于shader - 在libgdx中使用ShaderProgram为游戏菜单创建叠加层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025428/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com