1

私のプロトタイプシステムには、Colladaファイルをクリックしたときに交差点を検出する関数があります。交差関数は次のとおりです。

  function Intersectfun ( event ) {
   mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
   mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
   var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
   var toIntersect = [];
   THREE.SceneUtils.traverseHierarchy(scene, function (child) {
   if (child instanceof THREE.Mesh) {
    toIntersect.push(child);
   }
  });
  // Unproject the vector
  projector.unprojectVector(vector, camera);
  var ray = new THREE.Ray( camera.position, vector.subSelf(camera.position).normalize());
  var intersects = ray.intersectObjects( toIntersect );
  if(intersects.length){
   target = intersects[0].object;
  }
 }

しかし、私が使用するとき:

controls = new THREE.TrackballControls( camera, renderer.domElement );

交差行列は空であり、交差を検出できません!!!

しかし、私が使用するとき:

 controls = new THREE.TrackballControls( camera );

交差行列を取得でき、それは非常にうまく機能しますが、別の問題が明らかになります(ここを見てください:Three.JS-シーン内のテキストボックスとの競合カメラコントロール

上記の関数にコードはありますか?参考までに、私は簡単なカメラを使用しました:

 camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );

ありがとう。

4

1 に答える 1

1

これはColladaの問題ではありません。

代わりにこれを行ってください:

// container
container = document.createElement('div');
document.body.appendChild(container);

// renderer
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);

//controls
controls = new THREE.TrackballControls(camera, container);

言い換えれば、トラックボールコントロールの2番目の引数としてcontainerではなくを使用します。renderer.domElement

http://jsfiddle.net/QXUwa/

于 2012-09-19T15:53:22.090 に答える