Моя игра XNA использует Farseer Physics, который представляет собой двумерный физический движок с дополнительным средством визуализации данных физического движка, чтобы помочь вам в отладке.Визуальные данные отладки очень полезны, поэтому я настроил их для отображения в соответствии с состоянием моей камеры.Это работает отлично, за исключением вращения оси Z.Видите, у меня есть класс камеры, который поддерживает движение, масштабирование и поворот по оси Z.Мой класс отладки использует средство отладки Farseer для создания матриц, которые делают отладочные данные отображаемыми в соответствии с камерой, и он делает это хорошо, за исключением одной вещи ... вращение оси Z использует верхний левый угол экрана для (0, 0), в то время как моя камера вращается, используя центр области просмотра как (0, 0).У кого-нибудь есть советы для меня?Если бы я мог заставить ящик отладки вращаться из центра, он отлично бы работал с моей камерой.
public void Draw(Camera2D camera, GraphicsDevice graphicsDevice)
{
// Projection (location and zoom)
float width = (1f / camera.Zoom) * ConvertUnits.ToSimUnits(graphicsDevice.Viewport.Width / 2);
float height = (-1f / camera.Zoom) * ConvertUnits.ToSimUnits(graphicsDevice.Viewport.Height / 2);
//projection = Matrix.CreateOrthographic(width, height, 1f, 1000000f);
projection = Matrix.CreateOrthographicOffCenter(
-width,
width,
-height,
height,
0f, 1000000f);
// View (translation and rotation)
float xTranslation = -1 * ConvertUnits.ToSimUnits(camera.Position.X);
float yTranslation = -1 * ConvertUnits.ToSimUnits(camera.Position.Y);
Vector3 translationVector = new Vector3(xTranslation, yTranslation, 0f);
view = Matrix.CreateRotationZ(camera.Rotation) * Matrix.Identity;
view.Translation = translationVector;
DebugViewXNA.RenderDebugData(ref projection, ref view);
}