13/04/23 22:18:20.58 R/AYC3Uw
90度回転の時だけの話でよければ、X軸、Y軸の回転順を変えればOK
まぁ、他の角度でも正しく動かすためには276のいう通りなんだが
278:275
13/04/24 02:22:36.15 Jeg6uYsS
>>276
>>277
返答ありがとうございます。
Matrix.LookAtLH を Matrix の Yaw と Matrix の Pitch に変更しました。( C# Managed DirectX です)
device.Transform.View に Yaw と Pitch の行列を掛け合わせたものを代入したのですが、結果は同じでした。
Matrix stMat = Matrix.Identity;
stMat *= this.mMatPitch;
stMat *= this.mMatYaw;
device.Transform.View = stMat;
「ヨーの行列を逆から掛ければいい」って所が理解できないんですよね。。。すいません。
掛け合わせ方に関してもう少しご教授願えませんでしょうか?
279:275
13/04/24 21:38:30.10 Jeg6uYsS
真下(真上)を向いた時でも画面を左右にパンしたような動きにする事はできました。
device.Transform.View = Matrix.Multiply(this.mMatPitch, this.mMatYaw);
が、これですと今度は真左(真右)を向いた時に、回転運動してしまいます。
簡単に考えてましたが結構難しいですね。
もう少しがんばってみます。
280:名前は開発中のものです。
13/04/24 22:16:07.70 2hyv5vhS
D3DX使えるなら
D3DXQuaternionRotationYawPitchRoll
でqを初期化(前回のqとして使用)
D3DXQuaternionRotationYawPitchRoll
今回の回転角度入れて回転量のqを取得
D3DXQuaternionMultiply
前回のqと回転量のq掛け合わせて回転後のqを取得(次の前回のqとして使用)
D3DXMatrixRotationQuaternion
qを回転行列にする
C#だと
Quaternion.RotateYawPitchRoll
Quaternion.Multiply
Matrix.RotateQuaternion
これ?
281:名前は開発中のものです。
13/04/24 22:21:21.75 GXtoO3cP
期待する結果がだせればいいなら、Matrix.LookAtLHを使うといいよ。
回転順によって結果が違うのを理解するのは3Dプログラムで重要なので、
LookAtLHを使わずにいろいろ試したり、計算してみるのもいいけどね。
がんばれ。
282:275
13/04/26 19:23:52.43 ID10QpvF
>>280
>>281
ありがとうございます。
Quaternion は利用しませんでしたが、お陰さまでできました。
View用のMatrixに毎フレーム掛け合わせるだけでした><