【发布时间】:2019-02-15 08:11:01
【问题描述】:
我正在尝试在 Three.js 中绘制这个六边形。如果我使用小数字,它会画得很好。但是如果我使用大数字(似乎适合双精度而不会丢失精度),Three.js 似乎在精确绘制它时存在问题。我已经在code pen here 中证明了这一点。它的代码如下。请注意,如果您将offsetX 和offsetY 更改为非常大的数字,则绘制结果不会相同。我不太明白为什么,想知道是否有人可以为我阐明这一点。看起来这些数字都适合 double 类型...
var scene = new THREE.Scene();
const offsetX = 0;
const offsetY = 0;
// comment the previous two lines or following two lines to see the difference
// const offsetX = 3031034;
// const offsetY = 4647776;
var camera = new THREE.OrthographicCamera(offsetX-3,offsetX+3,offsetY-3,offsetY+3,1,100);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(400, 400);
document.body.appendChild( renderer.domElement );
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(offsetX + 1.039688, offsetY + 0.850723, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 0.913957, offsetY + 1.068813, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 0.661409, offsetY + 1.069356, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 0.534591, offsetY + 0.851991, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 0.660321, offsetY + 0.633721, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 0.91287, offsetY + 0.633178, 0));
geometry.vertices.push(new THREE.Vector3(offsetX + 1.039688, offsetY + 0.850723, 0));
var material = new THREE.LineBasicMaterial({ linewidth: 1, color: 0x00ff00 });
var line = new THREE.Line( geometry, material );
scene.add( line );
camera.position.z = 5;
renderer.render(scene, camera);
【问题讨论】:
标签: three.js floating-point precision