Vb.net 在等轴测引擎中剔除屏幕外分幅

Vb.net 在等轴测引擎中剔除屏幕外分幅,vb.net,tile,isometric,culling,Vb.net,Tile,Isometric,Culling,对于一个大学学期的项目,我正在制作一个类似roguelike的图形(我知道术语p中存在矛盾),它使用等距显示。我想弄清楚的是,由于绘制所有的瓷砖都非常昂贵而且不必要,我想找出一个相对快速的算法来确定应该绘制哪些瓷砖以适合NxMpx窗口,因为瓷砖图形是XxYpx 我没有做平滑滚动,所以这不是一个问题。我也不担心自己是否完美——一点不必要的画图是可以的,我只是不想画出大量不必要的、不会在游戏中出现的瓷砖。你需要考虑两个概念:屏幕空间和世界空间。这些在3d引擎中非常重要,但它们适用于除最简单的游戏以外

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


我没有做平滑滚动,所以这不是一个问题。我也不担心自己是否完美——一点不必要的画图是可以的,我只是不想画出大量不必要的、不会在游戏中出现的瓷砖。

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

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

  • 你计算出哪个平铺位置在屏幕的左上角,称之为O(原点)——这是一个固定的偏移量,与你想要保持在屏幕中心的兴趣点,通常是玩家
  • 完成后,在屏幕的顶行绘制瓷砖,在世界空间中为每个瓷砖步进+1X和-1Y(如果您朝东北方向看)
  • 然后你画下一行。这是屏幕空间中偏移量减去半个平铺宽度,在世界空间中从O-1X开始
  • 重复第2步和第3步,将您在世界空间中的起始位置从上一阶段2中使用的位置在X和Y方向上修改-1,直到到达屏幕顶部 其他提示:-

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

    不管怎样,这就足够了,希望它对你的项目有帮助,并且你的项目进展顺利。

    我不知道这是否有帮助,但你可能会觉得它很有趣。这确实很有趣,但你是对的,它没有触及这里的主要问题。无论如何,谢谢你的链接!