在等轴引擎中剔除屏幕外的瓦片

3
作为一项大学学期项目,我正在开发一个使用等角显示的图形化地牢游戏(我意识到这个术语有些矛盾:P)。我的问题是,由于绘制所有图块的代价太高且不必要,因此我想找出一种相对快速的算法,以确定应绘制哪些图块以适应NxMpx窗口,假设图块图形为XxYpx。
我不会为此进行平滑滚动,所以这不是问题。我也不担心完美 - 稍微多余的绘制没关系,我只是不想绘制大量不必要的图块,这些图块在游戏中不会出现。

我不知道这是否有帮助,但你可能会觉得它很有趣。 http://simcity.ea.com/about/inside_scoop/3d1.php - Zack Peterson
那确实很有趣,但你说得对,它没有触及到这里的主要问题。无论如何,感谢提供链接! - Sukasa
1个回答

4
您需要考虑两个概念:屏幕空间和世界空间。这些在3D引擎中非常重要,但它们适用于除最简单的游戏之外的所有游戏。在等轴测引擎中,您的世界空间是一个2D图块数组。
因此,您首先要找到一种在这两个坐标空间之间进行转换的方法。一旦完成,显然屏幕空间映射到的世界是一个45度旋转的矩形。您可以确定一个公式,但仅当您试图确定哪些部分的世界空间是可见的,以便只在该区域模拟怪物(这是8位控制台上必需的效率,可能不适用现代PC!)时才重要。在实际渲染方面,您确实不需要确定世界空间的可见区域,因为它隐含在您将图块渲染到屏幕的方式中:
1. 您确定屏幕左上角的图块位置,称其为O(原点)-这将是与您感兴趣的点固定偏移的位置,通常是玩家,您希望将其保持在屏幕中心。 2. 一旦您有了位置,您就会绘制屏幕顶部的图块,在每个图块中,步进+1X和-1Y在世界空间中(如果您向东北方向看)。 3. 然后,您绘制下一行。这是屏幕空间中的偏移减去半个图块宽度,并从O -1X的世界空间开始。 4. 重复步骤2和3,通过在之前的阶段2中使用的位置的X和Y中减去1来修改您在世界空间中的起始位置,直到达到屏幕顶部。
其他提示:
1. 显然,您不会绘制任何超出地图范围的图块。根据游戏设计,您可能还不会绘制玩家所在房间之外的图块。 2. 不仅需要绘制地板瓷砖,还需要绘制玩家,怪物,场景等。规则是您在特定的世界位置中绘制所有内容。这样,最靠近“摄像头”的对象将遮盖其后面的东西(这就是为什么您从屏幕顶部开始绘制)。 3. 此外,在大多数等轴测引擎中,您不仅会有地板瓷砖,还会有家具和墙壁段。您可以指定地图的某些区域属于特定的房间,当焦点集中在该房间(例如,因为玩家在其中)时,您不会为靠近摄像头的房间侧面绘制墙壁段。
总之,这就足够了,希望对您有所帮助,您的项目顺利进行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接