8

THREE.JS と Web Audio API を使用して 3D ゲームを作成しています。私が抱えている問題の 1 つは、Web オーディオ リスナーの向きを使用し、リスナーをカメラとして定義し、その位置と方向が常に更新されるようにすることです。

私の質問ですが、3 台のカメラのベクトル方向を簡単に取得する方法はありますか?

古いカメラの位置を使用して計算しようとしましたが、速度ベクトルを使用してどちらを向いているかを計算しましたが、カメラが静止している場合は機能しません...

camera.rotation.x、camera.rotation.y、camera.rotation.z を使用して単位ベクトルを作成することは可能でしょうか?

またはさらに簡単な方法はありますか?

お時間をありがとうございました!

4

3 に答える 3

16

カメラが見ているワールド空間の方向を知りたいとします。

カメラ空間では、カメラは原点にあり、負の z 軸を見下ろしています。

カメラ空間でカメラの前のポイントをピック:

var pLocal = new THREE.Vector3( 0, 0, -1 );

そのポイントをワールド空間に変換します。

var pWorld = pLocal.applyMatrix4( camera.matrixWorld );

目的の方向ベクトルを構築できるようになりました。

var dir = pWorld.sub( camera.position ).normalize();

編集: three.js r.57 用に更新

編集: また参照してください: three.js カメラの視線ベクトルを設定して読み取る

于 2012-12-24T18:50:16.723 に答える
2

リビジョン 69 (導入されたリビジョンがわからない) では、次のように呼び出すことができます。

camera.getWorldDirection()

カメラの向きベクトルを取得します。

于 2014-12-04T04:16:15.303 に答える
2

カメラがプレイヤー オブジェクトの子である場合 (FPS ゲームなど)。プレイヤー (カメラの親) で同じ計算を行い、これを使用します (この場合、obj から Bullit は正しい方向を取得します)。

Bullit.prototype.getDirection=function(obj){
this.position.add(obj.position);
var pLocal = new THREE.Vector3( 0, 0, -1 );
var pWorld = pLocal.applyMatrix4( obj.matrixWorld );
var dir = pWorld.sub( obj.position ).normalize();
this.direction=dir;

}

于 2015-02-10T10:28:39.950 に答える