Тем не менее, я довольно новичок в разработке 3D-игр. Читая учебные пособия и примеры, я обнаружил, что координаты X / Y / Z кажутся немного более обратными, чем мое первое предположение.
Я предполагал, что если человек будет ходить вокруг поля, его положение X / Y будет меняться, и если он будет прыгать или идти вверх или вниз по склону, то его положение Z будет меняться. Мои предположения кажутся неверными, потому что ходьба по полю, кажется, меняет X / Z, а прыжки или подъем / спуск по склону изменяют Y.
1) Верны ли мои наблюдения? 3D является новым для меня, и я, возможно, не думаю о вещах должным образом.
2) Какова логика горизонтального движения - X / Z, а вертикального - Y?
3) Было бы так неправильно с моей стороны использовать X / Y как горизонтальное движение и Z как вертикальное движение в XNA Framework?
источник
Ответы:
Ваши предположения не ошибочны: каждый движок обрабатывает эти координаты по-своему. Вообще говоря, X - это почти всегда ось Восток-Запад, но имеет ли значение Y или Z ось Высот. Насколько я понимаю, у Quake 3, Source Engine и Torque есть Z как вверх. Как и инструмент моделирования 3DS Max. Это не редкость.
Имеет смысл иметь систему координат, которая упорядочена примерно в порядке убывания важности, чтобы упростить понимание представления в меньшем количестве измерений. Например, если ваша игра установлена на двухмерной карте высот, имеет смысл, чтобы Z был «вверх», потому что тогда ваши координаты X и Y на трехмерной карте мира прямо соответствуют координатам X и Y на карте высот. С другой стороны, если вы думаете в первую очередь с точки зрения рендеринга (как это делают многие разработчики игрового движка), вы привыкли к тому, что X и Y являются координатами экрана, поэтому добавление третьей оси естественным образом входит или выходит из экрана.
Используйте то, что проще для вас, но помните, что любой выбор является произвольным и что вам может потребоваться выполнить преобразование между ними и использовать несколько систем координат в одной программе.
источник
Представьте себе, что вы видите лист бумаги, протянутый перед вами, с диаграммой на нем, оси обычно обозначены буквой X внизу, а Y вверх по вертикали; это оставляет Z быть внешней осью вдоль земли.
Это просто соглашение, но оно широко используется в графике, где мы думаем о Z как о глубине сцены.
В других областях, таких как CAD, ваша версия будет более распространенной.
источник
Идея состоит в том, что оси x и y остаются неизменными - y на экране «вверх», а x поперек.
z - третье измерение, проецируемое обратно на экран (здесь игнорируются проблемы с руками). В 3-х измерениях это становится немного странным, но для позиционирования объектов на экране имеет больше смысла.
3) Можно, если хочешь, но было бы больно и неуклюже. Я бы посоветовал просто привыкнуть к Z-проектам в / из-за монитора.
источник
1) Да, ваши наблюдения верны.
2) Стандартная глобальная система координат XYZ имеет смысл, когда вы мыслите с точки зрения шутера от первого лица, когда вы смотрите глазами персонажа на сцене с пустой (идентичной) матрицей преобразования. Как и при рисовании системы координат на листе бумаги, X указывает вправо, а Y указывает вверх. Согласно правилу правой руки (x-> большой палец, y-> указательный палец, z-> средний палец), Z указывает на вас.
3) Это не было бы неправильно, но это было бы отклонением от стандартов. На данный момент я могу представить себе три проблемы: (a) Допустим, однажды вы захотите использовать физическую библиотеку, которая использует стандартную систему координат. Если вы не следовали стандарту, теперь вам нужно подумать о преобразовании, которое переносит вас из вашего мира в мир физики. Может стать раздражающим, когда вы хотите исправить ошибку. (б) Если вы хотите поделиться с кем-то кодом или привлечь кого-то для помощи в разработке, они должны привыкнуть к вашему соглашению. (c) При использовании стандартных 3D-моделей вы всегда должны иметь трансформацию над ними, чтобы они не смотрели вбок.
Теперь, чтобы добавить к вопросу 2, очень полезно думать о X, Y и Z как о не только трех буквах, но и как о правильном, вверх и назад. К каждому персонажу в сцене привязана локальная система координат, и в своих локальных системах координат X всегда прав, Y - вверх, а Z - назад. Если у вас есть это, теперь вы можете разобраться с векторами, которые вы распечатываете, или написать свои алгоритмы так, чтобы это имело смысл. Допустим, у вас есть два символа A и B, и вы хотите что-то сделать, если один из них смотрит на другого. Вы можете просто найти местоположение B в системе координат A (Ta ^ -1 * p_b), посмотреть на полученный вектор и посмотреть, отрицательно ли Z (назад), а X (справа) и Y (вверх) малы, потому что этот вектор говорит вам, сколько назад, вправо и вверх B относительно A.
источник