私の情報源については、http://jsfiddle.net/fYtwf/にアクセスしてください。
バックグラウンド
カメラが立方体で3次元で囲まれているthree.jsを使用した簡単な3Dシミュレーションがあります。これらの立方体は、ビュー コントロールがコード化されてテストされるまで、カメラが見ている場所を視覚化するのに役立ちます。カメラがup、down、left、rightキーで制御されるシンプルな 3D アプリケーションを作成したいと考えています。頭を動かすのと同じように
問題
私の現在のアプリケーションでは、前を向いて上を見始めると成功です。しかし、左に 90 度回転し、上矢印を押すと... 間違ったことが起こります。カメラは x 軸をインクリメントしますが、別の方向を向いているため、x 軸だけを変更するのは間違っています...
これは、z 軸の正しい値を計算するために三角法が必要なためだと思います。しかし、私のトリックは素晴らしいものではありません。
現時点の
私の言いたいことをよりよく理解するには、私の jsfiddle にアクセスしてください: http://jsfiddle.net/fYtwf/
UPキーは X だけをインクリメントします
DOWNキーのみ X を減少させます
左キーのみ Y をインクリメント
右キーのみ Y を減少させます
Qキーのみが Z をインクリメントします
Wキーのみが Z を減少させます
( Q と W は、理解を助けるためにコード化されただけです。)
私の現在の理解では、UP キーを押すと、X がインクリメントされ、Z 軸が現在の Y 軸に基づいて変更される必要があります。しかし、私はアルゴリズムを知りません:(
そのため、KEYUP コードで X と Z を変更する必要があります (間違っている場合は修正してください)。
// setRotateX, getRotateX, setRotateY and getRotateY are extended
// camera functions I wrote so I could work with degrees. Solution
// IS NOT required to use them, they just helped me
switch( key )
{
case KEYUP:
if ( camera.getRotateX() < 90 ){ // restrict so they cannot look overhead
camera.setRotateX( camera.getRotateX() + VIEW_INCREMENT );
}
break;
case KEYDOWN:
if ( camera.getRotateX() > -90 ){ // restrict so they cannot look under feet
camera.setRotateX( camera.getRotateX() - VIEW_INCREMENT );
}
break;
case KEYLEFT:
camera.setRotateY( camera.getRotateY() + VIEW_INCREMENT );
break;
case KEYRIGHT:
camera.setRotateY( camera.getRotateY() - VIEW_INCREMENT );
break;
}