如何以等距投影的形式呈现文本?我了解原理,但我不确定如何以编程方式实际转换 SpriteFont 来做到这一点。
我的意思的例子:
我什至不确定我应该寻找什么。似乎我可以通过使用等距投影矩阵和 3D 网格字体来实现这一点,但考虑到我在 2D 中工作,这似乎过于复杂。
有任何想法吗?
SpriteBatch.Begin
接受一个Matrix
参数,将您绘制的精灵(包括SpriteFont
)转换到您想要的任何平面上。
不幸的是Matrix
,没有提供Create*
创建偏斜矩阵的方法。但是手动创建这样的矩阵很简单。以下代码经过测试,非常接近您想要的:
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();
与您的图表的唯一区别是 Y 和 Y' 指向相反的方向,因为 XNASpriteBatch
在“客户端”坐标中工作(左上角的(0,0),Y+ 向下)。
您可以将矩阵变换与精灵批处理一起使用来实现此目的。您可以在此处阅读有关矩阵转换的更多信息。