【问题标题】:How to implement frustum culling in a 2d tile based game? (in a Orthographic View)如何在基于 2d 瓦片的游戏中实现截锥剔除? (在正交视图中)
【发布时间】:2016-07-03 07:32:52
【问题描述】:

我正在制作一个 2d 平铺基础游戏,当我在其中渲染许多平铺时,fps 会急剧下降。我知道为什么会发生这种情况,这是因为同时渲染了许多对象。我需要在正交视图中实现截锥剔除,但我不知道如何实现。

我浏览了许多网站,搜索了一整天。但是我仍然找不到如何在 2d 游戏中实现截锥体剔除。

注意:我使用的是 VBO。

【问题讨论】:

  • 那么...您在截锥剔除的哪一部分遇到问题?
  • 如何构造一个,我不知道如何实际编写截锥体。

标签: java opengl 2d lwjgl frustum


【解决方案1】:

正交视图和透视视图之间的区别在于它们所代表的裁剪体积;对于透视,它是一个平截头体(或“方锥”),对于正交,它是一个简单的盒子。

你只需要一个简单的 AABB-AABB 测试来剔除你的精灵,它实际上非常简单。

【讨论】:

    【解决方案2】:

    如果它是一个简单的 2D 游戏,我相当肯定你不需要平截头体,你能不能在你的渲染方法中只做一个 if 语句来检查瓷砖是否仍在相机的范围内,如果不是那么根本不渲染它们?

    【讨论】:

    • 这个截锥体剔除,除非你通常不会这样称呼它(见 pleluron 的回答)。
    【解决方案3】:

    派对迟到了,但对于那些需要它的人来说。

    你的瓷砖有多大?在一个简单的 2D 游戏中,确实通常不需要平截头体剔除。

    如果您确定剔除是问题所在,请将您的巨大瓷砖地图分成几个较小的瓷砖地图,然后只绘制视图内的那些。剩下的就是对每个 tilemap 部分进行简单的 AABB 检查。

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多