我是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次碰撞。
有一些显而易见的事我错过了......
答案 0 :(得分:0)
我已经看过你的jsfiddle代码了,我发现了一些应该有用的东西:
-Your&#34; boxGroup&#34;数组需要用另一个包含对象而不是对象本身的数组填充
- 声明:if(collisions.length)应更改为(collisions.length&gt; 0)。在长度> 1的情况下1
- 可选操作:将碰撞逻辑添加到动画/运行循环中
- 我会创建一个新的JSfeedle代码,专门用于与较少的对象进行碰撞。您应该更容易调试和理解。
祝你好运, J3zusla