2012-05-11 18 views
2

私はこの質問にanwserを見つけていないので、私はここでそれを試してみるつもりです。JavaScriptのオブジェクトの周りに3Dカメラを周回

(2d)キャンバスを使用する私はJavaScriptの世界で3次元の世界を作りました.3次元カメラでもうまく動作します。しかし、カメラは「フリーカメラ」なので、回転するとカメラは自転します。

ここでは、カメラを世界内のオブジェクトの周りを回転させたいと思いますが、その方法を理解することには多くの問題があります。

私は、次の式を試してみましたが、それは私が得た以下WojtekTによって提供さanwser、と私も回転しようとする前に...

this.x += (Math.sin(this.yd * (Math.PI/180)) * distance); 
this.z -= (Math.cos(this.yd * (Math.PI/180)) * distance); 

SO FAR UPDATED 感謝をフリークアウト次のコードでは、カメラをオブジェクトの周りに回しているだけでなく、ズームインしているように見えます...これは距離変数がほとんど変化しないので私を騙しているかもしれません(私は小さな丸め問題があると思います。期待される結果を与える)

this.y = (Math.sin(this.yd * (Math.PI/180)) * distance + this.targetY); 
this.z = (Math.cos(this.yd * (Math.PI/180)) * distance + this.targetZ); 

ここで、this.ydは、度で実行する速度です。

どのような式が必要ですか?

EDIT:http://clanpvp.com/js/sol/camera.js

http://clanpvp.com/sol : 私はこの問題を解決することができ、コードのどの部分か不明だが、ので、ここで完全なソースです<カメラオブジェクト、これはおそらく。

デバッグの理由から、keyupイベントがトリガーされると、新しいフレームが読み込まれます。 また、デバッグの場合、ターゲットオブジェクトは固定小数点です。画面の中央に表示されます。

矢印キーはカメラを移動、WASDキーは、これまでのWとSだけが何かをすると、彼らはそれを上記のコードに間違ったおかげで行う、カメラの電源を入れ...

あなたが持っている必要があります。この式は機能するために
+0

「それが狂っている」とはどういう意味ですか? – WojtekT

+0

何が起こっているのかよく分かりませんが、カメラは各フレームの後方に移動しているようです。私の推測は、私が使用している式は単なる間違っているので、カメラは私が望むものと全く異なる何かをします。 – Johan

+0

もう少しコードを表示できますか? –

答えて

2

各フレームを変更する変数。例えば可変time

time += this.yd; 
this.x = (Math.sin(time * (Math.PI/180)) * distance); 
this.z = (Math.cos(time * (Math.PI/180)) * distance); 

そうでないMath.sinMath.cos同じ値を各フレームを返します。 基本的に何かを回転させるには、時間とともに変化する角度を提供する必要があります。この例では、角度は変数timeです。

編集: 私は+==に置き換えました。この計算により正確な正確な値はxzとなり、増分を行う必要はありません。

編集2:

この公式には回転中心もありません。適切な計算方法は次のようになります。

this.x = (Math.sin(this.yd * (Math.PI/180)) * distance + object_looked_at.x); 
this.z = (Math.cos(this.yd * (Math.PI/180)) * distance + object_looked_at.z); 
+0

this.ydは、ユーザーがキーを押すと変更されます。私は、物事をより明確にするために、その希望のソースをリストアップしました。 – Johan

+0

'this.yd'の回転速度または回転自体は何ですか? – WojtekT

+0

this.ydはローテーションそのものです – Johan

関連する問題