1

我有一个等距关卡,我正在尝试选择关卡内的对象。

我查看了一些 Stackoverflow 答案,包括这台正交相机和使用光线投射选择对象,但目前似乎没有任何效果。有问题,可能与我的相机设置有关,所以这是我正在使用的相关代码。

// set up camera
scope.camera = new THREE.OrthographicCamera( - scope.cameraDistance * aspect, scope.cameraDistance * aspect, scope.cameraDistance, - scope.cameraDistance, - height, 1000 );
scope.camera.position.set(0 , 0 , 0);
scope.camera.rotation.order = scope.rotationOrder; // = "YXZ"
scope.camera.rotation.y = - Math.PI / 4;
scope.camera.rotation.x = Math.atan(- 1 / Math.sqrt(2));

当我遍历我的矩阵并添加图块时,我将它们全部添加到 anew THREE.Object3D()然后将该对象添加到场景中。我的onMouseMove活动看起来像这样

onMouseMove:function(event) {
    event.preventDefault();

    var scope = Game.GSThree,
        $container = $(scope.container.element),
        width = $container.width(),
        height = $container.height(),
        vector,
        ray,
        intersects;

    scope.mouse.x = (event.clientX / width) * 2 - 1;
    scope.mouse.y = - (event.clientY / height) * 2 + 1;

    vector = new THREE.Vector3(scope.mouse.x , scope.mouse.y , 0.5);
    ray = scope.projector.pickingRay(vector , scope.camera);
    intersects = ray.intersectObjects(scope.tiles.children);

    if(intersects.length) {
        console.log(intersects[0]);
    }
}

现在的问题是,有些东西很不对劲。当光线不在物体附近时,光线会与物体相交,并且似乎同时与多个孩子相交tiles。如果我记录intersects.length它有时会返回 3、2 或 1 个对象。以防万一;我对每个对象网格的材质是一个new new THREE.MeshFaceMaterial()包含 6 个new THREE.MeshBasicMaterial()传入的数组。

有任何想法吗?

4

1 回答 1

0

这总是最愚蠢的事情;我的容器元素就padding-left:250px;在上面。删除它,它的工作原理。始终为您的偏移量正确!

于 2014-09-17T07:51:06.163 回答