私は数日前からこの問題に手を出していましたが、これは本当に恥ずかしいことです。
XNA で作成しているゲームのカメラ機能の作成に取り組んでいます (はい、XNA がサポートされなくなったことは知っています。教えてはいけません)。これは Oculus Rift 用に開発されており、肩から首、首から頭までのジョイントで部分的に機能するようになりました。今悩んでいるのは目です。現在、直視すると問題なく動作しています。でも回転(ピッチ)した途端に目が追いつかない。それらは基本的に同じオフセット (カメラの位置から x+2 と x-2 のように) で動かなくなります。つまり、180 度回転すると、目が入れ替わります。つまり、私の左の視覚は右のカメラであり、その逆も同様です。
これが私のコードです:[CameraController.cs]
public override void Update(GameTime gameTime)
{
Vector3 leftEyePosition = GetEyePosition(Eyes.Left);
Vector3 rightEyePosition = GetEyePosition(Eyes.Right);
_leftEyeCamera.Update(gameTime, leftEyePosition, NeckHead.Yaw, NeckHead.Pitch, NeckHead.Roll, 2);
_rightEyeCamera.Update(gameTime, rightEyePosition, NeckHead.Yaw, NeckHead.Pitch, NeckHead.Roll, -2);
}
private Vector3 GetEyePosition(Eyes eyes)
{
Matrix neckHead = GetHeadPositions();
Vector3 eye = (eyes == Eyes.Left ? neckHead.Left : neckHead.Right);
Vector3 eyePosition = NeckHead.Position;
return (eye + eyePosition);
}
private Matrix GetHeadPositions()
{
Matrix shoulderNeck = ShoulderNeck.GetMatrix();
Matrix neckHead = NeckHead.GetMatrix()*shoulderNeck;
return neckHead;
}
【ジョイント.cs】
public class Joint
{
private float _pitch;
private Vector3 _position;
private float _roll;
private float _yaw;
public Joint(Joint childJoint, Vector3 position)
{
ChildJoint = childJoint;
Position = position;
}
public Vector3 Position { get; set; }
public float Yaw { get; set; }
public float Pitch { get; set; }
public float Roll { get; set; }
public Joint ChildJoint { get; private set; }
public Matrix GetMatrix()
{
return Matrix.CreateFromYawPitchRoll(Yaw, Pitch, Roll);
}
}
【FpsCamera.csの更新方法】
public void Update(GameTime gameTime, Vector3 position, float yaw, float pitch, float roll)
{
Matrix rotationMatrix = Matrix.CreateFromYawPitchRoll(pitch, yaw, roll);
Vector3 transformedReference = Vector3.Transform(Vector3.Forward, rotationMatrix);
Vector3 target = transformedReference + position;
view = Matrix.CreateLookAt(position, target, rotationMatrix.Up);
}
私が知る限り、これはうまくいくはずですよね?マトリックスの1つに問題があるのではないかと思いますが、知っていれば質問しないので... 誰か予感がしましたか?
完全なクラス: http://pastebin.com/zUVwAPFt http://pastebin.com/jTbnNsJm
ありがとうビャルケ
Ps。皆さんが求めるすべてのためにそれを短くしました。