2015-08-31 4 views
0

Я совершенно новый в 3D и Threejs.Распознавание трехососов и столкновений

Я создал сцену с землей, на вершине земли много кубов.

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

Я пытаюсь выбрать кубы, которые пересекают желтый прямоугольник.

Так что я смотрел на Exemple в интернете и нашел объект 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

Я посмотрел на свой jsfiddle код, и я видел несколько вещей, которые должны помочь:

-Ваш «boxGroup» массив должен быть заполнен другим массивом, содержащим объект, а не сам объект

-Приложение: if (collisions.length) следует изменить на (collisions.length> 0). В случае, если длина> 1

-Дополнительные действия: Добавьте вашу логику столкновения в анимации/запуске цикл

Я бы создать новый JSfeedle код, специфичный для collition работы с меньшим количеством объектов. Вам должно быть проще отлаживать и понимать.

Удачи, J3zusla