当前位置: 首页 > 编程日记 > 正文

arcengine 加载地图不显示_地图建筑建模制作与输出

cf21d2d8b8435f6dfe6d23365cb59656.png

导读

阅读完此文,你会了解:
1、地图建筑模型通常如何制作的
2、地图建筑模型替换策略

地图上往往会有一些定制建筑的需求,例如将下面的水立方做成气泡感的。

c2c7cc651f189df2b98c2d142a5a5a0a.png
加入定制模型之前

fb6c27f51d53f2909aa37598e24ec159.png
加入定制模型之后

这种需求就需要建模师对建筑做定制化建模。

模型制作

首先我们需要制作建筑的3D模型。不同模型精度等级有不同的建模方法。这里介绍中精度模型的制作方法。此精度模型需要的面数较少,对 Web 平台比较友好。

资料收集

通过互联网收集需要制作的建筑物的外观图片和结构样式,利用街景模式采集建筑物的三维图片。尽量选取晴朗环境下的建筑图片。

55664fe8f3271220cf2f73aeb259f250.png
参考图

模型制作

利用收集到的建筑物图片进行结构和体积的分析,在制作模型的时候重点突出建筑物的特色结构特征,通常一米之内的结构忽略不进行建模。

模型面数控制在1000三角面之内,尽量避免出现交叉面。由于在地图场景中,没有仰视建筑的角度,固水平视角之下的模型面可以省略以确保整体的模型的面数质量。

411d5ee63ea3bf01ba447b167c4484bc.png
模型结构图

编辑材质

用PS将收集到的建筑照片进行关键结构材质提取。然后赋予材质。

19373cb7960c7675358bd4e871d6d1a1.png
贴图

注意:

  1. 材质球的命名要与对应建筑模型的命名统一。
  2. 漫反射颜色数值设为rgb(255,255,255) 这样可以避免模型在地图内变暗。

09d553fcc893cbea3f5384465e9a6fb6.png
漫反射材质颜色

材质烘培

在模型软件中对模型进行 默认天光烘培 增强体积感,原始uv保存在通道2中备份。

6518a0927f93364b8504c4d1a524312d.png
烘培环境光设置

把建筑物场景渲染为png,作为建筑物图标使用。

10969504de336f3aff2068752f93af6e.png
图标文件

模型输出

输出 FBX 之前将模型材质烘培成 2048 x 2048 和 512 x 512 的贴图,默认使用 2048。这样做的好处是各平台( Unity 端和 Web 端)可以根据性能选择使用哪个贴图。

命名规则

使用建筑物所在区域的行政区划代码和建筑物名称组合来命名输出文件,例如:110105_htds,方便引擎加载和后期查询。

资源导入

模型制作完毕,下一步该导入地图引擎了。地图引擎是基于矢量瓦片数据的,为了实现快速加载,我们需要知道建筑所在的瓦片ID、建筑的替换ID。另外建筑也需要重新调整大小和朝向来匹配引擎自动生成的建筑。为此,我们使用一个基于地图引擎的导入工具来实现参数调整和导出。

建筑定位

在地图上定位需要替换的建筑。通过拖动地图,找到需要替换的建筑。

38d647cd4e367633af22be2c551c63e5.png
定位建筑位置

前面已经讲过,通过GPU拾取技术(颜色编码作为ID编码做渲染),我们可以快速拾取当前鼠标命中的建筑。定位到建筑之后,鼠标点击要替换的建筑,这些建筑将被隐藏,同时建筑ID会被记录下来,作为配置使用。

abb8961ba2b3eb7a24906136f295a7a2.png
移除原有建筑

调整大小,朝向

将制作好的FBX文件拖入地图引擎,选中之后可以调整位置,缩放,旋转。参考地图引擎自动生成的周围建筑物来调整制作好的模型文件参数。调整完的效果,就是地图引擎最终加载配置显示的效果。

7ef8d941ad3ae338f9bc1fbc7f271c15.png
调整参数

调整完毕,点击导出按钮,配置文件将会自动生成。配置文件包含以下字段。

35d182400f46510b63ebe4844928d443.png
配置文件字段

建筑的位置,缩放,旋转信息会被同步到FBX文件,不用保存在配置文件中。GPS信息会被计算出来写在配置中,提供建筑的精确GPS信息。

最终效果

最后,地图引擎通过加载配置和模型,就可以完成自定义建筑模型的显示了。

91cca8e01d163fed0c6d2d910cbe6ac8.png
加载定制模型的地图

往期回顾

