Remove ads
Из Википедии, свободной энциклопедии
Термин «изометрия» в компьютерных играх относится к тому или иному виду параллельной проекции (иногда диметрическую проекцию ошибочно называют «изометрической»). Угол обзора в ней смещён, и это создаёт эффект трёхмерности и позволяет показать некоторые детали окружения, которые не видны при виде сверху или виде сбоку. Также используются термины «2.5D» и «псевдо-3D».
С появлением мощных графических систем изометрическая проекция стала менее популярна, будучи заменена перспективной проекцией.
В области компьютерных видеоигр использование изометрии стало популярным из-за простоты, с которой 2D спрайт и основанная на тайлах графика может с её помощью имитировать 3D-окружение. Поскольку объекты не меняют своего размера в зависимости от расположения в игровом пространстве, нет необходимости в сложных вычислениях масштабов спрайтов и моделировании визуальной перспективы. Это позволяет отображать большие трёхмерные пространства 8-битным и 16-битным, а также карманным игровым системам. Проблемы с глубиной поможет решить хороший игровой дизайн.
Проекция, обычно использующаяся в видеоиграх, несколько отличается от «настоящей» изометрии из-за ограничений растровой графики. Линии по осям x и y выглядели бы неаккуратно, если бы были отклонены на 30 ° к горизонтали. Современные компьютеры могут устранить эту проблему, используя сглаживание, но более старые графические системы не поддерживали достаточное количество цветов либо не обладали достаточными вычислительными ресурсами, чтобы сделать это.
Вместо этого, оси x и y отклонялись на 26,565 ° (арктангенс 0.5) от горизонтали, однако игровые системы, не использующие квадратные пиксели, могли отображать любые углы, в том числе и «истинную» изометрию. Поэтому эту форму проекции можно описать как модификацию диметрической проекции, так как в ней равны только два угла между осями из трёх (116,565 °, 116,565 °, 126,87 °).
Термин часто применяется к играм с проекцией, похожей на «настоящую изометрию», включая игры, которые используют триметрическую проекцию (Fallout, SimCity 4), игры, использующие косоугольную проекцию (The Legend of Zelda: A Link to the Past, Ultima Online), а также игры, использующие комбинацию перспективной проекции и вида с высоты птичьего полёта (Torchlight[1],, Silent Storm[2]).
Другие примеры игр, использующих косоугольную проекцию: оригинальный SimCity, EarthBound и Paperboy.
Хотя в истории компьютерных игр уже в начале 1970-х годов были игры с истинной 3D графикой, первые видеоигры, использующие изометрическую проекцию в значении, описанном выше, появились только в 1980-х и были аркадами.
Первый случай использования изометрии в видеоиграх — Zaxxon[3][4], выпущенная в январе 1982. Это был изометрический скролл-шутер, в котором игрок управлял самолётом. Так же это был один из первых случаев отображения теней в играх.
Другая ранняя изометрическая игра — Q*bert, которую Уоррен Дэвис и Джефф Ли начали писать в апреле 1982 и выпустили в октябре/ноябре 1982. В игре была представлена статическая пирамида в изометрической проекции, на которую игрок должен был запрыгнуть.
В 1983 году была выпущена изометрическая аркада-платформер Конго-Бонго, работающая на том же оборудовании, что и Zaxxon. Игрок мог перемещаться на больших изометрических уровнях, в том числе подниматься и опускаться по оси Z. То же было возможно и в аркаде Marble Madness 1984 года выпуска.
В это время изометрические игры перестали быть эксклюзивами для аркадных аппаратов и пришли на домашние компьютеры с выпуском Ant Attack для ZX Spectrum в 1983. Игрок мог двигаться в любом направлении, предлагая полную свободу движения, в отличие от Zaxxon. Вид так же мог быть повёрнут на 90 градусов вокруг своей оси. Журнал ZX Crash присудил ей 100 % в области графики[5].
Год спустя на свет появилась новая игра для ZX Spectrum — Knight Lore, которая определила жанр изометрических игр на годы вперёд. Эта игра породила множество клонов для домашних компьютеров. Другие примеры тех лет: Highway Encounter (1985), Batman (1986), Head Over Heels (1987) и La Abadía del Crimen (1987). Изометрия в те годы не ограничивалась только аркадами — существует, например, стратегическая игра Populous 1987 года.
В течение 1990-х появляются некоторые очень успешные игры, использующие фиксированную изометрическую перспективу, такие как Civilization II, Diablo и Fallout. Но с появлением 3D ускорителей в персональных компьютерах и игровых консолях игры, до этого использовавшие 2D перспективу, стали поворачиваться к 3D. Эту тенденцию можно проследить и в преемниках вышеупомянутых игр: например, Civilization IV и Diablo III используют настоящее 3D. В то время как Diablo II использовала фиксированную перспективу, как и её предшественник, она дополнительно позволяла масштабировать спрайты, чтобы придать себе эффект 3D[6].
В течение 1990-х изометрическая графика начала использоваться в компьютерных ролевых играх, особенно в тактических ролевых играх, многие из которых используют изометрическую графику и поныне. К концу 1990-х такие игры, как Vandal Hearts (1996), Final Fantasy Tactics (1997) и Breath of Fire III (1997), использовали трёхмерную графику для создания изометрического вида, в котором игрок мог свободно вращать камеру.
Одной из наиболее распространённых проблем с программированием игр, которые используют изометрическую (или диметрическую) проекцию, является привязывание координат на плоскости экрана к координатам фактического расположения объекта в изометрическом пространстве.
Типичным примером является определение тайла, находящегося под курсором. Один из методов сделать это использует те же матрицы вращения, что определяли изометрическое представление. Затем, путём деления значения х и у на ширину и высоту тайла и округления до ближайшего меньшего значения мы можем получить координаты х и у в изометрическом пространстве.
Другой способ, который требует меньшего объёма вычислений и подходит, если метод вызывается в каждом кадре, основывается на предположении, что мы имеем квадратную сетку, которая была повёрнута на 45 градусов, а затем сжата пополам, как описано выше. Сперва находятся координаты тайла на виртуальной сетке (линии которой параллельны границам экрана), которые мы называем виртуальным x и виртуальным y. Как видно, координаты тайлов виртуальной сетки на центральной оси совпадают с координатами тайлов на центральной оси изометрического пространства.
Тайл виртуальной сетки, лежащий на одну позицию правее центральной линии, будет иметь соответствие с тайлом изометрического пространства, лежащего на одну позицию меньше по оси y (по сравнению со своим виртуальным аналогом). Можно вывести формулу, которая будет вычислять координату y тайла в изометрическом пространстве, отнимая от виртуального y разницу между виртуальным x центральной линии и виртуальным x искомого тайла.
Пример кода на C (при условии, что переменные имеют правильные значения):
float virtualTileX = screenx / virtualTileWidth;
float virtualTileY = screeny / virtualTileHeight;
// Некоторые системы дисплеев имеют начало координат в левом нижнем углу, а тайл на карте в левом верхнем углу, так что мы должны перевернуть у
float inverseTileY = numberOfTilesInY - virtualTileY;
float isoTileX = inverseTileY + (virtualTileX - numberOfTilesInX / 2);
float isoTileY = inverseTileY - (virtualTileY - numberOfTilesInY / 2);
Тайл на виртуальной сетке будет содержать более чем один изометрический тайл и в зависимости от того, где нажата кнопка мыши, следует сопоставить с соответствующими координатами. Ключевую роль в этом методе является то, что виртуальные координаты — числа с плавающей точкой, а не целые числа. Виртуальный х и у могут быть, например, (3,5, 3,5), что означает центр третьей плитки.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.