背景:
我正在创建一个以等距视角呈现世界的游戏,通过绘制等距瓷砖来实现。我目前的实现是幼稚的,使用画家的方法,从后到前,从下到上,使用平铺图像中的表面块。
问题:
我担心透支(可能是过度的,如果是这种情况,请告诉我)。这是单层瓷砖的小快照:
以粉红色高亮显示的区域是从后到前、从下到上的方法不止一次将像素传送到画布上的区域。这是一个小而人为的例子,但在实践中我希望完成更多的事情:
(图片来源 eBoy)
对于如此复杂的图像,以及基于 tile 的实现,在合成最终图像之前,每个屏幕像素都会被绘制多次,感觉效率非常低。由于这些只是 2D 图像,最终带有一位 alpha 蒙版,因此没有 3D 的担忧(例如,没有浪费的照明或变换数学),但似乎仍然应该有一个更优雅根据最终合成中是否会被遮挡来确定是否应绘制像素的方法。
解决方案?
到目前为止,我提出的最佳解决方案是:
- 颠倒绘制顺序,从前到后,从上到下绘制。
- 每个像素保留一位假 z 缓冲区,用于记录像素是否已被绘制。
- 仅在其覆盖的某些像素尚未绘制时才绘制图块。
有一个更好的方法吗?blit 操作是否超级高效,我在这里对风车倾斜?