Визуализация изометрического текста в 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+ вниз).
Вы можете использовать матричное преобразование вместе со спрайтовым пакетом для достижения этой цели. Вы можете прочитать больше о матричном переводе здесь.