vladimir kozhayev handmade isometry

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

Upload: dneprciklumevents

Post on 05-Dec-2014

509 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Vladimir kozhayev handmade isometry

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

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

http://gamesdevandmath.blogspot.com

[]

Page 2: Vladimir kozhayev handmade isometry

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

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

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

Page 3: Vladimir kozhayev handmade isometry

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

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

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

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

Page 4: Vladimir kozhayev handmade isometry

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

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

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

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

• Возможностей достаточно для большинства игр

Page 5: Vladimir kozhayev handmade isometry

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

Page 6: Vladimir kozhayev handmade isometry

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

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

Page 7: Vladimir kozhayev handmade isometry

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

Page 8: Vladimir kozhayev handmade isometry

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

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

Page 9: Vladimir kozhayev handmade isometry

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

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

Page 10: Vladimir kozhayev handmade isometry

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

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

Page 11: Vladimir kozhayev handmade isometry

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

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

Page 12: Vladimir kozhayev handmade isometry

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

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

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

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

Page 13: Vladimir kozhayev handmade isometry

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

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

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

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

Page 14: Vladimir kozhayev handmade isometry

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

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

Page 15: Vladimir kozhayev handmade isometry

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

Page 16: Vladimir kozhayev handmade isometry

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

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

Page 17: Vladimir kozhayev handmade isometry

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

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

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

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

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

Page 18: Vladimir kozhayev handmade isometry

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

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

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

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

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

Page 19: Vladimir kozhayev handmade isometry

Математика

Page 20: Vladimir kozhayev handmade isometry

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

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

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

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

Page 21: Vladimir kozhayev handmade isometry

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

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

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

Page 22: Vladimir kozhayev handmade isometry

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

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

Вокруг OY

Вокруг OZ

Page 23: Vladimir kozhayev handmade isometry

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

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

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

Page 24: Vladimir kozhayev handmade isometry

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

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

Page 25: Vladimir kozhayev handmade isometry

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

Тогда

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

112

112

12

1

1

1

zyz

zyy

xx

zz

yxy

yxx

Page 26: Vladimir kozhayev handmade isometry

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

Или, если Z=0

)sin(*

)cos(*

0

)cos(*)sin(*

)sin(*)cos(*

12

12

12

1

1

1

yz

yy

xx

z

yxy

yxx

Page 27: Vladimir kozhayev handmade isometry

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

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

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

Page 28: Vladimir kozhayev handmade isometry

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

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

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

Тогда:2

11

11

*

****

XBAX

XABBAX

Page 29: Vladimir kozhayev handmade isometry

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

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

Page 30: Vladimir kozhayev handmade isometry

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

Тогда

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

Page 31: Vladimir kozhayev handmade isometry

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

Или

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

Page 32: Vladimir kozhayev handmade isometry

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

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

Page 33: Vladimir kozhayev handmade isometry

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

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

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

Page 34: Vladimir kozhayev handmade isometry

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

xnydepth

ynxdepth

)1(*

)1(*

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

Page 35: Vladimir kozhayev handmade isometry

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

Page 36: Vladimir kozhayev handmade isometry

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

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

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

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

Page 37: Vladimir kozhayev handmade isometry

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

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

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

Page 38: Vladimir kozhayev handmade isometry

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

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

Page 39: Vladimir kozhayev handmade isometry

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