Libgdx 网格/material 问题
Libgdx mesh / material issue
我正在使用 xoppa 的简单纸牌游戏教程的部分内容编写纸牌游戏。但是现在我在翻牌时遇到了一个奇怪的问题。 Instad 显示卡片的另一面,它再次显示背面(但翻转):
我创建卡片的方式与 xoppa 教程中的方式相同,唯一的区别是我没有使用图集,而是独立加载所有纹理。 (这必须保持不变,因为我正在动态加载纹理)。
有什么问题吗?此外,我不明白为什么使用前后两个精灵而不是 material。 (对我来说,似乎显示的是 material 纹理而不是 back/front 精灵)
您不太可能使用相同的代码,因为它专门检查纹理是否相同 (assert(front.getTexture() == back.getTexture());
)。
引自教程:
To solve that, we could use ModelCache which, just like SpriteBatch, combines all cards into one render call. However, it is possible to optimize even more, by not creating a Mesh for each card. This is possible because each card uses the same texture and thus the same material. Just like we can combine the front and back side of each card because of that, we can also combine all cards because of that. That would also solve the dispose issue we had to fix.
如果你想使用两个不同的纹理但不能打包它们,那么你就不能合并那些渲染调用。当然,您可以合并使用相同纹理的渲染调用。我想,在您的情况下,这意味着您需要将卡片分成前后顶点。然后您可以使用两个(或更多)批处理并组合共享相同纹理的渲染调用。
当然,使用纹理图集是有原因的:性能。使用许多单独的纹理将导致许多渲染调用,这需要 GPU 和 CPU 同步,因此不利于性能。如果您真的不想使用纹理图集,那么您最终会注意到这一点。所以,看起来你正在尝试解决错误的问题。
显而易见的解决方案是将纹理打包到图集中,这样您就可以合并渲染调用。动态加载它们并不意味着您不能打包它们。参见:PixmapPacker.
我正在使用 xoppa 的简单纸牌游戏教程的部分内容编写纸牌游戏。但是现在我在翻牌时遇到了一个奇怪的问题。 Instad 显示卡片的另一面,它再次显示背面(但翻转):
我创建卡片的方式与 xoppa 教程中的方式相同,唯一的区别是我没有使用图集,而是独立加载所有纹理。 (这必须保持不变,因为我正在动态加载纹理)。
有什么问题吗?此外,我不明白为什么使用前后两个精灵而不是 material。 (对我来说,似乎显示的是 material 纹理而不是 back/front 精灵)
您不太可能使用相同的代码,因为它专门检查纹理是否相同 (assert(front.getTexture() == back.getTexture());
)。
引自教程:
To solve that, we could use ModelCache which, just like SpriteBatch, combines all cards into one render call. However, it is possible to optimize even more, by not creating a Mesh for each card. This is possible because each card uses the same texture and thus the same material. Just like we can combine the front and back side of each card because of that, we can also combine all cards because of that. That would also solve the dispose issue we had to fix.
如果你想使用两个不同的纹理但不能打包它们,那么你就不能合并那些渲染调用。当然,您可以合并使用相同纹理的渲染调用。我想,在您的情况下,这意味着您需要将卡片分成前后顶点。然后您可以使用两个(或更多)批处理并组合共享相同纹理的渲染调用。
当然,使用纹理图集是有原因的:性能。使用许多单独的纹理将导致许多渲染调用,这需要 GPU 和 CPU 同步,因此不利于性能。如果您真的不想使用纹理图集,那么您最终会注意到这一点。所以,看起来你正在尝试解决错误的问题。
显而易见的解决方案是将纹理打包到图集中,这样您就可以合并渲染调用。动态加载它们并不意味着您不能打包它们。参见:PixmapPacker.