c# - 以 2D 形式渲染等距文本

标签 c# xna rendering isometric

如何以等角投影的形式渲染文本?我理解原理,但我不确定如何以编程方式实际转换 SpriteFont 来执行此操作。

我的意思的例子:

enter image description here

我什至不确定我应该寻找什么。看来我可以通过使用等角投影矩阵和 3D 网格字体来完成此任务,但考虑到我在 2D 中工作,这似乎过于复杂。

有什么想法吗?

最佳答案

SpriteBatch.Begin 采用 Matrix 参数,将您绘制的 Sprite (包括 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' 指向相反的方向,因为 XNA 的 SpriteBatch 在左上角的“客户端”坐标((0,0) 中工作,而 Y+ 是下)。

关于c# - 以 2D 形式渲染等距文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582025/

相关文章:

c# - Windows Phone 8应用随机崩溃,错误代码为-2147220717(0x80040313)

3d - Hadoop 和 3d 图像渲染

c# - Windows Phone 后退按钮未被处理

c# - 使用来自文本文件的参数运行 exe

c# - 奇怪的 IndexOutOfRangeException,即使被捕获

c# - A* 寻路算法并不总能找到最短路线 C# XNA

c# - 在 C# 中使用时间跨度简化 if else 条件

c# - 缺少 System.Numerics.Vectors.Vector<T>

multithreading - JOGL - OpenGL 是否使用 AWT 线程来渲染图形?

.net - 如何使元素能够在其容器外绘制?