WebGL中巨大(物理)坐标的问题?

时间:2014-08-26 17:42:56

标签: types floating-point webgl coordinates coordinate-systems

在WebGL的帮助下,我在浏览器中显示微观3D数据。 I显示的元素的位置相对于公共原点以纳米给出。这会导致坐标变得非常大:我当前数据集周围的边界框范围从0; 0; 0120000, 130000, 250000。使用此卷中的坐标目前没有问题,我无法发现浮点计算的任何问题。

当我想要放大并且坐标可能大1000倍时,您是否看到任何潜在的问题?您是否建议缩小坐标作为模型视图转换的一部分?如果可能的话,我想继续使用这种基于纳米的坐标系统。在我的测试中,坐标大10,100和1000倍,到目前为止我还没有看到问题。

1 个答案:

答案 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