@Wirago wrote:
I am working on a ordinary 2D RPG for quite some time now using ordinary orthagonal view.
(example here: https://www.youtube.com/watch?v=2cexpfyjwAE)For testing purposes I would like to set the view to an isometric view... Diablo2 like.
To be honest, I don't understand everything about ViewMatrices, Projections and so on, but I thought that it should be quite easy to get my Camera into an isometric perspective.
Well... the 45° rotation on one axis is easy and kind of obvious, but I need to rotate it by another 30° on the other axis.What I got now is the following (quite straight foreward I guess)
Camera2D camera; camera = new Camera2D(GraphicsDevice.Viewport); Matrix viewMatrix = camera.GetViewMatrix(); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, transformMatrix: viewMatrix);
And the Camera Class:
public class Camera2D { private readonly Viewport viewport; private Vector2 position; public int viewWidth; public int viewHeight; public int worldWidth; public int worldHeight; public Camera2D(Viewport viewport) { this.viewport = viewport; Rotation = 0; Zoom = 1; Origin = new Vector2(viewport.Width / 2, viewport.Height / 2); Position = Vector2.Zero; viewWidth = viewport.Width; viewHeight = viewport.Height; } public Vector2 Position { get { return position; } set { position = new Vector2( MathHelper.Clamp(value.X, 0, worldWidth - viewport.Width), MathHelper.Clamp(value.Y, 0, worldHeight - viewport.Height)); } } public float Rotation { get; set; } public float Zoom { get; set; } public Vector2 Origin { get; set; } public Matrix GetViewMatrix() { return Matrix.CreateTranslation(new Vector3(-Position, 0f)) * Matrix.CreateTranslation(new Vector3(-Origin, 0f)) * Matrix.CreateRotationZ(Rotation) * Matrix.CreateScale(Zoom, Zoom, 1) * Matrix.CreateTranslation(new Vector3(Origin, 0f)); } public void Update(int xPos, int yPos) { Position = new Vector2(xPos - viewWidth / 2, yPos - viewHeight / 2); } }
I have the feeling that I need to tweak GetViewMatrix() to get the desired result, but I dont know how (besides of setting Rotation to 45°)
Maybe I am on a completely wrong path?
Posts: 1
Participants: 1