作家
登录

Threejs开发3D地图实践总结

作者: 来源: 2017-07-21 14:01:33 阅读 我要评论

【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!


前段时光持续上了一个月班,加班加点完成了一个3D攻坚项目。也算是由传统web转型到webgl图形学开辟中,坑不少,做了一下总结分享。

1、法向量问题

法线是垂直于我们想要照亮的物体外面的向量。法线代表外面的偏向是以他们为光源和物体的交互建模中具有决定性感化。每一个顶点都有一个接洽关系的法向量。

如不雅一个顶点被多个三角形共享,共享顶点的法向量等于共享顶点在不合的三角形中的法向量的和。N=N1+N2;

 

3D中的计算策略是,起首须要将3D世比赛的坐标与墨卡托单位的对应关系搞清跋扈,如不雅已经是以mi来做单位,那么就可以直接将相机的投影屏幕的高度与屏幕的像素数量做比值,得出的结不雅跟膳绫擎的ranking做比较,选择不消的级别数据以及比例尺。留意3D地图中的比例尺并不是在所有屏幕上的所有地位与实际世界都知足这个比例尺,只能说是相机中间点在屏幕地位处的像素是知足这个关系的,因为平行投影有近大年夜远小的效不雅。

所以如不雅不做任何处理,直接将3维物体的点传递给BufferGeometry,那么竽暌股于法向量被合成,经由片元着色器插值后,就会获得这个黑不虞秋的效不雅 

我的处理方法使顶点的法向量保持独一,那么就须要在共享顶点处,拷贝一份顶点,并从新计算索引,是的每个被多个面共享的顶点都有多份,每一份有一个零丁的法向量,如许就可以使得每个面都有一个雷同的色彩

2、光源竽暌闺面块色彩

开辟过程中设计给了一套配色,然而一旦有光源,面块的最终色彩就会与光源混淆,色彩天然与最终设计的色彩大年夜相径庭。下面是Lambert光照模型的混淆算法。

并且产品的请求是顶面保持设计的色彩,侧面须要参加光源变更效不雅,当对地图做操作时,侧面色彩须要根据视角产生变更。那么我的处理方法是将顶面与侧面分别绘制(创建两个Mesh),顶面应用MeshLambertMaterial的emssive属性设置自发光色彩与设计色彩保持一致,也就不会有光照效不雅,侧面综合应用Emssive与color来竽暌功用光源效不雅。

3、POI标注


Three中创建始终朝向相机的POI可以应用Sprite类,同时可以将文字和图片绘制在canvas上,将canvas作为纹理贴图放到Sprite上。但这里的一个问题是canvas图像将会掉真,原因是没有合理的设置sprite的scale,导致图片被拉伸或缩放掉真。

问题的解决思路是要包管在3d世比赛的缩放尺寸,经由一系列变换投影到相机屏幕后仍然与canvas在屏幕上的大年夜小保持一致。这须要我们计算出屏幕像素与3d世比赛的长度单位的比值,然后将sprite缩放到合适的3d长度。

 

4、点击拾取问题

webgl中3D物体绘制到屏幕将经由以下几个阶段

  1. function fromSreenToNdc(x, y, container) { 
  2.  
  3.   return { 
  4.  
  5.     x: x / container.offsetWidth * 2 - 1, 
  6.  
  7.     y: -y / container.offsetHeight * 2 + 1, 
  8.  
  9.     z: 1 
  10.  
  11.   }; 
  12.  
  13.  
  14.  1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      出了Linux故障找不到方法?看大牛简单、朴实的解决思路

    【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!与windows系同一样,linux操作体系也会存在很多问题和故障,很多linux新手都害怕故障,面对出现的问题显得无可奈何,更有>>>详细阅读


    本文标题:Threejs开发3D地图实践总结

    地址:http://www.17bianji.com/lsqh/36340.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)