ローカルスペースでカメラをピッチするにはどうすればよいですか?
ワールドスペースのどこにあるかに関係なく、軸を中心に回転するモデルがあります。私が抱えている問題は、モデルの他の回転(ヨー)に関係なく、カメラのピッチを同じにすることです。現在、モデルがワールドスペースで北または南を向いている場合、カメラはそれに応じてピッチします。ただし、モデルが他の基本的な方向を向いている場合、カメラをピッチングしようとした後、カメラはモデルの背後で円を描くように上下に移動します(モデルが向いている方向ではなく、ワールドスペースのみを認識しているため)。
モデルがどちらの方向を向いていても、ピッチをモデルと一緒に回転させるにはどうすればよいですか?ピッチングしようとすると、カメラがモデル上を移動しますか?
// Rotates model and pitches camera on its own axis
public void modelRotMovement(GamePadState pController)
{
/* For rotating the model left or right.
* Camera maintains distance from model
* throughout rotation and if model moves
* to a new position.
*/
Yaw = pController.ThumbSticks.Right.X * MathHelper.ToRadians(speedAngleMAX);
AddRotation = Quaternion.CreateFromYawPitchRoll(Yaw, 0, 0);
ModelLoad.MRotation *= AddRotation;
MOrientation = Matrix.CreateFromQuaternion(ModelLoad.MRotation);
/* Camera pitches vertically around the
* model. Problem is that the pitch is
* in worldspace and doesn't take into
* account if the model is rotated.
*/
Pitch = pController.ThumbSticks.Right.Y * MathHelper.ToRadians(speedAngleMAX);
}
// Orbit (yaw) Camera around model
public void cameraYaw(Vector3 axisYaw, float yaw)
{
ModelLoad.CameraPos = Vector3.Transform(ModelLoad.CameraPos - ModelLoad.camTarget,
Matrix.CreateFromAxisAngle(axisYaw, yaw)) + ModelLoad.camTarget;
}
// Pitch Camera around model
public void cameraPitch(Vector3 axisPitch, float pitch)
{
ModelLoad.CameraPos = Vector3.Transform(ModelLoad.CameraPos - ModelLoad.camTarget,
Matrix.CreateFromAxisAngle(axisPitch, pitch)) + ModelLoad.camTarget;
}
public void updateCamera()
{
cameraPitch(Vector3.Right, Pitch);
cameraYaw(Vector3.Up, Yaw);
}