X, Y, Z стандарти координат?


12

Я досить новачок у розробці 3D будь-якого виду, тим не менш ігор. Читаючи підручники та приклади, я виявляю, що координати X / Y / Z здаються трохи назад, ніж моя перша здогадка.

Я уявляв, що якби людина ходила по полю, їх положення X / Y змінюватиметься, і якщо вони стрибатимуть або йдуть вгору чи вниз по пагорбі, то їх Z-положення буде змінюватися. Мої припущення, здається, неправильні, тому що, мабуть, прогулянка по полі змінюється X / Z, а стрибки або сходження вгору / вниз по пагорбі змінюють Y.

1) Чи правильні мої спостереження? 3D для мене є новим, і я, можливо, не думаю про речі належним чином.

2) Яка логіка горизонтального руху X / Z та вертикального руху Y?

3) Чи було б мені неправильно використовувати X / Y як горизонтальний рух і Z як вертикальний рух у рамках XNA?


Координатні системи лівої / правої руки. DirectX - ліва рука, за замовчуванням у OpenGL - права рука.
Джонатан Коннелл

Відповіді:


19

Ваші припущення не помиляються: кожен двигун трактує ці координати по-різному. Взагалі, X майже завжди є осі Схід-Захід, але чи Y або Z - це висота осі, як правило, змінюється. Як я розумію, у Quake 3, двигуна джерела та двигуна Torque все Z вже вгору. Так само робить інструмент моделювання 3DS Max. Це не рідкість.

Має сенс мати систему координат, яка впорядкована приблизно у порядку зменшення за важливістю, щоб легше було зрозуміти вирівнювання подання на менші розміри. Наприклад, якщо ваша гра встановлена ​​на двовимірній карті висоти, Z має сенс бути "вгору", оскільки тоді ваші координати X і Y на карті світу 3D безпосередньо до координат X і Y на карті висоти. З іншого боку, якщо ви думаєте насамперед з точки зору візуалізації (і це роблять багато розробників ігрових механізмів), ви звикли, що X і Y є координатними екранами, тому додавання 3-ї осі природно виходить на екран або виходить з нього.

Використовуйте те, що вам найпростіше, але пам’ятайте, що будь-який вибір є довільним і вам може знадобитися конвертувати між ними та використовувати декілька систем координат в межах однієї програми.


Мені реально подобаються інші два відповіді, але оскільки це прийнята відповідь, зауважте, що Y - вертикальний, а Z - на екрані - це спосіб більшості апаратних API для 3D (DirectX і OpenGL) . Якщо ви хочете мати власну систему, просто пам’ятайте про це, оскільки може знадобитися деякий переклад. (Щось неправильно, але послідовно часто може працювати як завгодно, отже, "може бути" :))
Джеймс

1
У технічному плані OpenGL за замовчуванням виходить Z, коли ви включаєте напрямок, тому хоча і він, і DirectX мають паралель Z паралельно напрямку перегляду, вони все ще несумісні! Працюючи з 3D, вам потрібно бути компетентним при переході від однієї системи координат до іншої за допомогою обертання, перекладу та масштабування - дійсно, саме так у світі з'являються моделі - тому немає особливого сенсу занадто прив'язуватися до будь-якого поняття про стандартний.
Кілотан

Тільки вказуючи тоді, коли ви маєте справу з мільйонами трикутників, можливо, менше вам доведеться зробити для боротьби з системою coordiante апаратного забезпечення, тим краще;) Кінець дня, ігрові ігри - це весело, незважаючи на рівень стресу. Робіть те, що ви хочете: )
Джеймс

Поняття "Z" як виходу з екрана або виходу з висоти є дещо оманливим. Можливо, просто простіше концептуалізувати трансформації. Ми подаємо вершинні координати 3D / 4D, які з часом трансформуються у вікно 2D, але зі значенням глибини. Ідея про те, що API по своїй суті відображає тривимірні координати X, Y або Z на «глибину», не є дійсно правильним - ви можете придумати будь-яке перетворення, яке змінює значення координат. Після закінчення трансформації ви все одно отримаєте 2D координати простору вікна та значення глибини.
PatrickB

1
Я не зовсім впевнений, де ми не погоджуємось з рештою: звичайно, ви можете використовувати будь-який простір координат, який ви хотіли, доки ви зможете спроектувати х, у, глибину врешті-решт, але це питання стосується насамперед того, чому існують певні умовності для систем координат, і конвенції неминуче пов'язані з концепціями реального світу.
Kylotan

6

Уявіть, що дивитесь на аркуш паперу, простягнутий перед вами з діаграмою на ньому, осі, як правило, позначені X через низ і Y вгору по вертикалі; це залишає Z як зовнішню вісь уздовж землі.

Це просто умова, але вона багато використовується в графіці, де ми вважаємо Z як глибину сцени.

В інших сферах, таких як CAD, ваша версія буде більш поширеною.


4

Ідея полягає в тому, що осі x і y залишаються однаковими - y на екрані "вгору", а x - поперек.

z - третій вимір, проектується назад на екран (тут ігноруються питання передачі). У трьох вимірах це стає трохи дивним, але для розміщення речей у просторі екрану це має більше сенсу.

3) Ви можете, якщо хочете, але це було б боляче і незграбно. Я б радив просто звикнути до Z-проектів, що входять / виходять з-під монітора.


1

1) Так, ваші спостереження правильні.

2) Стандартна глобальна система координат XYZ має сенс, коли ви думаєте з точки зору шутера від першої особи, коли ви дивитесь очима персонажа в сцену з порожньою (ідентичністю) матрицею перетворення. Як би це було, коли ви малюєте систему координат на аркуші паперу, X вказує вправо, а Y - вгору. Відповідно до правила правої руки (x-> великий палець, y-> вказівний палець, z-> середній палець), Z вказує на вас.

3) Це було б неправильно, але це було б відхиленням від стандартів. Наразі я можу подумати про три проблеми: (а) Скажімо, одного дня ви хочете використовувати бібліотеку фізики, яка використовує стандартний координатний кадр. Якщо ви не дотримувались стандарту, тепер вам доведеться подумати про трансформацію, яка перенесе вас із вашого світу у світ фізики. Ви можете роздратувати, коли ви хочете виправити помилку. (b) Коли ви хочете поділитися кодом з кимось або привернути когось, щоб допомогти в розвитку, вони повинні звикнути до вашого умовного збору. (c) Використовуючи стандартні тривимірні моделі, ви завжди повинні мати перетворення над ними, щоб запобігти їх погляду вбік.

Тепер, щоб додати питання 2, так корисно думати про X, Y і Z не лише про три букви, а як праву, вгору і назад. Кожен персонаж у сцені має локальну систему координат, приєднану до них, а в локальних координатних кадрах X завжди вірно, Y вгору, а Z назад. Після того, як ви це зробите, тепер ви можете зрозуміти вектори, які ви роздруковуєте, або записати свої алгоритми таким чином, що має сенс. Скажімо, у вас є два символи A і B, і ви хочете щось зробити, якщо один з них стикається з іншим. Ви можете просто знайти місце B у координатному кадрі A (Ta ^ -1 * p_b), подивитися на отриманий вектор і побачити, чи Z (назад) негативне, а X (праворуч) та Y (вгору) малі, тому що цей вектор говорить вам, скільки назад, праворуч і вгору B має відносно А.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.