用射线照相机挑选物体

时间:2015-12-11 10:20:58

标签: javascript three.js raycasting

尝试通过点击选择一些对象,我尝试使用每个示例中使用的标准代码:

function onMouseDown(evt) {

    evt.preventDefault();

    canvasAbsoluteHeight = $('canvas').height();
    canvasAbsoluteWidth = $('canvas').width();

    mouseDown = true;
    mouseX = evt.offsetX == undefined ? evt.layerX : evt.offsetX;
    mouseY = evt.offsetY == undefined ? evt.layerY : evt.offsetY;

    var mouse = new THREE.Vector3();
    mouse.x = ( evt.clientX / canvasAbsoluteWidth ) * 2 - 1;
    mouse.y = 1 - ( evt.clientY / canvasAbsoluteHeight ) * 2;
    mouse.z = 0;

    ray = new THREE.Raycaster( mouse, camera );

    var intersects = ray.intersectObjects( objects);
    console.log('intersects', intersects);
    if ( intersects.length > 0 ) {


        console.log('intersects', intersects);
    }

} 

objects是一个THREE.Object3D的数组,应该可以被选中。

我认为它可能与相机有关。我的cameraTHREE.Object3D的子项,以便于操作,并且父对象未设置为原点。

另外一点是画布不是全屏,可能有鼠标位置的东西? (它位于div内部,与页面边缘有一些偏移)。

1 个答案:

答案 0 :(得分:0)

检查fiddle。您可以使用Picker类。首先,你必须用相机和圆顶元素来启动这个课程

Picker.init(camera,domelement)

然后你必须附加网格

Picker.attach(mesh)

之后你必须在Picker方法中指定你在mosedown / mouseup之后想做什么。