3

我在使用 BufferGeometry 时遇到了一些问题,因为它使用 Float32Array 来指定位置。我需要绘制的值(使用 THREE.Points )是大数字,例如“2732124.760877”,并且在使用 Float32Array 时我失去了大部分精度,而当我尝试使用 Float64Array 时,绘图变得混乱起来。有没有办法我可以使用 Float64Array 而不是 Float32Array。

如果您想查看从 Float32Array 更改为 Float64Array 时会发生什么,请尝试在以下 jsfiddle 中将 Float32Array 更改为 Float64Array(第 43 行)

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/

4

1 回答 1

3

不,看WebGLRenderer的实现

解析几何属性时,它会检查此条件

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

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

您可以以某种方式传递您创建的 2 个 32 位数字,然后在着色器中将它们转换为双精度数,但我从未尝试过这样的事情..

于 2016-07-21T06:22:47.083 回答