Я делаю 3D-игру в XNA, используя Ox Engine. Документов очень мало, и я до сих пор выживаю, но теперь я уже довольно давно преодолел логический блок и думаю, что пришло время обратиться за помощью извне.
Все движения и мышь выглядят как x, и камера следует правильно, однако, когда я перемещаю мышь вверх / вниз по оси Y, чтобы камера двигалась в своем круговом «пузыре» вокруг персонажа, это заставляет все остальное выходить из синхронизации. Персонаж должен вращаться вокруг камеры , но также необходимо указать, в каком направлении персонаж направлен на . Я не могу иметь оба.
Когда у меня есть код, чтобы указать ему направление персонажа и отойти от него (транспонировать), он перемещает саму орбиту:
</p>
<pre><code> if (changeY > 0)
{
if (camMemory.Y > 110)
tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY));
}
else if (changeY < 0)
{
if (camMemory.Y < 400)//FAKE PLACEHOLDER VALUE... highest point in arc goes here
tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY));
}
Vector3 camPos = new Vector3(0, 0, 0) ;
camMemory = tempMatrix.Translation;
//NOTE: this is the piece that causes the "bubble" to move
moveAmount = tempMatrix.Forward * 200f;
/////
tempMatrix.Translation += moveAmount;
camPos = tempMatrix.Translation + model.Position;
//Pointer in front, Camera behind, make camera face pointer.
Engine.Camera.SetTransformByLookTarget(camPos, model.Orientation.Up, trackPos);
Это означает, что при неправильном обращении орбиты персонажу, когда он поворачивается, камера оказывается не на своем месте.
Однако, когда я исправляю эту проблему, я не достаточно далеко от персонажа, чтобы иметь правильное представление, и просто умножение на tempMatrix.Translation , чтобы «расширить» «пузырь», заставляет меня сильно упасть места. Я лишен прозрений. Любая идея будет принята с благодарностью.
tl, dr : Как сделать так, чтобы орбитальная камера пузырилась вокруг персонажа, больше не перемещая центральную точку (транспонирование не работает или я использую это неправильно!)
Редактировать: Я хотел бы наградить это, лол