vb.net - 在等轴测引擎中剔除屏幕外图 block

标签 vb.net tile isometric culling

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

我没有为此进行平滑滚动,所以这不是问题。我也不担心是否完美 - 一点不必要的绘制就可以了,我只是不想绘制大量不会在游戏中显示的不必要的图 block 。

最佳答案

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

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

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

其他提示:-

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

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

关于vb.net - 在等轴测引擎中剔除屏幕外图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060690/

相关文章:

javascript - 移相器 : How to rotate an isometric body?

algorithm - 如何根据坐标和大小在等距投影上排序对象?

sql - 从 VB.NET 调用存储过程的问题

mysql - 查询适用于 Windows 上的 MySQL,但不适用于 Ubuntu 上的 Mysql

javascript - 实现流畅的 JS tile 界面

c# - Windows 10 桌面应用程序中的彩色磁贴

c++ - 等距坐标、菱形、瓷砖之间不需要的空间

vb.net - 对象的类型初始值设定项引发异常

c# - 如何使用单行代码将多个项目添加到组合框?

c++ - 访问二维数组中的元素