Three.js和碰撞检测

时间:2015-08-31 02:56:00

标签: javascript three.js collision-detection

我是3D和Threejs的新手。

我在地面上设置了一个地面,有很多立方体。

http://jsfiddle.net/whurp02s/1/

我正在尝试选择穿过黄色矩形的立方体。

所以我查看了互联网上的例子,发现了Raycaster对象和它的intersectObject函数

//**************** colision detection
    var caster = new THREE.Raycaster();
    var collisions = [];

    var rays = [
      new THREE.Vector3(0, 0, 1),
      new THREE.Vector3(1, 0, 1),
      new THREE.Vector3(1, 0, 0),
      new THREE.Vector3(1, 0, -1),
      new THREE.Vector3(0, 0, -1),
      new THREE.Vector3(-1, 0, -1),
      new THREE.Vector3(-1, 0, 0),
      new THREE.Vector3(-1, 0, 1)
    ];

    for ( var i = 0; i < rays.length; i += 1 ) {
        caster.set( squareTL.position, rays[i] );

        for( var boxId in boxGroup ) {
            var boxObj = boxGroup[boxId];

            collisions = caster.intersectObject( boxObj );

            if ( collisions.length ) {
                console.log(collisions);
            } else console.log("no colision");
        }

    }

但是发现了0次碰撞。

有一些显而易见的事我错过了......

1 个答案:

答案 0 :(得分:0)

我已经看过你的jsfiddle代码了,我发现了一些应该有用的东西:

-Your&#34; boxGroup&#34;数组需要用另一个包含对象而不是对象本身的数组填充

- 声明:if(collisions.length)应更改为(collisions.length&gt; 0)。在长度> 1的情况下1

- 可选操作:将碰撞逻辑添加到动画/运行循环中

- 我会创建一个新的JSfeedle代码,专门用于与较少的对象进行碰撞。您应该更容易调试和理解。

祝你好运, J3zusla