vladimir kozhayev handmade isometry

Post on 05-Dec-2014

510 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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

Владимир Кожаевvkozhaev@gmail.com

http://gamesdevandmath.blogspot.com

[]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Математика

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

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

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

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

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

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

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

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

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

Вокруг OY

Вокруг OZ

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

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

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

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

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

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

Тогда

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

112

112

12

1

1

1

zyz

zyy

xx

zz

yxy

yxx

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

Или, если Z=0

)sin(*

)cos(*

0

)cos(*)sin(*

)sin(*)cos(*

12

12

12

1

1

1

yz

yy

xx

z

yxy

yxx

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

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

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

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

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

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

Тогда:2

11

11

*

****

XBAX

XABBAX

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

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

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

Тогда

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

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

Или

1

11

11

21

221

221

)cos(*)sin(*

)sin(*)cos(*

)cos(*)sin(*

)sin(*)cos(*

zz

yxy

yxx

xx

zyz

zyy

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

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

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

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

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

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

xnydepth

ynxdepth

)1(*

)1(*

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

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

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

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

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

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

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

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

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

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

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

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

top related