Vladimir kozhayev isometry handmade

41
Изометрия своими руками Владимир Кожаев [email protected] http:// gamesdevandmath.blogspot.com []

description

Handmade isometry, Ciklum Game Developers Saturday

Transcript of Vladimir kozhayev isometry handmade

Page 1: Vladimir kozhayev   isometry handmade

Изометрия своими руками

Владимир Кожаев[email protected]

http://gamesdevandmath.blogspot.com

[]

Page 2: Vladimir kozhayev   isometry handmade

О докладчикеВладимир Кожаев• В прошлом

разработчик J2ME и флеш игр

• Сейчас работаю в энтерпрайзе

Page 3: Vladimir kozhayev   isometry handmade

О докладеРассмотрим математические основы

создания изометрии.

Зачем?

Чтоб понимать как «оно» работает «внутри»!

Page 4: Vladimir kozhayev   isometry handmade

Содержание1. Зачем нужна изометрия

2. Что такое изометрия

3. Плиточные миры

4. Математика(её будет много)

5. Немного о рендеринге

Page 5: Vladimir kozhayev   isometry handmade

Зачем нужна изометрия?

• Применяется в играх с видом от третьего лица

• Загружает процессор меньше, чем «натуральные» 3D движки

• Использует плоские рисунки вместо 3D моделей

• Изометрическую игру создать проще• Возможностей достаточно для

большинства игр

Page 6: Vladimir kozhayev   isometry handmade

Что такое изометрия?

Page 7: Vladimir kozhayev   isometry handmade

Что такое изометрия?Аксонометрическая проекция (греч. άχοπ — «ось» и «метрия») — способ изображения геометрических предметов на чертеже при помощи параллельных проекций.

Предмет с системой координат, к которой он отнесён, проецируют на произвольную плоскость (картинная плоскость аксонометрической проекции) таким образом, чтобы эта плоскость не совпадала с его координатной плоскостью. В этом случае получается две взаимосвязанные проекции одной фигуры на одну плоскость, что позволяет восстановить положение в пространстве, получив наглядное изображение предмета. Так как картинная плоскость не параллельна ни одной из координатных осей, то имеются искажения отрезков по длине параллельных координатным осям. Это искажение может быть равным по всем трём осям — изометрическая проекция, одинаковыми по двум осям — диметрическая проекция и с искажениями разными по всем трём осям — триметрическая проекция.

Page 8: Vladimir kozhayev   isometry handmade

Что такое изометрия?

Page 9: Vladimir kozhayev   isometry handmade

Что такое изометрия

Вид трехмерного предмета со стороны без учета того, что удаленные предметы кажутся нам меньше

Page 10: Vladimir kozhayev   isometry handmade

Что такое изометрия?Изометрическая

проекция – одинаковое искажение размеров по всем трем осям координат

Page 11: Vladimir kozhayev   isometry handmade

Что такое изометрия?Диметрическая

проекция – два коэффициента искажения

Page 12: Vladimir kozhayev   isometry handmade

Что такое изометрия?Триметрическая

проекция – три коэффициента искажения

Page 13: Vladimir kozhayev   isometry handmade

Что такое изометрия?

Все эти виды проекций в иногда(неправильно)

называют изометрией. Мы будем говорить о

аксонометрии

Page 14: Vladimir kozhayev   isometry handmade

Что не изометрия?• Перспективная проекция –

искажение вдоль координатной оси не является постоянным

• Далекое кажется маленьким• Параллельные линии на рисунке

не параллельны

Page 15: Vladimir kozhayev   isometry handmade

Что не изометрия?

Параллельные стены не параллельны на рисунке, дальняя стенка «меньше» ближней

Page 16: Vladimir kozhayev   isometry handmade

Плиточные миры

Page 17: Vladimir kozhayev   isometry handmade

Плиточные миры

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

Page 18: Vladimir kozhayev   isometry handmade

Плиточные миры• Плитки имеют

одинаковые размеры• Игровые предметы или

персонажи расположены на одной или нескольких плитках