Rainy-Bear:地图建筑渲染​zhuanlan.zhihu.com
5667c43532fe6fd99fd4e2fe15b178dc.png
无牙:地图文字渲染​zhuanlan.zhihu.com
d6417b264fcc42559053291b1e2aeb39.png
windyh:地图交互与姿态控制​zhuanlan.zhihu.com
d098a63fd847730c8cce52b15d48f684.png
无牙:数据源与存储计算​zhuanlan.zhihu.com
7f347f04bf6cdce577fe7761dc220142.png
windyh:打造服务B端客户的酷炫3D地图可视化产品​zhuanlan.zhihu.com
f754ee023b11d95163f972b4695b3c61.png

相关文章:

用easyx画电子钟_Canvas入门-利用Canvas绘制好玩的电子时钟

在这之前你需要了解一下方法的使用:beginPath()closePath()moveTo()lineTo()fill()stroke()fillRect()clearRect()这些我在前面的文章介绍过,可以看:画个圆arc()方法arc(x, y, radius, startAngle, endAngle, anticlockwise) > 画一个以(x…

前端开发工程师面试题之综合篇

温馨提示:以下系列的面试题是通过整合网上各位大牛的文章而成,站在巨人的肩膀上,能够让我们更进一步。 1、页面从输入URL到页面加载显示完成,这个过程中都发生了什么? 输入域名地址发送域名地址至DNS服务器并获得对应W…

C语言基础(12)-输入和输出

1. int scanf(const char *format, ...) 说明:scanf用于通过控制台输入字符串。 注意: (1).通过scanf()函数输入的字符串,系统会自动在其后面补一个0,scanf默认回车和空格都是代表输入完成,这样会导致无法输入一个完整的字符串。 …

java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结

作者:七里香的编程之路出自:OSCHINA原文:my.oschina.net/u/4098550/blog/4548274能保证可见性的措施除了volatile 可以让变量保证可见性外.happens-before九大规则. 都是能够保证可见性的. 其中就包含了锁操作(synchronized 和 lock) 和 vola…

表达式树 java_表达树—构建表达式树、获取表达式(二)

public classExprTree {//最后访问头结点public BinaryTreeNode buildExprTree(char postfixExpr[],intsize){LinkedList stacknewLinkedList();BinaryTreeNode nodenull;for(int i0;inodenewBinaryTreeNode();node.setLeft(null);node.setRight(null);node.setData(postfixExp…

python 客户端 如何获取手机_Python学习---Django的request扩展[获取用户设备信息]

关于Django的request扩展【获取用户设备信息】settings.pyINSTALLED_APPS [...app01, # 注册app]STATICFILES_DIRS (os.path.join(BASE_DIR, "statics"),) # 现添加的配置,这里是元组,注意逗号TEMPLATES [...DIRS: [os.path.join(BASE_DIR, templates)…

: error c2062: 意外的类型“int”_Go 命令行解析 flag 包之扩展新类型

上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int、int64、uint、uint64)、浮点型(float64)、字符串(string)和时长(duration)。flag 内置支持能满足大…

java英文字符串大小写转换 必须使用_【Java基础】之字符串大小写转换不利用API....

public class UpStr{static String str "AbcDeFdDSfgdsadeADFSAFCfdsa";public String transformUpperOrLower(String str, String type){//将字符串转换为char数组char[] ch str.toCharArray();if (type null || type.length() 0 || type.equals(""))…

.net core 17

转载于:https://www.cnblogs.com/qingwengang/p/6297486.html

vue中子组件和子组件之间怎么通信_vue.js组件之间如何通信?

vue.js组件之间如何通信?下面本篇文章就来给大家介绍一下Vue.js组件间通信方式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。平时在使用Vue框架的业务开发中,组件不仅仅要把模板的内容进行复用,更…

以太坊RLP机制分析

目录 1 RLP 定义 2 RLP 编码规则 3 RLP 编码实例 4 RLP 分析 1 RLP 定义 RLP,即 Recursive Length Prefix, 递归长度前缀编码,是以太坊数据序列化的主要方法, 具有较好的数据处理效率,尤其是将长度和类型统一作为前缀,…

Android Studio导入Eclipse项目的两种方法

Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Studio。 1. 直接导入 打开Android Studio,如果里面已经打开了项目,选择…

mediawiki java api_维基百科 MediaWiki API 解析

使用开放的 API 做一个自己的小项目,是一个很好的学习方法。但好像开放的 API 选择并不多。这里给大家多一个选择,简单介绍一下维基百科使用的 MediaWiki API。简介先简单介绍几个容易混淆的概念。WikiWiki 是一种在网络上开放且可供多人协同创作的超文本…

elasticdump安装_elasticsearch导出、导入工具-elasticdump

elasticsearch导出、导入工具-elasticdumpelasticsearch 数据导入到本地,或本地数据导入到elasticsearch中,或集群间的数据迁移,可以用elasticsearch的工具—elasticdumpelasticdump 可以用用npm安装本地运行,也可以用docker容器运…

mysql 无法登陆_MySQL root用户无法登录原因及解决办法

MySQL root密码正确,却怎么也bai无法du从本地登录MySQL登录提示ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)可能原因是mysql库中bai的user表缺少一个root指向host:localhost的数据项,只有一个root指向h…

Spring Boot启动过程(二)

书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractApplicationContext类型并调用它的refresh方法。由于AnnotationConfigEmbeddedWebApplicationContext继承自EmbeddedW…

dom vue 加载完 执行_前端面试题——Vue

前言前几天整理了一些 html css JavaScript 常见的面试题(https://segmentfault.com/u/youdangde_5c8b208a23f95/articles),然后现在也是找了一些在 Vue 方面经常出现的面试题,留给自己查看消化,也分享给有需要的小伙伴。如果文章中有出现纰…

查看某个存储过程

show create procedure 存储过程的名称; ##主从同步是会同步存储过程的 转载于:https://www.cnblogs.com/yangxiaochu/p/9397108.html

java中的分页 效率考虑_面试官:数据量很大,分页查询很慢,有什么优化方案?...

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。准备工作为了…

dede 后台 mysql_织梦dedecms使用Mysql8.0无法登录后台的解决办法

1//只允许用户名和密码用0-9,a-z,A-Z,,_,.,-这些字符2$this->userName preg_replace("/[^0-9a-zA-Z_!\.-]/", , $username);3$this->userPwd preg_replace("/[^0-9a-zA-Z_!\.-]/", , $userpwd);4$pwd substr(md5($this->userPwd), 5, 20);56$d…

怎样对拍、如何对拍、对拍模板

我写了一个对拍模板,套上直接可以用,还有使用说明在里面,这里附上github网站。 对拍全套模板 转载于:https://www.cnblogs.com/yichuan-sun/p/9624162.html

二叉树线索化示意图_103-线索化二叉树思路图解

2.网上数据结构和算法的课程不少,但存在两个问题:1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上…

linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):

Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置过程。关于前面对OpenStreetMap的介绍,参考我的博文…

Java开发买低压本还是标压本_标压和低压,笔记本怎么选才最香?

华为最近发布了新款 MateBook 13/14 2020 锐龙版笔记本电脑,与之前的产品相比,它们都采用了 AMD 锐龙标压处理器。在体验这两款产品的同时,我一直在思考两个问题:它们与低压处理器相比强在哪里,以及是否值得购买。按照…

php mysql 备注_php,mysql备注信息1

/*---------------------------------------------------------------------------------------如何彻底地删除表?如果你不需要一个表了,你可以使用DROP.语法如下:DROP TABLE tablename例如:DROP TABLE employee_dataQuery OK,0 rows affected(0.01 sec);--------------------…

JSP和Servlet学习笔记1 - 访问配置

1. 访问 WebContent 目录下的 JSP 文件 在 WebContent 目录下的文件可以直接在浏览器中访问。新建一个 test.jsp 文件 <% page language"java" contentType"text/html; charsetISO-8859-1"pageEncoding"ISO-8859-1"%> <!DOCTYPE htm…

unity人物旋转移动代码_Unity3D研究院之脚本实现模型的平移与旋转(六)

123 说&#xff1a;雨松大大&#xff0c;有个问题想请教一下&#xff0c;我用UNET构建了个小场景&#xff0c;在电脑上可以客户端可以连接到服务器&#xff0c;Windows和Linux都可以&#xff0c;发布到安卓缺连不了&#xff0c;这是问什么呢说&#xff1a;求教一下&#xff0c;…

博客园的第一篇博文

以后所有技术相关的文章都记录在博客园啦&#xff0c;加油&#xff01;转载于:https://www.cnblogs.com/dabenniu/p/6337549.html

java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)

0 这是一篇我在初学习过程中&#xff0c;遇到的动态数据分页显示的问题&#xff0c;前台采用Ajax传给后台&#xff0c;后台在访问数据库取出分页数据再转换为json格式传递给前台&#xff0c;前台再解析显示到表格中。在此写出我在做的过程中遇到的问题&#xff0c;可以让其他人…

c 应用程序mysql_MySQL C 语言应用程序接口开发教程

从数据库中取回数据在这个实例中我们从表中取回数据。步骤&#xff1a;(1)创建连接(2)执行查询(3)获取结果集(4)提取所有可用的记录(5)释放结果集实例程序打印 writers 表中所有的记录(姓名)。#include #include int main(int argc, char * argv[]){MYSQL * conn;MYSQL_RES * r…