在等距引擎中剔除屏幕外的图块

时间:2010-01-13 22:13:59

标签: vb.net tile isometric culling

对于一个大学学期项目,我正在研究一个使用等距显示器的图形roguelike(我知道术语中的矛盾:P)。我想弄清楚的是,因为绘制所有的瓷砖是非常昂贵和不必要的,我想要找出一个相对快速的算法来确定应该绘制哪些瓷砖以适合NxMpx窗口,假设瓷砖图形是XxYpx。

我没有为此顺利滚动,所以这不是问题。我也不担心完美 - 有点不必要的抽奖很好,我只是不想画出大量不必要的牌,这些牌不会出现在游戏中。

1 个答案:

答案 0 :(得分:3)

您需要考虑两个概念:屏幕空间和世界空间。这些在3d引擎中非常重要,但它们适用于除最简单的游戏之外的所有游戏。在等轴测引擎中,你的世界空间是一个二维的瓷砖阵列。

所以你首先想要在这两个坐标空间之间进行转换。一旦你完成了这一点,很明显屏幕空间作为一个转向45度的矩形映射到世界。你可以确定一个公式,但是只有当你试图确定世界空间的哪个部分是可见的时才重要,这样你才能模拟该区域内的怪物(8位控制台上的效率,可能不是现代PC上的!)! )。当涉及到实际渲染时,您并不需要确定世界的这个可见区域,因为它隐含在您将图块渲染到屏幕上的方式: -

  1. 您可以找出屏幕左上方的哪个图块位置,将其称为O(对于原点) - 这将是您想要保留的兴趣点(通常是玩家)的固定偏移量屏幕的中心。
  2. 一旦你有了你在瓷砖的顶行绘制瓷砖,在每个瓷砖的世界空间中踩踏+ 1X和-1Y(如果你看东北)。
  3. 然后你画下面的一行。这是偏移减去屏幕空间中瓦片宽度的一半,并从世界空间中的O -1X开始。
  4. 您重复步骤2和3,将您在世界空间中的起始位置修改为X和Y,使用前一阶段2中使用的值,直到您到达屏幕顶部。
  5. 其他提示: -

    • 显然你不会在地图外面绘制任何瓷砖。根据游戏设计,您可能还不会在玩家所在的特定房间外绘制任何图块。
    • 不仅可以绘制地砖,还有玩家,怪物,风景等等。规则是你在同一个通道中的特定世界位置绘制所有东西。那样,最接近“相机”的物体会遮挡它们背后的东西(这就是你开始在屏幕顶部绘画的原因)。
    • 此外,您不仅在大多数iso引擎中都有地砖,还有家具和墙壁部分。您可以将地图区域指定为属于特定房间,当焦点位于该房间时(例如,因为播放器在其中),您不会绘制最靠近相机的房间一侧的墙段

    无论如何,这已经足够了,希望它有用,你的项目也很顺利。