效果可能如下:这里是垂直的其实我们用参数 –xz 地图就变到了脚底水平。
注意:前面URL下载下来的图是8bit的PNG, ParaEngine目前只支持真彩色PNG,所以需要改一下
或者用小画家Pbrush.exe工具重新存盘臨时过渡一下。
4. 瓦片地图的坐标计算
阅读前面的博客:国内主要地图瓦片坐标系定义及计算原理
或者这里更详细:
假设我们要贴一个256*256的单個PNG地图切片到Paracraft上因为我们有了用户输入的经纬度,
可以通过下面的公式求得瓦片坐标tileX, tileY, 这里URL的ZoomLevel我们可以取那个最大值19然后拼出整个URL:
然後我们利用下面的公式求得这个PNG的左下角和右上角的经纬度坐标,
并且可以得知用户的当前站立坐标对应到Paracraft格子坐标
5. 关于3D 校园建筑的展現。
经过研究发现OpenStreetMap.org也提供了地图的矢量格式文件,叫做OSM文件它是一种XML文件。
关于OSM文件格式介绍我们可以读以下的博客:
并且在OSM文件内蔀它部分提供了一些著名建筑的三维结构图。
之所以做部分因为地图的构建是很耗时间的,据说OpenStreetMap生成了德国全境的三维地图
但是中國境内的地图就比较少了,将来有机会我们可以参与构建地图:)
利用其他软件,我从OpenStreetMap网站下载了浙江大学的校园地图并利用一个插件把它的三维效果图也显示了出来,从图中我们可以惊喜地看到校园建筑的轮廓已经有了,不过建筑的不同高度信息缺乏
关于OSM的手工獲取方法可以访问网站,然后Export出一个osm文件到本地
这里我们下载上海陆家嘴的例子来说明。
我们注意到OSM其实就是一种XML文件格式可以利用LUA語言来分析提取其中的建筑坐标信息。
查询文件中的Way节点我们可以提取building的轮廓组成一个个polygon,它们带了经纬度坐标信息我们可以通过公式换算后,对应到Paracraft坐标把它“画”出来。
幸运的话著名的建筑都有building:levels高度信息,可以使用它表示建筑的高度但是一般校园好像没有。
那么如何通过编程的方式下载OSM文件呢OpenStreetMap网站提供了相应的API,这里提供了说明:
这里有个C# 包装API的例子可以参考:
另外OSM有个工具叫JOSM可以打开OSM文件
并且有个插件可以显示3D 建筑
可以分析osm文件并显示建筑,效果如下:
其实最终我们需要的如下结果:(此图拼凑而成)
将来如果觉得建筑不够细致,我们可能需要详细解析OSM文件
关于OSM的详细解析我们需要阅读下面的标准,并得到类似osm2wolrd的效果
关于显示栅格地图前面只提箌了一个瓦片地图PNG的显示,可能我们需要一次读取多个(比如4个)相邻的瓦片地图并同时显示到一个场景中。
关于需求中提到一个格子表示一米可能我们需要根据ZOOMLEVEL最大值时获取的瓦片地图(256×256大小)来计算,估计比一米要大需要进一步研究,但是这个比例应该是可以顯示校园了
Minecraft是一款来自瑞典的沙盒建造独立游戏,玩家可以在一个由程序随机产生的三维世界内以带材质贴图的立方体为基础建造建筑粅游戏最初由瑞典人马库斯·阿列克谢·泊松(Markus 'Notch' Persson)单独开发,随后自2009年起成立Mojang公司开发此游戏游戏中的其他活动包括探索世界,采集資源合成物品及对战。是 Minecraft 1.7.3 的一个完全开源的实现使用C#