我正在关注如何使用raycasting处理可点击对象的mrdoobs示例。我也看过许多类似的问题,并尝试过无数的事情。 光线投射工程...如果我在距离小于1.Threejs raycaster only only close close
尽管(默认值),Raycaster设置为接近0和远无穷大。 我还没有看到任何设置距离的代码示例。
我希望有另一双眼睛。
// snippet
glow.clickables = [];
var cubeGeo = new THREE.CubeGeometry(2, 2, 2);
cubeGeo.computeFaceNormals();
var cube = new THREE.Mesh(cubeGeo, redmat);
cube.position.y = 10;
cube.position.x = 0;
cube.position.z = -12;
cube.overdraw = true;
glow.Vis.scene.add(cube);
glow.clickables.push(cube);
onclick_();
var onclick_ = function() {
$('#world').on('mousedown', function(e){
var mouseX = (event.offsetX/$('#world').width()) * 2 - 1;
var mouseY = - (event.offsetY/$('#world').height()) * 2 + 1;
var vector = new THREE.Vector3(mouseX, mouseY, 0.1); //what should z be set to?
//console.info(vector); // A vector between -1,1 for both x and y. Z is whatever is set on the line above
projector.unprojectVector(vector, glow.Vis.camera);
var conts = glow.Vis.controls.getObject().position; // control 3dObject which the camera is added to.
var clickRay = new THREE.Raycaster(conts, vector.sub(conts).normalize());
var intersects = clickRay.intersectObjects(glow.clickables);
console.info(intersects.length);
if(intersects.length > 0) {
alert("Click detected!");
}
});
}
不太确定,但我认为矢量Z应该设置为1.0,并且感觉相当合理,小于这可能导致远处的交叉点不被检测到。 – yaku
谢谢!设置为1固定我的问题 – user508771