交叉路口和科拉达三.JS



我使用以下代码来实现交集。它适用于代码中定义的几何图形。但它不会检测与 Collada 对象的交集。

        document.addEventListener( 'mousedown', Identify, false );
        function Identify( event ) {
                event.preventDefault();
                mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
                mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
                raycaster.setFromCamera( mouse, camera );
                var intersects = raycaster.intersectObjects( scene.children );
                if ( intersects.length > 0 ) {
                    if ( INTERSECTED != intersects[ 0 ].object ) {
                        if ( INTERSECTED ) INTERSECTED.material.color.setHex( INTERSECTED.currentHex );
                        INTERSECTED = intersects[ 0 ].object;
                        INTERSECTED.currentHex = INTERSECTED.material.color.getHex();
                        INTERSECTED.material.color.setHex( 0xff0000 );
                    }
                } else {
                    if ( INTERSECTED ) INTERSECTED.material.color.setHex( INTERSECTED.currentHex );
                    INTERSECTED = null;
                }
        }

如何将 Collada 几何图形包含在相交矩阵中?

我遇到了同样的问题(在我的情况下,我正在导入一个 6 轴机器人,然后每个链接都是前一个链接的子对象),因此必须在场景中通过将第二个参数设置为 true 来递归执行 intersectObjects,如文档中所述:http://threejs.org/docs/#Reference/Core/Raycaster

您可以尝试将代码更改为:

var intersects = raycaster.intersectObjects( scene.children, true);

通过在 Colladaloader 之后添加以下代码来推送所有对象,可以解决此问题。

var ToIntersect = [];   
dae.traverse(function(child) {
    if (child instanceof THREE.Mesh) {
        ToIntersect.push(child);
    }
});

...
var intersects = raycaster.intersectObjects( ToIntersect );

最新更新