2016-07-21 6 views
2

Float32Array를 사용하여 위치를 지정하므로 BufferGeometry에 문제가 있습니다. (THREE.Points를 사용하여) 플롯해야하는 값은 "2732124.760877"과 같이 큰 수로, Float32Array를 사용할 때 대부분의 정밀도가 느슨해지며 대신 Float64Array를 사용하려 할 때 플롯이 모두 뒤죽박죽이됩니다. Float32Array 대신 Float64Array를 사용할 수있는 방법이 있나요? THREE.BufferGeometry에서 Float32Array 대신 Float64Array를 사용할 수 있습니까?

당신이 다음 jsfiddle에 Float64Array에 Float32Array을 변경하려고 Float64Array에 Float32Array에서 변경하면 어떻게되는지보고 싶다면

(라인 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/

답변

2

아니, WebGLRenderer implementation 보고 형상 특성이이 조건

else if (array instanceof Float64Array) { 
     console.warn("Unsupported data buffer format: Float64Array"); 
} 
012에 확인 파싱

WebGL은 배정도 64 비트 숫자 배열을 전달하는 방법을 제공하지 않습니다. 당신이 정말로 그 정밀도를 필요로하고 GPU가 지원하는 경우 이중 정밀도 숫자

어떻게 든 당신이 비트에 의해 더블로 변환 쉐이더에서 비트를 만들어 2 개 32 비트 번호를 통과 할 수 있지만, 내가 이런 일을 해본 적이 ..

+0

감사합니다. 각 데이터 포인트에서 계산 된 평균을 줄임으로써 문제에 대한 해결책을 찾았습니다. – pulasthi

+0

감사합니다 @ pulasthi, 3D starfield를 렌더링하는 비슷한 문제를 해결하기 위해 노력하고 있습니다. 어떤 링크/리소스 또는 구현 된 기능에 대한 추가 정보가 있습니까? 정말 고마워. – user768680

+0

내 경우에는 위치와 i가 각 점에서 모든 점의 평균을 뺀 점. 이것은 나를 사용할 수있는 작은 숫자를 주었다. 그게 너에게 도움이 될지 모르겠다. 내가 한 일에 관해서 당신이 아직 명확하지 않다면 알려주세요. – pulasthi