Можете ли вы сделать изометрическую перспективу с HTML5?

можно сделать изометрическую перспективу с помощью HTML5 <canvas>? Это с setTransform? Или существует другой путь?

пример:

ctxt.setTransform (1, -0.2, 0, 1, 0, 0);

что-то вроде перспективы Farmville.

Спасибо большое.

2 ответов


вы можете нарисовать все, что хотите, на холсте до отдельного пикселя, поэтому любой вопрос, такой как "возможно ли это", будет иметь ответ "да".

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

вы можете, конечно, сделать 3d рендеринг (изометрический или перспективный) на холсте с использованием стандартных методов 3D->2d-сопоставлений. См., например,этот демо-4К это использование только canvas / javascript (вот видео на YouTube если Ваш браузер не поддерживает HTML5).

для изометрического вида часть настройки матрицы проще... например

var cs = Math.cos(angle1), sn = Math.sin(angle1);
var h = Math.cos(angle2);
var a = 100*cs, b = -100*sn, c = 200;
var d = h*100*sn, e = h*100*cs, f = 200;
ctx.setTransform(a, d, b, e, c, f);

здесь ctx контекст холста настроит матрицу, которая:

  • имеет XY угол поворота angle1
  • имеет угол наклона angle2
  • отображает длину от 1 до 100 пикселей
  • карты (0, 0) до 200, 200

вы можете увидеть небольшой пример этих формул в действиях на этой странице.


ну, чтобы сделать изометрическую игру его не так много, как перекос весь холст, его больше о графике вы используете. Например, плитки, как правило, h=w / 2. Таким образом, в обычной игре у вас будет плитка 32x32 в изометрической игре, вы сделаете ее 32x16. Также размещение плиток немного отличается, чтобы компенсировать угол.

короткий ответ да изометрические игры полностью возможны с помощью canvas. Посмотреть Freeciv для примера один.

другой хорошее место, чтобы спросить о специфике создания изометрической игры было быhttps://gamedev.stackexchange.com/