赞
踩
从这开始,我会用两个篇幅来实现一种小地图的功能。制作小地图的方法有很多,这种方法仅仅作为一种思路供大家参考。
首先我们需要一张俯视角的地图来作为小地图,想要实现这种效果,我们可以在角色的头顶绑定一个摄像机来时时捕获垂直向下的画面,也可以等比例的截取一张俯瞰图来作为小地图,这里我们使用第二种方法。
但这种方法有个问题,就是截取的图片中包含的细节较为有限。如果地图尺寸不大,地图上的细节并不会丢失太多。但如果是开放世界地图这种尺寸巨大(201600.0×201600.0)的地图,即使使用编辑器自带的高分辨率截图,在放大之后依然很糊。
原理是利用多张低分辨率的局部地图进行拼凑,最后形成一张超高分辨率的地图。比如将地图均分为1600块,每一块的分辨率为256×256,最后拼凑成的地图分辨率就为10240×10240。这样地图的分辨率越高保留细节也就越多,同理如果地图均分为2500块,最终分辨率就为12800×12800。
缩放后甚至能看到地面上的角色
SceneCapture2D蓝图自带一个CaptureComponent2D,能够将捕获到的画面输出到渲染目标上。
更改摄像机为正交。
创建渲染目标,更改CaptureSource属性,将渲染目标中的分辨率改为256×256(更高或更低也可以),这将作为地图每一个小区块的分辨率。
首先我们要知道地图的原始尺寸和期望的分辨率,为了后续方便这里默认地图是正方形。因为前面我们将每一个小区块的分辨率设置为256×256,所以这里我们将每一行(列)的小区块数量作为输入参数。
计算两个小区块间的距离,作为正交摄像机的正交宽度。
使摄像机从起点开始,每次移动后就将当前捕获到的画面存储到硬盘中,然后移动到下一个点位。当摄像机走到终点,中途的每一个小区块的画面都会被存储至硬盘的指定路径。
只要将地图摄像机生成在(Max X,Min Y,Z)的位置,摄像机就会自动捕获每一个区块。这样当摄像机走到终点后我们就得到了一张地图的全部小区块,只要将它们拼凑起来就能形成一张完整的地图。
这里我采用UniformGridPanel来容纳小区块地图。
在地图拍摄完成后执行开始加载小地图,之后会按照我们前面存储的序号读取图片,按照顺序填充进UniformGridPanel中,在填充完成后就可以组成一张完整的小地图。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。