问题
How can I render text in the form of an isometric projection? I understand the principle but I'm not sure how to actually transform a SpriteFont programmatically to do this.
Example of what I mean:
I'm not even sure what I should be searching for. It seems I could accomplish this by using an isometric projection matrix and a 3D mesh font, but that seems overcomplicated considering I'm working in 2D.
Any ideas?
回答1:
SpriteBatch.Begin
takes a Matrix
parameter, transforming the sprites you draw (including SpriteFont
) onto whichever plane you desire.
Unfortunately Matrix
does not provide Create*
methods for creating skew matrices. But it is simple enough to create such a matrix by hand. The following piece of code is tested and is pretty close to what you want:
Matrix skew = Matrix.Identity;
skew.M12 = (float)Math.Tan(MathHelper.ToRadians(36.87f));
Matrix rotate = Matrix.CreateRotationZ(MathHelper.ToRadians(270+26.565f));
sb.Begin(SpriteSortMode.Deferred, null, null, null, null, null, skew * rotate);
// ... draw your sprites here ...
sb.End();
The only difference to your diagram is that Y and Y' point in the opposite direction, because XNA's SpriteBatch
works in "client" coordinates ((0,0) at top left, and Y+ is down).
回答2:
You can use a matrix transformation together with a sprite batch to achieve this. You can read more about matrix translation here.
来源:https://stackoverflow.com/questions/14582025/render-isometric-text-in-2d