World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)

ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的。下面来看如何一步步实现假三维模型的加载:

1、Shp文件的制作

首先在arcmap下数字化几个建筑物,并新建height字段存储建筑物的高度。

2、代码实现

	/**
		 *
		 * @方法名称: init3DModel ;
		 * @方法描述: 导入简易三维模型 ;
		 * @参数 :@param filePath :shp文件路径
		 * @返回类型: void ;
		 * @创建人:刘硕;
		 * @创建时间:2015年2月3日 下午6:10:22;
		 * @throws
		 */
		private void init3DModel(String filePath)
		{

			Shapefile shapefile = new Shapefile(filePath);
			RenderableLayer layer = new RenderableLayer();
			layer.setName("简易三维模型");
			layer.setPickEnabled(true);

			try
			{
				while (shapefile.hasNext())
				{
					ShapefileRecord record = shapefile.nextRecord();
					layer.addRenderable(makeShape(record));

				}

				wwPanel.getWorldWindowGLCanvas().getModel().getLayers()
						.add(layer);
			}
			finally
			{
				shapefile.close();
			}
		}

		/**
		 *
		 * @方法名称: makeShape ;
		 * @方法描述:  根据shp文件每条记录创建模型 ;
		 * @参数 :@param record
		 * @参数 :@return
		 * @返回类型: ExtrudedPolygon ;
		 * @创建人:刘硕;
		 * @创建时间:2015年2月3日 下午6:11:08;
		 * @throws
		 */
		private ExtrudedPolygon makeShape(ShapefileRecord record)
		{

			String IMAGE_PATH = "F:\\data\\wwj\\build123sm.jpg";
			Double height = null;
			String[] heightKeys = new String[]
			{ "height", "Height", "HEIGHT" };

			for (String key : heightKeys)
			{
				Object o = record.getAttributes().getValue(key);
				if (o != null)
				{
					height = Double.parseDouble(o.toString());
				}
			}
			// 顶部属性
			ShapeAttributes capAttrs = new BasicShapeAttributes();
			capAttrs.setOutlineMaterial(Material.GRAY);
			capAttrs.setInteriorMaterial(Material.CYAN);

			// 边属性
			ShapeAttributes sideAttributes = new BasicShapeAttributes();
			sideAttributes.setInteriorMaterial(Material.LIGHT_GRAY);
			sideAttributes.setOutlineMaterial(Material.DARK_GRAY);
			sideAttributes.setImageSource(IMAGE_PATH);

			// 创建拉伸多边形
			VecBuffer vb = record.getPointBuffer(0);
			Polygon pgonAirspace = new Polygon(vb.getLocations()); // 根据点串构建多边形

			//纹理
			ArrayList<String> textures = new ArrayList<String>();
			for (int i = 0; i < pgonAirspace.getLocations().size(); i++)
			{
				textures.add(IMAGE_PATH);
			}

			ExtrudedPolygon polygon = new ExtrudedPolygon(
					pgonAirspace.getLocations(), height, textures);

			polygon.setCapAttributes(capAttrs);
			polygon.setSideAttributes(sideAttributes);
			polygon.setAltitudeMode(WorldWind.CLAMP_TO_GROUND);
			return polygon;
		}

效果如下图所示:

3、问题

发现模型加载不了纹理啊,查了几遍不知道问题出在哪里,希望懂的朋友看到留言给指点下啊,不胜感激。

时间: 2024-11-05 11:49:59

World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)的相关文章

World Wind Java开发之十五——加载三维模型

之前的一篇博客是关于加载粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能加载纹理的问题,一直没呢解决.那么WW如何加载常用的三维模型格式(3ds.obj.skp)呢,通过一番搜索,了解到WW可以加载collada的dae格式的三维模型,并且还可以加载kml\kmz文件,那么WW加载三维模型的方法就出来了:首先将其他格式三维模型转换为kmz或kml文件,再加载.这里我是从su的三维模型库中下载的sk

World Wind Java开发之十四——添加WMS地图服务资源

数据是GIS的核心,没有数据一切无从谈起,Internet上有很多在线WMS地图服务资源,我们可以好好利用这些数据资源,比如天地图.必应地图.NASA.OGC数据服务等等. 在我们国家常用的还是天地图的地图服务资源,详见:http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981,这篇博客列举了一些常用的在线地图服务资源,读者可以自行试下. 1.添加天地图地图服务 由于上篇转载的平常心的博客对WMSTiledImageLaye

World Wind Java开发之十——AnalyticSurface栅格渲染(转)

http://blog.csdn.net/giser_whu/article/details/43017881 1.AnalyticSurfaceDemo ArcGIS下对栅格的各种分级渲染效果是非常好的,可以做出很漂亮的图,现在在WW下也可以做出同样的效果了,看到这里是不是有点小兴奋呢.先看下WW自带的AnalyticSurfaceDemo的运行效果图: 通过看源代码可以知道给出了三种渲染示例,其中两种是动态的,这里我需要的是对dem数据或者是单波段影像的渲染,也就是左上方的渲染效果. 2.A

World Wind Java开发之十——AnalyticSurface栅格渲染

1.AnalyticSurfaceDemo ArcGIS下对栅格的各种分级渲染效果是非常好的,可以做出很漂亮的图,现在在WW下也可以做出同样的效果了,看到这里是不是有点小兴奋呢.先看下WW自带的AnalyticSurfaceDemo的运行效果图: 通过看源代码可以知道给出了三种渲染示例,其中两种是动态的,这里我需要的是对dem数据或者是单波段影像的渲染,也就是左上方的渲染效果. 2.AnalyticSurface类 下面来看下主要用到的类: 主要用到的方法: // 创建AnalyticSurfa

Java进阶(三十二) HttpClient使用详解

Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性.因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入. 一.简介 HttpClient是A

从零开始学ios开发(十二):Table Views(中)UITableViewCell定制

我们继续学习Table View的内容,这次主要是针对UITableViewCell,在前一篇的例子中我们已经使用过UITableViewCell,一个默认的UITableViewCell包含imageView.textLabel.detailTextLabel等属性,但是很多时候这些默认的属性并不能满足需要,其实更多的时候我们想自己制定UITableViewCell的内容,这篇学习的就是制定自己的UITableViewCell. UITableViewCell继承自UIView,因此它可以加载

World Wind Java开发之六——解析shape文件(上)

最近一直忙于导师项目的事情了,几天没更新了,昨天和今天研究了下WWJ解析shp文件的源代码,现在记录下,希望可以帮到更多的人! 上一篇博客:World Wind Java开发之五--读取本地shp文件只讲了如何加载shp文件,没有涉及到shp文件的解析,我们这篇博客紧接上一篇博客,利用WWJ来解析shp文件.首先来看用到的源码包和相关类,如下图所示.解析shp文件主要用到Shapefile(shapefile文件类).ShapefileRecord(shape文件记录类).DBaseRecord

【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)

转载自:http://www.himigame.com/iphone-cocos2dx/1354.html 首先说明一个问题: 为什么要在线更新资源和脚本文件!? 对于此问题,那要说的太多了,简单概括,如果你的项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台,这时候你的上架时候是个不确定的时候,具体什么时候能上架,主要跟平台有关,你再着急,也没有用的. 那么如果你的项目是使用脚本语言进行

微信公众平台开发(十二) 发送客服消息

原文:微信公众平台开发(十二) 发送客服消息 一.简介 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数.此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务. 二.思路分析 官方文档中只提供了一个发送客服消息的接口,开发者只要POS