我在使用BufferGeometry时遇到了一些问题,因为它使用Float32Array来指定位置。我需要绘制的值(使用THREE.Points)是大数字,例如"2732124.760877",当我使用Float32Array时,我失去了大部分精度,而当我尝试使用Float64Array时,绘制会变得一团糟。有没有一种方法可以使用Float64Array而不是Float32Array。
如果您想看看当您从Float32Array更改为Float64Array时会发生什么,请尝试在下面的jsfiddle(第43行)中将Float32Larray更改为Float64Array
buffer_geometry.addAttribute( 'position', new THREE.BufferAttribute( new Float64Array(lines * 3), 3 ));
buffer_geometry.addAttribute( 'color', new THREE.BufferAttribute( new Float32Array(lines * 3), 3 ));
http://jsfiddle.net/pulasthi/sr3r92hy/1/
当几何属性被解析时,它用这个条件进行检查
else if ( array instanceof Float64Array ) {
console.warn("Unsupported data buffer format: Float64Array");
}
WebGL不提供传递双精度64位数字数组的方法。如果你真的需要这样的精度,并且你的GPU支持双精度数字
你可以通过某种方式一点一点地传递你创建的2个32位数字,并在着色器中将它们转换为双精度,但我从未尝试过这样的东西。。