2013-02-13 6 views
1

Я пишу прототип Three.js для взаимодействия с объектами с помощью Leap Motion. Каждый кадр (или регулярно в любом случае), я хочу проверить, находится ли представление пальца пользователя выше или ниже объекта в сцене.Three.js Raycaster intersectObjects слишком медленно?

Я сделал это с помощью кода ниже, но вызов intersectObject занимает около 200 миллисекунд, хотя он просто тестирует один объект. Это приводит к тому, что анимация замедляется и становится очень рывкой (я пробовал делать это, например, каждые 20 кадров вместо каждого кадра, но затем он все еще дергает каждые 20 кадров).

Есть ли способ сделать это быстрее? Я делаю что-то неправильно? Как другие люди справляются с этим?

Спасибо!

Код:

... 

var filepath = '../models/Scissors.js'; 

loader.load(filepath, function(geometry, materials) { 

    scissors = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 
    scene.add(scissors); 

}); 

... 


function update() { 

    ... 

    // NB. Sphere1 has been positioned to represent the user's index finger 
    // in 3D space 

    var vector = sphere1.position.subSelf(camera.position); 

    var ray = new THREE.Raycaster(camera.position, vector.clone().normalize()); 

    var start = new Date().getTime(); 

    var collisions = ray.intersectObjects([scissors]); 

    // Takes about 200ms 
    console.log('Took ' + (new Date().getTime() - start) + ' ms'); 

    if(collisions.length > 0) { 
    console.log('HIT!'); 
    } 

    ... 

    requestAnimFrame(update); 

} 

ответ

2

Глупый меня, конечно, причина, это медленно, потому что объект ножниц является нетривиальной модель. Теперь я содержал его внутри невидимого куба и вместо этого тестировал его. И это супер быстро сейчас (0-1 миллисекунды) :-)

+0

Вы могли бы разместить ссылку на рабочий пример или написать пример кода для использования невидимого куба? Я сталкиваюсь с теми же проблемами, и я пытаюсь найти разные методы, которые дают мне лучший общий результат. – SeeDoubleYou

+0

Прошу прощения, это был внутренний прототип, который мы можем использовать только в нашей компании. (Я могу поделиться видео http://labs.pearson.com/prototypes/virtualassist/, но не с реальным приложением). Дайте мне знать, если я могу помочь вам с любыми конкретными вопросами (peter [dot] oshaughnessy [at] gmail.com, если вы хотите направить меня по электронной почте). – poshaughnessy

Смежные вопросы