【问题标题】:Culling offscreen tiles in an Isometric engine在 Isometric 引擎中剔除屏幕外图块
【发布时间】:2010-01-13 22:13:58
【问题描述】:

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

我没有为此进行平滑滚动,所以这不是问题。我也不担心完美 - 一点不必要的抽奖很好,我只是不想绘制大量不会出现在游戏中的不必要的图块。

【问题讨论】:

  • 我不知道这是否有用,但您可能会觉得它很有趣。 simcity.ea.com/about/inside_scoop/3d1.php
  • 这确实很有趣,但你是对的,它没有触及这里的主要问题。无论如何感谢您的链接!

标签: vb.net tile isometric culling


【解决方案1】:

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

因此,您首先要寻找一种在这两个坐标空间之间进行隐蔽的方法。完成此操作后,很明显屏幕空间会以 45 度角的矩形映射到世界上。您可以为此确定一个公式,但这仅在您尝试确定世界空间的哪个部分可见时才重要,因此您只模拟该区域中的怪物(在 8 位控制台上需要效率,在现代 PC 上可能不需要! )。当涉及到实际渲染时,您实际上并不需要确定世界的这个可见区域,因为它隐含在您将图块渲染到屏幕上的方式中:-

  1. 您计算出屏幕左上角的图块位置,将其称为 O(表示原点) - 这将是您想要保留的兴趣点(通常是玩家)的固定偏移量屏幕的中心。
  2. 完成后,您可以在屏幕顶行绘制图块,然后在每个图块的世界空间中步进 +1X 和 -1Y(如果您向东北方向看)。
  3. 然后绘制下面的行。即偏移量减去屏幕空间中平铺宽度的二分之一,并从世界空间中的 O -1X 开始。
  4. 您重复第 2 步和第 3 步,将您在世界空间中的起始位置从前一阶段 2 中使用的 X 和 Y 中的位置修改为 -1,直到您到达屏幕顶部。

其他提示:-

  • 显然您不会在地图之外绘制任何图块。根据游戏设计,您也可能不会在玩家所在的特定房间之外绘制任何图块。
  • 不仅要绘制地砖,还有玩家、怪物、场景等。规则是您在同一关卡中绘制特定世界位置的所有内容。这样,最靠近“相机”的物体就会遮住它们后面的东西(这就是为什么你开始在屏幕顶部绘图的原因)。
  • 此外,大多数 iso 引擎中不仅有地砖,还有家具和墙段。您可以将地图的区域指定为属于特定房间,当焦点位于该房间时(例如,因为玩家在其中),您不会为房间最靠近相机的一侧绘制墙段.

无论如何,这已经足够了,希望它对您有所帮助,并且您的项目进展顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2022-01-13
    • 2020-03-07
    • 2019-05-03
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多