是否可以在THREE.BufferGeometry中使用Float64Array而不是Float32Array



我在使用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/

不,看看WebGLRenderer的实现

当几何属性被解析时,它用这个条件进行检查

else if ( array instanceof Float64Array ) {
        console.warn("Unsupported data buffer format: Float64Array");
}

WebGL不提供传递双精度64位数字数组的方法。如果你真的需要这样的精度,并且你的GPU支持双精度数字

你可以通过某种方式一点一点地传递你创建的2个32位数字,并在着色器中将它们转换为双精度,但我从未尝试过这样的东西。。

相关内容

  • 没有找到相关文章

最新更新