Three.js(r74)のオブジェクトをマウスでクリックしたときにオブジェクト上の位置を取得する方法を調べたので、手順をまとめておく。
1.画面上でマウスクリックした位置の取得
javascriptで、typeに「mousedown」を指定してリスナー登録すると、指定した関数内で画面上でマウスクリックしたX、Y座標を取得できる。
2.取得した座標を-1~1の範囲に正規化する
3.Raycasterでオブジェクト取得
4.取得したオブジェクトから位置情報を取得
1.画面上でマウスクリックした位置の取得
javascriptで、typeに「mousedown」を指定してリスナー登録すると、指定した関数内で画面上でマウスクリックしたX、Y座標を取得できる。
document.addEventListener( 'mousedown', clickPosition, false ); function clickPosition( event ) { // X座標 var x = event.clientX; // Y座標 var y = event.clientY; }画面がスクロールする場合は、clickPositionで以下の処理も必要。
var rect = event.target.getBoundingClientRect(); var x = event.clientX - rect.left; var y = event.clientY - rect.top;
2.取得した座標を-1~1の範囲に正規化する
var mouse = new THREE.Vector2(); mouse.x = ( x / window.innerWidth ) * 2 - 1; mouse.y = -( y / window.innerHeight ) * 2 + 1;
3.Raycasterでオブジェクト取得
// Raycasterインスタンス作成 var raycaster = new THREE.Raycaster(); // 取得したX、Y座標でrayの位置を更新 // cameraは作成済みのThree.jsのカメラ raycaster.setFromCamera( mouse, camera ); // オブジェクトの取得 // sceneは作成済みのThree.jsのシーン var intersects = raycaster.intersectObjects( scene.children );intersectObjectsはオブジェクトの配列を返す。
4.取得したオブジェクトから位置情報を取得
// WEBコンソールにオブジェクト上の座標を出力 console.log( 'x座標=%f', intersects[0].point.x ); console.log( 'y座標=%f', intersects[0].point.y ); console.log( 'z座標=%f', intersects[0].point.z ); }
0 件のコメント:
コメントを投稿