注:对《添加模型》一文的一点补充,参考
http://blog.youkuaiyun.com/jk276993857/archive/2010/10/19/5951738.aspx
由于浮点数精度方面的问题,创建超大连续游戏世界或地理信息系统数字地球的开发者总是不可避免地陷入到麻烦中。几乎每个三维平台渲染矩阵都使用32位浮点数来表示坐标,然而当坐标值较大而同时要求不能有明显的精度错误时,浮点数就无法表示比第一人称视角射击游戏的场景更大的区域,也无法表达在全球范围下的城市级别地物。此前有《解决大型游戏世界坐标中的精度问题》和《虚拟城市中世界坐标的精度问题及解决方法》采用了基于基片(Segment)和偏移(Offset)的方法来解决此类问题。本文介绍了World Wind 1.4版本中解决世界精度问题的技术。
一、问题描述
在单精度32位IEEE浮点数格式中,1位是符号位,接下来8位是指数部分(E),剩下23位是规一化数(或数的科学表示法形式)的小数部分(F)。对于32位浮点数来说,精度等于其尾数最低位的位值或粒度。由于 第一位的位值是2^E(表示2的E次方)并有23位的小数,LBS的位值就是2^(E-23)。例如,非常接近于1的数(E=0,2^0=1),粒度就是2^(-23),约为0.0000001192。接近1000的数(E=8,2^8=1024),精度增加到0.000061(2^(-13)),接近100000(E=17,2^17=131072)的值,精度就是0.0078125(2^(-7))。用实际的术语来讲:以米为单位,我们的世界是边长为100公里的正方形,在我们世界的最远角落,32位浮点数仅能让我们来表示粒度为7.8毫米的空间。我们要表示的坐标系越大,在最远的范围内精度就越低。要表示全球的区域,地球半径为6370多公里,那将限于半米级别的精度。
精度误差的征兆:
1、 无法将相邻对象对齐
2、 网格中的裂缝
3、 动画抖动