Визуализация изометрического текста в 2D

Как я могу отобразить текст в виде изометрической проекции? Я понимаю принцип, но я не уверен, как на самом деле программно преобразовать SpriteFont для этого.

Пример того, что я имею в виду:

Я даже не уверен, что я должен искать. Кажется, я мог бы сделать это, используя матрицу изометрической проекции и 3D-шрифт, но это кажется слишком сложным, учитывая, что я работаю в 2D.

Есть идеи?

2 ответа

Решение

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'указывают в противоположном направлении, потому что XNA SpriteBatch работает в "клиентских" координатах ((0,0) вверху слева и Y+ вниз).

Вы можете использовать матричное преобразование вместе со спрайтовым пакетом для достижения этой цели. Вы можете прочитать больше о матричном переводе здесь.

Другие вопросы по тегам