Three.js での非投影に関する優れたスタックの質問 ( 1、2 )がいくつかあります。つまり、ブラウザーの (x,y) マウス座標を Three.js キャンバス空間の (x,y,z) 座標に変換する方法です。ほとんどの場合、次のパターンに従います。
var elem = renderer.domElement,
boundingRect = elem.getBoundingClientRect(),
x = (event.clientX - boundingRect.left) * (elem.width / boundingRect.width),
y = (event.clientY - boundingRect.top) * (elem.height / boundingRect.height);
var vector = new THREE.Vector3(
( x / WIDTH ) * 2 - 1,
- ( y / HEIGHT ) * 2 + 1,
0.5
);
projector.unprojectVector( vector, camera );
var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = ray.intersectObjects( scene.children );
私は逆のことを試みてきました - 「画面から世界へ」の空間ではなく、「世界から画面へ」の空間へ。Three.js 内のオブジェクトの位置がわかっている場合、画面上での位置を特定するにはどうすればよいですか?
この問題に対する公開された解決策はないようです。これに関する別の質問が Stackに表示されましたが、著者は、機能しない機能で問題を解決したと主張しています。彼らのソリューションは投影されたレイを使用しません。2D から 3D への変換は unprojectVector() を使用するため、3D から 2D へのソリューションには projectVector() が必要になると確信しています。
Github で公開されているこの問題もあります。
どんな助けでも大歓迎です。