在WebGL的帮助下,我在浏览器中显示微观3D数据。 I显示的元素的位置相对于公共原点以纳米给出。这会导致坐标变得非常大:我当前数据集周围的边界框范围从0; 0; 0
到120000, 130000, 250000
。使用此卷中的坐标目前没有问题,我无法发现浮点计算的任何问题。
当我想要放大并且坐标可能大1000倍时,您是否看到任何潜在的问题?您是否建议缩小坐标作为模型视图转换的一部分?如果可能的话,我想继续使用这种基于纳米的坐标系统。在我的测试中,坐标大10,100和1000倍,到目前为止我还没有看到问题。
答案 0 :(得分:1)
WebGL为每个坐标使用32位浮点数。如果这足够了,很大程度上取决于你用它做什么,但是例如你不能在(大约)100k之后制作一个平滑的动画,因为你失去了太多的小数精度。
如果你想测试32位浮点数如何处理大数字,这里有一个函数。
function testFloat32(x) {
var arr = new Float32Array(1);
arr[0] = x;
return arr[0];
}
testFloat32(32000.123456798); // ==> 32000.123046875
testFloat32(35000.123456798); // ==> 35000.125
testFloat32(120000.65465684); // ==> 120000.65625
testFloat32(130000.57546565); // ==> 130000.578125
testFloat32(250000.58785446); // ==> 250000.59375
testFloat32(1000000.54541545); // ==> 1000000.5625
testFloat32(10000000.98796541652); // ==> 10000001
testFloat32(100000000.5879654645); // ==> 100000000
testFloat32(1234567890); // ==> 1234567936
testFloat32(100000001); // ==> 100000000
testFloat32(100000002); // ==> 100000000
testFloat32(100000003); // ==> 100000000