• Персонажи перемещаются от плитке к плитке

• Сортировка глубины объектов происходит по плиткам на которых они стоят

Page 19: Vladimir kozhayev   isometry handmade

Плиточные мирыПри создании плиточного мира нам

нужно знать:1. Как зная координаты плитки в

проецируемой системе получить координаты на экране

2. Как зная координаты на экране получить координаты в проецируемой системе

3. Как сортировать по глубине

Page 20: Vladimir kozhayev   isometry handmade

Математика

Page 21: Vladimir kozhayev   isometry handmade

Как увидеть 3D?Положим у нас есть

вид сверху – мы хотим получить вид со стороны.

Что нужно сделать?

Повернуть камеру.

Page 22: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

У нас есть координаты плитки в проецируемой системе. Как получить координаты плитки на экране?

Как координаты той – же точки повернутой относительно исходной. Координаты можно получить умножением вектора координат на матрицу поворота

Page 23: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

Матрицы поворотаВокруг OX

Вокруг OY

Вокруг OZ

Page 24: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

Допустим, мы вращаем вокруг оси OZ на угол и вокруг оси OX на угол

Тогда нужно умножить координаты в исходной системе на матрицу поворота вокруг OZ, затем полученные координаты на матрицу поворота вокруг OX

Page 25: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

Пусть (x, y,z) координаты в проецируемой системе. (x1, y1,z1) координаты после поворота вокруг оси OZ. (x2,y2,z2) – координаты, после поворота вокруг OX

Page 26: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

Тогда

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

112

112

12

1

1

1

zyz

zyy

xx

zz

yxy

yxx

Page 27: Vladimir kozhayev   isometry handmade

От проецируемой системы к экрану

Или, если Z=0

)sin(*

)cos(*

0

)cos(*)sin(*

)sin(*)cos(*

12

12

12

1

1

1

yz

yy

xx

z

yxy

yxx

Page 28: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Есть координаты плитки на экране. Как получить координаты в проецируемой системе?

Последовательно умножить на матрицы поворота обратные данным

Page 29: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Пусть B и A – матрицы поворота, B-1 и A-1 – обратные им. X координаты точки в

проецируемой системе. X2 – в экранной.

Тогда:2

11

11

*

****

XBAX

XABBAX

Page 30: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Пусть (x2, y2,z2) координаты в экранной системе. (x1, y1,z1) координаты после поворота вокруг оси OX в обратную сторону. (x,y,z) – координаты, после поворота вокруг OZ в обратную сторону

Page 31: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Тогда

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

Page 32: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Или

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

Page 33: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Мы не можем получить из проекции значение всех трех координат

Page 34: Vladimir kozhayev   isometry handmade

От экрана к проецируемой системе

Поэтому одну из координат принимаем постоянной.

Например аппликату(OZ)

Page 35: Vladimir kozhayev   isometry handmade

Сортировка глубин

xnydepth

ynxdepth

)1(*

)1(*

Если два спрайта перекрываются, какой из них ближе к пользователю?

Page 36: Vladimir kozhayev   isometry handmade

Как замостить плоскость

Page 37: Vladimir kozhayev   isometry handmade

Как замостить плоскость?

Как можно сделать, чтобы персонажи не ходили друг через друга?

1) Уступать дорогу

2) Сделать так, чтобы их пути не пересекались в принципе

Page 38: Vladimir kozhayev   isometry handmade

Как замостить плоскость?

Первый путь понятен, реализация его сложна

Рассмотрим второй путь: нужно чтобы путь из клетки в соседнюю проходил только по этим двум клеткам

Page 39: Vladimir kozhayev   isometry handmade

Как замостить плоскость

Треугольниками, квадратами и шестиугольниками – по другому никак

Page 40: Vladimir kozhayev   isometry handmade

Немного о рендеринге• MVC спасет человечество• Не рисуйте всё – только то, что

видно на экране• Изменение глубин вместо

сортировки• Пол - не место для честного

мувиклипа

Page 41: Vladimir kozhayev   isometry handmade

ВопросыВопросы?