Vladimir kozhayev handmade isometry
-
Upload
dneprciklumevents -
Category
Documents
-
view
503 -
download
0
description
Transcript of Vladimir kozhayev handmade isometry
![Page 2: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/2.jpg)
О докладчикеВладимир Кожаев• В прошлом
разработчик J2ME и флеш игр
• Сейчас работаю в энтерпрайзе
![Page 3: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/3.jpg)
Содержание1. Зачем нужна изометрия
2. Что такое изометрия
3. Плиточные миры
4. Математика(её будет много)
![Page 4: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/4.jpg)
Зачем нужна изометрия?
• Применяется в играх с видом от третьего лица
• Загружает процессор меньше, чем «натуральные» 3D движки
• Использует плоские рисунки вместо 3D моделей
• Возможностей достаточно для большинства игр
![Page 5: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/5.jpg)
Что такое изометрия?
![Page 6: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/6.jpg)
Что такое изометрия?Аксонометрическая проекция (греч. άχοπ — «ось» и «метрия») — способ изображения геометрических предметов на чертеже при помощи параллельных проекций.
Предмет с системой координат, к которой он отнесён, проецируют на произвольную плоскость (картинная плоскость аксонометрической проекции) таким образом, чтобы эта плоскость не совпадала с его координатной плоскостью. В этом случае получается две взаимосвязанные проекции одной фигуры на одну плоскость, что позволяет восстановить положение в пространстве, получив наглядное изображение предмета. Так как картинная плоскость не параллельна ни одной из координатных осей, то имеются искажения отрезков по длине параллельных координатным осям. Это искажение может быть равным по всем трём осям — изометрическая проекция, одинаковыми по двум осям — диметрическая проекция и с искажениями разными по всем трём осям — триметрическая проекция.
![Page 7: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/7.jpg)
Что такое изометрия?
![Page 8: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/8.jpg)
Что такое изометрия
Вид трехмерного предмета со стороны без учета того, что удаленные предметы кажутся нам меньше
![Page 9: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/9.jpg)
Что такое изометрия?Изометрическая
проекция – одинаковое искажение размеров по всем трем осям координат
![Page 10: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/10.jpg)
Что такое изометрия?Диметрическая
проекция – два коэффициента искажения
![Page 11: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/11.jpg)
Что такое изометрия?Триметрическая
проекция – три коэффициента искажения
![Page 12: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/12.jpg)
Что такое изометрия?
Все эти виды проекций в иногда(неправильно)
называют изометрией. Мы будем говорить о
аксонометрии
![Page 13: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/13.jpg)
Что не изометрия?• Перспективная проекция –
искажение вдоль координатной оси не является постоянным
• Далекое кажется маленьким• Параллельные линии на рисунке
не параллельны
![Page 14: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/14.jpg)
Что не изометрия?
Параллельные стены не параллельны на рисунке, дальняя стенка «меньше» ближней
![Page 15: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/15.jpg)
Плиточные миры
![Page 16: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/16.jpg)
Плиточные миры
Описанные свойства аксонометрической проекции позволяют представить мир в виде плоскости разделенной на плитки
![Page 17: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/17.jpg)
Плиточные миры• Плитки имеют
одинаковые размеры• Игровые предметы или
персонажи расположены на одной или нескольких плитках
• Персонажи перемещаются от плитке к плитке
• Сортировка глубины объектов происходит по плиткам на которых они стоят
![Page 18: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/18.jpg)
Плиточные мирыПри создании плиточного мира нам
нужно знать:1. Как зная координаты плитки в
проецируемой системе получить координаты на экране
2. Как зная координаты на экране получить координаты в проецируемой системе
3. Как сортировать по глубине
![Page 19: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/19.jpg)
Математика
![Page 20: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/20.jpg)
Как увидеть 3D?Положим у нас есть
вид сверху – мы хотим получить вид со стороны.
Что нужно сделать?
Повернуть камеру.
![Page 21: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/21.jpg)
От проецируемой системы к экрану
У нас есть координаты плитки в проецируемой системе. Как получить координаты плитки на экране?
Как координаты той – же точки повернутой относительно исходной. Координаты можно получить умножением вектора координат на матрицу поворота
![Page 22: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/22.jpg)
От проецируемой системы к экрану
Матрицы поворотаВокруг OX
Вокруг OY
Вокруг OZ
![Page 23: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/23.jpg)
От проецируемой системы к экрану
Допустим, мы вращаем вокруг оси OZ на угол и вокруг оси OX на угол
Тогда нужно умножить координаты в исходной системе на матрицу поворота вокруг OZ, затем полученные координаты на матрицу поворота вокруг OX
![Page 24: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/24.jpg)
От проецируемой системы к экрану
Пусть (x, y,z) координаты в проецируемой системе. (x1, y1,z1) координаты после поворота вокруг оси OZ. (x2,y2,z2) – координаты, после поворота вокруг OX
![Page 25: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/25.jpg)
От проецируемой системы к экрану
Тогда
)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](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/26.jpg)
От проецируемой системы к экрану
Или, если 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](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/27.jpg)
От экрана к проецируемой системе
Есть координаты плитки на экране. Как получить координаты в проецируемой системе?
Последовательно умножить на матрицы поворота обратные данным
![Page 28: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/28.jpg)
От экрана к проецируемой системе
Пусть B и A – матрицы поворота, B-1 и A-1 – обратные им. X координаты точки в
проецируемой системе. X2 – в экранной.
Тогда:2
11
11
*
****
XBAX
XABBAX
![Page 29: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/29.jpg)
От экрана к проецируемой системе
Пусть (x2, y2,z2) координаты в экранной системе. (x1, y1,z1) координаты после поворота вокруг оси OX в обратную сторону. (x,y,z) – координаты, после поворота вокруг OZ в обратную сторону
![Page 30: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/30.jpg)
От экрана к проецируемой системе
Тогда
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](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/31.jpg)
От экрана к проецируемой системе
Или
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](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/32.jpg)
От экрана к проецируемой системе
Мы не можем получить из проекции значение всех трех координат
![Page 33: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/33.jpg)
От экрана к проецируемой системе
Поэтому одну из координат принимаем постоянной.
Например аппликату(OZ)
![Page 34: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/34.jpg)
Сортировка глубин
xnydepth
ynxdepth
)1(*
)1(*
Если два спрайта перекрываются, какой из них ближе к пользователю?
![Page 35: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/35.jpg)
Как замостить плоскость
![Page 36: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/36.jpg)
Как замостить плоскость?
Как можно сделать, чтобы персонажи не ходили друг через друга?
1) Уступать дорогу
2) Сделать так, чтобы их пути не пересекались в принципе
![Page 37: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/37.jpg)
Как замостить плоскость?
Первый путь понятен, реализация его сложна
Рассмотрим второй путь: нужно чтобы путь из клетки в соседнюю проходил только по этим двум клеткам
![Page 38: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/38.jpg)
Как замостить плоскость
Треугольниками, квадратами и шестиугольниками – по другому никак
![Page 39: Vladimir kozhayev handmade isometry](https://reader033.fdocument.pub/reader033/viewer/2022061208/5486d8d7b47959fb0c8b52fc/html5/thumbnails/39.jpg)
ВопросыВопросы?