A projection is the transformation of points and lines in one plane onto another plane by connecting corresponding points on the two planes with parallel lines.性能
投影的概念很简单,就是投射的影子。比如黑暗屋子有一处光,投到你伟岸的身躯,墙上必然会有影子,这个影子就是你的身体对应这面墙的投影。 orm
如上图, 求向量y到平面W的最短距离。对于点y,沿着平面W的法线方向(垂直于平面W),和W相交于y’,此时偏差z最小,就是咱们要找的答案。由于该射线是垂直于该平面(perpendicular),所以称为正交(orthogonal)投影。现实生活中,从一大堆统计点中拟合出一条有规律的线,就须要用最小二乘法,其实就是正交投影的思路。对应的数学描述为:当W平面中Ax = y无解时,转换为Px= y的形式,使其有解。 对象
固然,这样作有什么好处?你们对比一下本身的身体和身影的区别,答案就是把三维的问题变成了一个二维的问题,这就是一个降维的思想,也是投影的价值。为了简化问题,限定在某一范围内,就要进行必要的降维(消元),若是所以致使问题无解,经过合适的投影矩阵P找到解。 blog
各类缘由吧,不少时候咱们都须要抽象到二维空间,方便理解,下降成本。好比,显示器明明是平的,如何带给咱们“深度”的错觉;地球明明是圆的,可地图看起来是平的。 图片
二者的区别如上,前者采用了透视投影,眼睛认知世界也是采用该投影方式,所以,咱们能够经过“平”幕感受出深度。然后者采用正交投影,不管远近大小都同样。但二者在数学理论上并没有本质区别,都是矩阵P,只是P中的元素不一样罢了。 资源
这里主要看气质,咱们并不详细给出两个投影矩阵的推导过程, 如上是透视投影的示意图,视锥体的任意一点(),求出在平面(z = -n)对应的点,就是一个类似三角形的过程。透视投影是一个点光源,而正交投影像一束平行光,但推算过程一致。 get
地图投影也没有本质区别,如上,在球心处一盏灯,地球投影到这个圆柱体侧面,而后展开,造成右图的效果。 数学
经过上面的介绍,虽然投影要理解的内容不少,但操做上很是简单,每一个点只须要乘以投影矩阵P,就能够获得投影后的点。 it
在数值计算上,这有三个特色,第一是简单,每一个点的计算过程都是独立的,可封闭的,并不和其余相邻点之间有关联。其次是粗暴,矩阵运算计算量很大,最后基本都是浮点运算。 io
好比动态投影,计算量巨大,特别是B/S应用,受限于客户端的计算能力,每每都是基于服务端作动态投影计算,而后将结果返回给客户端。但即便如此,对于C/S而言,动态投影的性能也是瓶颈。
相比CPU,GPU没有逻辑单元,且浮点运算能力突出,很是适合用并行的方式来解决这类简单粗暴的计算密集型问题。
这是一种很好的解决动态投影的方式,在性能、实时、资源消耗和兼容性上都表现出色。好比墨卡托投影转WGS,能够错误的理解为把图片1高度不变,长度拉伸2倍的过程。咱们彻底把投影转换的计算放到着色器中,经过GPU顶点和片元着色器实现。
从CPU到GPU的转移,看上去很完美的,但动态投影有一个效果上的问题,毕竟是对纹理的操做,不免会有一些位置上偏移缩放等。若是用肉眼仔细看,你仍是会发现不如之前的纹理清晰。
Cesium在这个问题上有一个很精妙的办法,仍是要进行动态投影的,只是转换的对象不是Texture,保证纹理信息不变,而是对Texture Coordinate进行转换。
以下是动态投影的效果对比。固然受限于现实,目前仅支持墨卡托和WGS之间的转换,但在理论上,只要是点对点的动态投影均可以采用这种思路,固然最后还得看效果和数据易用性等问题。