【问题标题】:Libgdx mesh / material issueLibgdx 网格/材质问题
【发布时间】:2016-06-06 12:21:56
【问题描述】:

我正在编写一个纸牌游戏,使用 xoppa 的简单纸牌游戏教程的一部分。但是现在我在翻转卡片时遇到了一个奇怪的问题。除了显示卡片的另一面,它再次显示了背面(但翻转了):

我创建卡片的方式与 xoppa 教程中的方式相同,唯一的区别是我没有使用图集,而是独立加载所有纹理。 (这必须保留,以便我动态加载纹理)。

可能出了什么问题?此外,我不详细了解为什么使用前后两个精灵而不是材料。 (对我来说,似乎显示的是材质纹理而不是后/前精灵)

【问题讨论】:

    标签: android opengl-es libgdx rendering


    【解决方案1】:

    您不太可能使用相同的代码,因为它专门检查纹理是否相同 (assert(front.getTexture() == back.getTexture());)

    引用自教程:

    为了解决这个问题,我们可以使用 ModelCache,它就像 SpriteBatch 一样,将所有卡片组合到一个渲染调用中。但是,可以通过不为每张卡创建网格来进行更多优化。 这是可能的,因为每张卡片使用相同的纹理,因此也使用相同的材​​质。 就像我们可以因此将每张卡片的正面和背面组合在一起一样,我们也可以因此将所有卡片组合在一起。这也将解决我们必须解决的处置问题。

    如果您想使用两种不同的纹理并且无法打包它们,那么您就无法合并这些渲染调用。当然,您可以合并使用相同纹理的渲染调用。我想,在您的情况下,这意味着您需要将卡片分成前后顶点。然后,您可以使用两个(或更多)批次并组合共享相同纹理的渲染调用。

    当然,使用纹理图集是有原因的:性能。使用许多单独的纹理会导致许多渲染调用,这需要 GPU 和 CPU 同步,因此对性能不利。如果您真的不想使用纹理图集,那么您最终会注意到这一点。所以,看起来你正在尝试解决错误的问题。

    显而易见的解决方案是将纹理打包到图集中,这样您确实可以合并渲染调用。动态加载它们并不意味着您不能打包它们。见:PixmapPacker

    【讨论】:

    • 这听起来很合理......现在我选择了这种方法:对于所有显示背面的卡片,我使用你的方法(stepa)。对于显示正面的几张卡片,我使用您的卡片可渲染方法。显示正面的卡片不会超过 20 张。但是,我现在面临的问题是卡片是动态的并且包含书面文本(国际化)。所以我需要即时为它们创建纹理,我需要它们 600x800。我的第一种方法是为此使用 FBO,但随后他们会因上下文丢失而迷失方向。所以使用 Pixmaps 似乎是正确的方法。
    • 哦..如果角度 >90 和
    • 不要试图解决不存在的问题。见:badlogicgames.com/forum/…
    • 好的,谢谢。您的提示指出了一个很好的解决方案。还有其他问题,但要让 FBO 创建纹理并使用单独的 Rendereables 用于“开放”卡,同时使用教程中的网格想法(stepa)。然而,当做 shadowbatch.render(openCard);在 modelBatch.render(openCard) 之前,它不再绘制纹理,而是绘制一些花哨的线条。
    猜你喜欢
    • 2019-09-03
    • 2021-01-18
    • 2019-07-08
    • 1970-01-01
    • 2018-12-16
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多