3

よし、2 つの角度を取得しました。1 つはジョイスティックの角度で、もう 1 つはカメラからプレイヤーへの角度です。カメラの角度。ジョイスティックを押し上げると、プレーヤーがカメラから遠ざかるようになりました。どうすればいいですか?そして、Java または Ardor3d でそれを行う簡単な方法はありますか?

編集:角度を取得する方法のコードは次のとおりです。

float camDegree = (float) Math.toDegrees(Math.atan2(
                     _canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(),
                     _canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf());

            player.angle = (float) Math.toDegrees(Math.atan2(padX, padY));
            Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y);
4

1 に答える 1

8

私はあなたの質問をよく理解していないと言わざるを得ませんが、ジョイスティックを使用してカメラ相対制御を実装する方法についてのようです。

私ができる最も重要なアドバイスは、角度を計算するのではなく、ベクトルを直接操作する方がよいということです。

カメラがvの方向を向いているとします (ゲームの種類によっては、このベクトルがプレーヤーを直接指している場合もありますが、すべての種類のゲームではなく、常にではありません)。

カメラからプレーヤーへの視線ベクトルは、垂直成分と水平成分に分解できます

通常、このベクトルの垂直成分は気にしないので、これを削除して水平成分を取得します。後で明らかになる理由から、これをyと呼びます。

y = v − ( v ·アップ)アップ

ここで、upは垂直上向きの単位ベクトルです。

外積を使用して (そして右手の法則を思い出して) yに垂直な水平ベクトルを見つけることができます。

x = v ×

ベクトル x と y は水平座標の基準を形成します

ここで、yが前方 (カメラから離れた方向) を指す平面のベクトルであり、xが右 (カメラに対して横方向) を指す平面のベクトルであることがわかります。これらのベクトルを正規化すると、次のようになります。

x^ = x / | × |

ŷ = y / | y |

次に、プレーヤーのカメラ相対モーションの座標基準としてx ^とŷを使用できます。ジョイスティックの読みがJxJyの場合、プレーヤーを

s ( Jx + Jy ŷ )

ここで、sはプレーヤーの速度に比例する適切なスカラー値です。

(この回答のどの時点でも角度が計算されていないことに注意してください!)

于 2010-12-01T13:40:04.017 に答える