试图获得光线投射器的交点

时间:2018-08-09 18:23:07

标签: javascript three.js raycasting

问题:

我将frontObject加载到场景上。我得到了所述物体的中心。

然后我通过设置一个新点来移动到对象之外,该点将重用除Z轴(z坐标变为100)以外的所有对象的中心坐标,以便可以从角色(frontObject)的外部向光线投射器跟踪并在角色的背面获得交点,以便我可以在该点上放置一个盾牌。

可悲的是,我得到以下输出:

enter image description here


代码:

let box = new THREE.Box3().setFromObject(frontObject);
            let sphere = box.getBoundingSphere();
            let centerPoint = sphere.center;

            backObject.position.set(0,132,-15);

            console.log("CENTER POINT X: "+centerPoint.x);
            console.log("CENTER POINT Y: "+centerPoint.y);
            console.log("CENTER POINT Z: "+centerPoint.z);

            centerPoint.z = 100;

            var newCoordinate = shootRay(centerPoint, frontObject);

            console.log("NEW POINT X: "+newCoordinate.x);
            console.log("NEW POINT Y: "+newCoordinate.y);
            console.log("NEW POINT Z: "+newCoordinate.z);

function shootRay(center, frontObject) {

var raycaster = new THREE.Raycaster();
var direction = new THREE.Vector3( 0, 0, 1 );
raycaster.ray.direction.copy( direction );
raycaster.ray.origin.copy( center);

var intersects = raycaster.intersectObject(frontObject);
console.log("GO");
if (intersects) {
    var point  = intersects.point;
    console.log("POINT:"+point);
    return point;

}

}


编辑:

https://jsfiddle.net/Username100/y54kpe1h/66/

1 个答案:

答案 0 :(得分:1)

您的代码有些错误。您将要阅读并解决您发布的警告。

对于var intersects = raycaster.intersectObjects(frontObject); frontObject必须是类似于[frontObject]的数组,或者您需要使用单数的intersectObject。

我还建议使用调试器(例如chrome内置的调试器)来设置断点,而不要使用console.log('POINT,然后查看从raycast返回的内容。

让我知道这是否有帮助...