我正在制作一个基于canvas的游戏引擎,想知道如何实现俯视视角。我需要的是传统鸟瞰图和旧版SNES mode7视图之间的中间状态,只需微小的倾斜角度就能营造出3D效果。
我试图弄清楚哪种方法最好来处理透视扭曲。我没有进行旋转操作,因此3D矩阵等内容可能过于复杂,但我需要以一致的角度渲染地图层,并且最好能够调整角度。我还需要处理深度扭曲。基本上,底部像素行应该是1:1的像素宽度和高度,而每一行都会变得比前一行小5%之类的。我希望能够提供一个大型的画布作为纹理,然后提供一个介于0和90之间的摄像机角度,其中0表示完全水平,而90表示鸟瞰图。
有人有相关教程或示例代码吗?我在网上搜索了一下,但找到的所有内容似乎要么不适用于这个特定应用程序,要么过于复杂,涉及各种疯狂的3D扭曲和旋转等复杂操作。我想做的只是把普通的平铺网格向后倾斜一点,没有旋转或复杂的操作。
以下是我想要的示例图; 这是一个示例。http://img801.imageshack.us/img801/2176/perspectivesample.jpg
底部像素行是1:1的像素比例,每一行之上的水平和垂直长度逐渐减小。顶部中心区域的源纹理通常只有底部中心区域的一半高度,但它已经被垂直和水平缩小以适应透视效果。
我认为最好的方法可能是将当前视口状态渲染到另一个平面、鸟瞰视图的画布中,并在顶部和侧面额外增加大约50%的空间,然后从其中切割出一个倒三角形区域,并将其绘制到实际可见的画布中。
唯一的问题是,当涉及到计算角度等数学问题时,我很菜。