Javascript threejs光线投射-摄影机和加载的obj模型之间的交点

Javascript threejs光线投射-摄影机和加载的obj模型之间的交点,javascript,three.js,webgl,collision-detection,raycasting,Javascript,Three.js,Webgl,Collision Detection,Raycasting,我正在通过一个场景移动相机,该场景包含一个作为网格加载的对象,我想检测相机是否与对象的任何一面墙发生碰撞 我的代码基于这个threejs示例:,并尝试在这里应用您的示例:-但我似乎没有遇到冲突 我的例子是 相关的javascript是: 如果有人能为我指出如何检测碰撞的正确方向,我将不胜感激。以下是相关的代码: var objects = []; var oLoader = new THREE.OBJLoader(); //oLoader.load('models/chair.obj',

我正在通过一个场景移动相机,该场景包含一个作为网格加载的对象,我想检测相机是否与对象的任何一面墙发生碰撞

我的代码基于这个threejs示例:,并尝试在这里应用您的示例:-但我似乎没有遇到冲突

我的例子是

相关的javascript是:

如果有人能为我指出如何检测碰撞的正确方向,我将不胜感激。以下是相关的代码:

var objects = [];

var oLoader = new THREE.OBJLoader();
  //oLoader.load('models/chair.obj', function(object, materials) {
    oLoader.load('models/model-for-threejs.obj', function(object, materials) {

    // var material = new THREE.MeshFaceMaterial(materials);
    var material = new THREE.MeshLambertMaterial({ color: 0x000000 });
    //var material = new THREE.MeshBasicMaterial({wireframe: true});


    object.traverse( function(child) {
      if (child instanceof THREE.Mesh) {
        //objects.push(child); //MH - not sure if the object needs to be added here or not, but if I do, this really bogs down things down
      }
    });

    object.position.x = 0;
    object.position.y = 12;
    object.position.z = 0;

    scene.add(object);

    objects.push(object);


  });
}

var curPos = controls.getObject().position; //gives the position of my camera

    raycaster.ray.origin.copy( curPos );
    //raycaster.ray.origin.y -= 10; 
    raycaster.ray.origin.z +=10; //guessing here, but since I'm moving in 2d space (z / x), maybe I should be moving my ray ahead in z space?


    var intersections = raycaster.intersectObjects( objects ); //

    var isOnObject = intersections.length > 0;

    if (isOnObject){ console.log('collide' }; //MH - nothing happening here

Raycaster的intersect对象采用带有子对象的Object3D,并具有递归标志

所以它应该是这样的:

var intersections = raycaster.intersectObjects( yourRootObject3D, true );

谢谢-即使使用递归,它似乎也不起作用(但肯定会减慢速度)-我一定是做错了别的事情。我不清楚objloader是否默认创建Object3D-这可能是问题所在吗?如果场景中有许多对象,递归光线投射可能会很昂贵。您可以通过只给它一个子集进行过滤,或者使用更智能的方式进行过滤,例如空间细分。我将使用一条线来检查您的光线投射光线,并绘制该光线以进行调试