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

Types WebGL中巨大(物理)坐标的问题?,types,floating-point,webgl,coordinates,coordinate-systems,Types,Floating Point,Webgl,Coordinates,Coordinate Systems,借助WebGL,我在浏览器中显示微观3D数据。我显示的元素位置以纳米为单位,相对于一个公共原点。这导致坐标变得相当大:当前数据集周围的边界框范围为0;0; 0至120000、130000、250000。在本卷中使用坐标目前没有问题,我也找不到浮点计算的任何问题 当我想放大坐标并使其增大1000倍时,你看到了任何潜在的问题吗?作为modelview转换的一部分,您是否建议缩小坐标?如果可能的话,我想继续在这个纳米坐标系中工作。在使用10倍、100倍和1000倍更大坐标的测试中,到目前为止我还没有发

借助WebGL,我在浏览器中显示微观3D数据。我显示的元素位置以纳米为单位,相对于一个公共原点。这导致坐标变得相当大:当前数据集周围的边界框范围为
0;0; 0
120000、130000、250000
。在本卷中使用坐标目前没有问题,我也找不到浮点计算的任何问题


当我想放大坐标并使其增大1000倍时,你看到了任何潜在的问题吗?作为modelview转换的一部分,您是否建议缩小坐标?如果可能的话,我想继续在这个纳米坐标系中工作。在使用10倍、100倍和1000倍更大坐标的测试中,到目前为止我还没有发现任何问题。

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

非常感谢,我真的没有意识到这样一个事实,即一个失去了精度那么快。除了摄像机的运动,动画对我们来说并不重要。然而,坐标的精度——即使没有小数——当然应该保留。我想我不能让WebGL使用64位浮点或整数?@tomka不。但如果可以的话,JavaScript本身使用64位浮点。