1

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);

}
4

1 に答える 1

2

ばかげた私、もちろん、遅い理由は、はさみオブジェクトが自明ではないモデルだからです。今、私はそれを目に見えない立方体の中に入れて、代わりにそれに対してテストしています。そして、今では超高速です (0-1 ミリ秒) :-)

于 2013-02-13T18:57:47.313 に答える