0
我有一個定義在原點的網格。三個js - raycaster失敗
var textureCanvas = new THREE.CanvasTexture(imageCanvas);
textureCanvas.repeat.set(4, 4);
textureCanvas.wrapS = THREE.RepeatWrapping;
textureCanvas.wrapT = THREE.RepeatWrapping;
var materialCanvas = new THREE.MeshBasicMaterial({ map: textureCanvas }
);
var geometry = new THREE.Geometry();
geometry.vertices.push(
new THREE.Vector3(-4,-4,0),
new THREE.Vector3(-4,4,0),
new THREE.Vector3(4,4,0),
new THREE.Vector3(4,-4,0),
);
geometry.faces.push(
new THREE.Face3(3, 1, 0),
new THREE.Face3(3, 2, 1)
);
var vertexMappings = [];
vertexMappings[0] = new THREE.Vector2(0,1);
vertexMappings[1] = new THREE.Vector2(0,0);
vertexMappings[2] = new THREE.Vector2(1,0);
vertexMappings[3] = new THREE.Vector2(1,1);
var vm = vertexMappings;
geometry.faceVertexUvs[ 0 ] = [];
geometry.faceVertexUvs[0][0] = [ vm[3], vm[1], vm[0] ];
geometry.faceVertexUvs[0][1] = [ vm[3], vm[2], vm[1] ];
meshCanvas = new THREE.Mesh(geometry, materialCanvas);
meshCanvas.rotation.x = - Math.PI/3;
meshCanvas.rotation.z = - Math.PI/2.5;
meshCanvas.scale.set(80, 80, 80);
scene.add(meshCanvas);
我也有一條線穿過網格。它最初是通過原點,但我移動了一下(參見下面的github問題)。
var linegeo = new THREE.Geometry();
linegeo.vertices.push(
new THREE.Vector3(55, 300, 0),
new THREE.Vector3(-10, -300, 32)
);
scene.add(linemesh);
我想其中線與網格的位置,但交叉結果總是空:
getInersectionPosition(linemesh, meshCanvas);
function getInersectionPosition(linemesh, meshCanvas) {
linemesh.updateMatrixWorld();
meshCanvas.updateMatrixWorld();
var p1 = linemesh.geometry.vertices[0].clone(),
p2 = linemesh.geometry.vertices[1].clone();
p1.applyMatrix4(linemesh.matrixWorld);
p2.applyMatrix4(linemesh.matrixWorld);
//console.log(`p1: ${JSON.stringify(p1)}, p2: ${JSON.stringify(p2)}`);
//console.log(`canvas position: ${JSON.stringify(meshCanvas.position)}`);
var raycaster = new THREE.Raycaster(p1, p2);
raycaster.linePrecision = 10;
//var intersections = raycaster.intersectObjects([meshCanvas]);
var intersections = raycaster.intersectObjects(scene.children, true);
if (intersections.length > 0)
console.log(`intersections: ${ intersections.length}`);
}
全樣本:https://jsfiddle.net/mribbons/103wwsda/
是否有可能,我有這個問題? https://github.com/mrdoob/three.js/issues/11449
raycaster.intersectObjects()調用似乎在這裏失敗,距離(270萬左右,而sphere.radius約450)非常大的值。
https://github.com/mrdoob/three.js/blob/dev/build/three.js#L9761
intersectsSphere: function (sphere) {
var distance = this.distanceToPoint(sphere.center)
return distance <= sphere.radius;
},