1

我知道我们可以通过移除任何对象scene.__removeObject() 所以我使用 raycaster 移除屏幕中的任何对象。当我单击一个对象时,它会intersects.length变成 >0scene.__removeObject(SELECTED)并被执行。但是如果点击一个Arrowhelper对象(比如ARROWintersects.length仍然为零。

那么我如何从 GUI 中删除箭头助手。在我知道scene.__removeObject(ARROW)有效的代码中

function onDocumentMouseDown( event ) {

        event.preventDefault();

        var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
        projector.unprojectVector( vector, camera );

        var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );

        var intersects = raycaster.intersectObjects( objects );

        if ( intersects.length > 0 ) {

            controls.enabled = false;

            SELECTED = intersects[ 0 ].object;
           scene.__removeObject(SELECTED)
           // scene.__removeObject(ARROW)


        }

    }
4

1 回答 1

1

您的问题实际上是关于十字路口的,对吗?

ArrowHelper 由两个网格.cone.line组成,因此它应该像其他对象一样可以相交。

请记住,Raycaster 只会与objects变量中的对象相交。

对于您的问题,我看到了两种解决方案:

  • 确保objects变量包含助手的.cone.line两者兼而有之。
  • objects在( )中添加整个助手,objects.push(ARROW)但是您必须intersectObjects 递归调用

    raycaster.intersectObjects(对象,真);

于 2013-10-11T14:27:12.460 回答