Leap Motion を使用してオブジェクトと対話するための Three.js プロトタイプを作成しています。各フレーム (またはとにかく定期的に) で、ユーザーの指の表現がシーン内のオブジェクトの上または下にあるかどうかを確認したいと思います。
以下のコードでこれを実行しましたが、1 つのオブジェクトをテストしているだけでも、intersectObject の呼び出しに約 200 ミリ秒かかっています。これにより、アニメーションが遅くなり、非常にぎくしゃくします (たとえば、フレームごとではなく 20 フレームごとに 1 回実行しようとしましたが、それでも 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);
}