Чому DirectX використовує систему лівих координат?


52

Я розглядав публікацію в Stack Overflow, але питання вражає мене як занадто суб'єктивним, оскільки я не можу придумати розумного технічного пояснення щодо вибору Microsoft у цьому питанні. Але це питання насторожує мене так довго, і питання продовжує виникати в одному з моїх проектів, і я ніколи не бачив спроби пояснити це:

OpenGL використовує праворучну систему координат, де + Z частина світової системи координат поширюється на глядача.

DirectX використовує ліворучну систему, де + Z частина світової координати простягається на екран, подалі від глядача.

Я ніколи не використовував API Glide , тому не знаю, як він працював, але з того, що я можу зібрати, він також використовує ліву систему.

Чи є для цього технічна причина? А якщо ні, чи є якась концептуальна перевага певної чіткості системи координат? Чому б обирати один над іншим?


5
Це схоже на запитання, чому арабська та іврит пишуться справа наліво, а кожна інша мова - зліва направо.
Гейб

17
Я просто намагаюся зрозуміти, чому існує така яскрава невідповідність серед графічних API, які є міцною основою в математиці. Напрям семітських алфавітів, очевидно, не заснований на незмінних правилах.
greyfade

3
Це питання посилалось на те, чому ми не наймаємо програмістів .NET (2011-03-25).
Пітер Мортенсен

2
Ні OpenGL, ні Direct3D не є чисто правою або лівою рукою. Колишні зміни ліворуч у просторі кліпу, тоді як місце екрану пізніше праворуч, тобто в екрані екрану D3D обертання від X до Y при погляді з боку + Z - це обертання проти годинникової стрілки. І обидві системи дозволяють розробникам використовувати простори будь-якої хіральності.
legends2k

1
@PeterMortensen Досить смішно, як усі ненависники .NET навіть не знають, що це. Напевно, вони мають на увазі веб-форми ASP.NET, рамки. .NET можна описати як бібліотеку базового класу та CLR.
The Muffin Man

Відповіді:


64

Я знаю, що це стара публікація, але я бачив, що цей пост посилається і не подобається обраному тону відповіді.

Тож я трохи розслідував!

  1. DirectX старий . Вперше він був випущений у 1995 році, коли у світі було набагато більше, ніж Nvidia та ATI , DirectX проти OpenGL. Це вже понад 15 років, люди.
  2. 3Dfx Interactive's Glide (один з конкурентів DirectX в той час. OpenGL тоді не був призначений для ігор) використовував ліворучну систему координат.
  3. POV-Ray і RenderMan (програмне забезпечення для рендерингу Pixar) також використовують ліворучну систему координат.
  4. DirectX 9+ може працювати з обома системами координат.
  5. І WPF, і XNA (які працюють з DirectX під сценами) використовують праворучну систему координат.

З цього можу міркувати про пару речей:

  • Галузеві стандарти не такі стандартні, як людям.
  • Direct3D був побудований за той час, коли кожен робив справи по-своєму, і розробники, ймовірно, не знали краще.
  • Ліворукість необов’язкове, але зазвичай у світі DirectX.
  • Оскільки конвенції важко вимирають, всі вважають, що DirectX може працювати лише з лівою рукою.
  • Microsoft врешті-решт навчився та дотримувався стандартів у будь-яких нових створених API.

Тому мій висновок був би таким:

Коли їм довелося вибирати, вони не знали стандарту, вибрали «іншу» систему, а всі інші просто поїхали разом. Ніякого тінистого бізнесу, просто невдале дизайнерське рішення, яке було прийнято, оскільки відстала сумісність - це назва гри Microsoft.


11
DirectX - немовля в пеленальному одязі порівняно з 3D-комп’ютерною графікою, і це порівняно молодо порівняно з комп'ютерними програмами, які мають керувати кількома системами 3D координат і трансформуватися серед них. Це було в середині 1970-х, коли я вперше взяв клас графіки, і НАДІЙЧИЙ інструктор (Френк Ворон) дуже сильно підштовхував нас до виключно використання правої системи координат. У 1983 році я працював над роботою, яка не займалася графікою, але відбувалася трансформація координат, і обов'язкове правило правою рукою було видано ПЕРШИЙ записку проекту. (І я цього не
випускав

7
Я не впевнений, що вік має щось до цього. Хіба більшість фізичних наук не використовували праворучну систему координат і вже багато-багато років, ніж комп'ютери? Я б сказав, що це набагато старша умова, ніж ті, за якими слідує Glide, а потім DX.
Томас Оуенс

3
Тільки тому, що стандарт, який використовується в академічних науках, не означає, що він буде однаковим у промислових / інших програмах. Зрештою, люди слідкують за тим, що використовується у власній галузі. Інакше графічні системи мали б своє походження у лівому нижньому куті екрану, а не лівому верхньому куті. Крім того, справа у віці полягає в тому, що DX народився, коли вся річ "3D-рендерінга для робочого столу" була ще новою, і "стандарти" та "найкращі практики" ще не були повністю викреслені.
Kyte

1
а) Отже, ви називаєте мою відповідь, яка є простим переліком доказових фактів і те, що я явно називаю моїми особистими міркуваннями, "забобонними" та "необґрунтованими у фактах", коли ваше власне пропозиція є звинуваченням у корпоративному поведінці без цитування чи підтримка що б? б) Якщо ви не любите моєї відповіді, ви завжди можете дати своє. Коли я дав цю відповідь, прийнятої відповіді було вже рік. Ви можете додавати більше знань, якщо відчуваєте, що маєте щось зробити. в) Важко створити монополію, коли ваші опори на ринку хиткі. Це не сучасна багатонаціональна держава.
Кіт

2
@Kyte 3Dfx мав власні API-інтерфейси з певної причини, щоб зафіксувати вас у своєму обладнання. Вони змусили кінцевих користувачів придбати їх обладнання, оскільки розробники були "підкуплені" писати ігри, які працювали лише з 3Dfx. Microsoft хотіла заблокувати вас у своєму API, щоб розробники писали ігри лише для Windows, це врешті-решт знищило 3Dfx. Прості та прості ділові рішення, а не поведінка. Це триває і сьогодні. Nvida хоче, щоб ви зафіксували вас у своїх картах за допомогою CUDA, AMD хоче використовувати OpenCL, 2012, таку ж аргументацію, що стоїть на поведінці. Це історія, я в той час був у галузі.

37

Я здивований, що ніхто нічого не згадав: OpenGL працює і в лівій системі координат. Принаймні, це робиться, коли ви працюєте з шейдерами та використовуєте діапазон глибини за замовчуванням.

Після того, як ви викинете трубопровід з фіксованою функцією, ви матимете справу безпосередньо з "простором кліпу". Специфікація OpenGL визначає простір кліпу як 4D однорідну систему координат. Коли ви стежите за перетвореннями через нормалізовані координати пристрою та вниз до віконного простору, ви виявите це.

Простір вікна - це простір пікселів вікна. Походження знаходиться в лівому нижньому куті, + + Y йде вгору і + X йде праворуч. Це дуже схоже на праворучну систему координат. А як же Z?

Діапазон глибини за замовчуванням (glDepthRange) встановлює значення майже Z на 0, а далеко Z - на одне . Тож + Z відходить від глядача.

Це ліва система координат. Так, ви можете змінити тест на глибину з GL_LESS на GL_GREATER та змінити glDepthRange з [0, 1] на [1, 0]. Але стан замовчування OpenGL - це робота в лівій системі координат. І жодне з перетворень, необхідних для отримання віконного простору з простору кліпу, не заперечує Z. Отже, кліп-простір, вихід вершинного (або геометрійного) шейдера - це лівий простір (свого роду. Це однорідний простір 4D, так важко притиснути хендс).

У трубопроводі з фіксованою функцією стандартні матриці проекції (вироблені glOrtho, glFrustum тощо) перетворюються з простору праворуч у ліворукий . Вони перевертають значення Z; просто перевірте генеровані ними матриці. У просторі очей + Z рухається до глядача; у постпроекційному просторі він відсувається.

Я підозрюю, що Microsoft (і GLide) просто не покладалися на те, щоб виконати заперечення у своїх проекційних матрицях.


4
Дійсно цікаво. Зізнаюся, я ніколи так уважно не придивлявся. Хоча моє питання стосується простору світу, ваша відповідь дає мені їжу для роздумів.
greyfade

Я виявив, що зміна або діапазону глибини, або випробування на глибину зробили його правою рукою, але за допомогою обох скасованих інших видали мені систему лівої руки.
hultqvist

1
Інтригуючий. Подивіться на перетворення глибини перегляду: z_wiewport = z_clip * (далеко-близько) / 2 + (близько + далеко) / 2. Це робить простір кліпу -1 відображеним на ближчий, а +1 на далеко. Отже, сам простір для кліпів можна вважати лівим , хоча ви все ще можете змінити те, як воно відображається у вікні перегляду пізніше.
Кос

1
@NicolBolas: Ви помітили, що навіть Direct3D не є чисто лівою рукою, оскільки це місце на екрані праворуко? X зліва направо, Y зверху вниз і Z від глядача, тобто X до Y - це обертання проти годинникової стрілки, якщо дивитися від протилежної осі Z.
legends2k

1
@bobobobo "Я зауважив, що матриця перегляду, сформована gluLookAt, може також змінити рухливість" - Ні, це не так. Ось так обчислюється вектор прямого напрямку, але все ж ця матриця є звичайною жорсткою трансформацією тіла в просторі праворуч (а насправді + z дійсно є "назад" у просторі праворуч). Заперечення вектора вперед не має нічого спільного зі зміною прохідності координатного простору.
Кріс каже, що знову

11

Це чиста історія. У стародавні часи ранні програмісти печерної графіки вважали поверхню монітора (телетип "стонетик") зоною огляду як двовимірний графічний папір. У математиці та техніці звичайними умовами для побудови точок даних на графічному папері є: x = справа, y = вгору. Потім одного дня, приблизно через тиждень після винаходу кремнієвого колеса, хтось подумав про 3D-графіку. Коли свічка цієї ідеї блимала над головою, вони з будь-якої причини вирішили додати Z = від глядача. (Ой, болить моя права рука, просто уявляючи це.)

Вони не мали ідеї, що колись їхні далекі нащадки стануть інженерами, вченими, образотворчими художниками, комерційними художниками, аніматорами, дизайнерами продуктів тощо і знайдуть 3D-графіку корисною. Усі ці прекрасні сучасні люди використовують правильні системи координат, щоб відповідати один одному та більш усталеним математичним текстам та конвенціям з фізики.

Нерозумно базувати 3D-систему координат на поверхні дисплея. Ця модель налічує - трикутники, багатокутники та літаки, що описують будинок, стілець, зелену ограну або галактику із зайвою вагою. Сьогодні ми всі розробляємо та моделюємо в правильних системах XYZ, і робимо це з точки зору світу моделі, ще до того, як думати, як вона буде представлена. Камера додається в якийсь момент, можливо, зроблена для того, щоб літати навколо божевільними способами, і невидима інфраструктура перетворює модель в пікселі, які в її надрах повинні крутитися навколо з координованими системними перетвореннями.

Просто для додавання плутанини деякі графічні бібліотеки визнають, що CRT сканують зображення зверху вниз і тому Y = вниз. Це застосовується і сьогодні у всіх системах вікон та менеджерів вікон - X11, fvwm, gtk +, Win31 API і т. Д. Як новомодні 3D-графічні графічні системи, такі як Clutter, Beryl тощо, справляються із Z, є окремим питанням від 3D-графічного моделювання. Це стосується лише програмістів програм та дизайнерів GUI.


1
Все дуже цікаво, і це, безумовно, пояснює обґрунтування GLI в SGI. ... Але як це пояснює, що DirectX є лівшею?
greyfade

Кілька 2D і 3D систем вивели свої умови зі спільної історії.
DarenW

10

Вони по суті є рівнозначними, оскільки одне можна легко перетворити на інше. Єдина перевага, яку я можу знайти для ліворукої системи, полягає в тому, що чим об'єкти віддалені від спостерігача, в будь-якому напрямку (x, y або z), відстань - це велике значення. Але я не маю поняття, чи саме тому Microsoft вибирала один над іншим.

POV-Ray також використовує ліворукову карнадну систему.


5
Так, я думаю, що багато новичок із графікою вважають, що збільшення глибини в екрані є більш природним. Але вони також хочуть, щоб х збільшувались вправо і y вгору, стиль "осей графіків". Це отримує їм ліворучну систему координат. Лише пізніше, коли вони намагаються робити більш складні речі, вони розуміють, що вони перейшли в непристосованість з правим світом науки / математики / техніки.
тайм

6
@ Тимдень, ви повинні навчити новачків таємній тривимірній графіці без рукостискань. Витягніть праву руку, розтягнувши великий палець, вказівний і середній палець, все під прямим кутом один до одного. Великий палець - X, вказівний палець - Y, середній палець - Z. Тепер перемістіть руку, щоб вирівнятися з будь-якими координатами, які ви хочете, і ви одразу знаєте, як рух вплине на перетворення.
Джон Р. Стром

3
@John: Гей, здогадуйся що, фізики мають таке ж таємне рукостискання!
тайм

1
@John Хоча я повністю погоджуюся з перевагами праворуч системи, ви знаєте, що ваше правило рукостискання (яке повинні були навчитися всі в школі) також може використовуватися лівою рукою для ліворукої системи.
Кріс каже, що повернеться до Моніки

@ChristianRau, якою рукою ви користуєтесь, залежить від того, яку систему координат ви намагаєтесь описати, праворуч або ліворуч.
Джон Р. Стром

10

Провідний розробник з DirectX (Direct3D і) Алекс Сент - Джон недавно прокоментував , що. У статті про історію Direct3D він написав:

Мене [...] попросили обрати API для Direct3D. Я вибрав ліворучну систему координат, частково з особистих уподобань . [...] це був довільний вибір.

Джерело: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/


Це довільний вибір лише в тому випадку, якщо ви не маєте поняття, чим займається інший світ, а решта світу фактично стандартизована на правій системі координат для графіки.
Джон Р. Стром

1
@ JohnR.Strohm - ти навіть читав пов'язану статтю?
Максим Мінімус

Link-rot з'їв цю сторінку. Ось останній робочий знімок: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough

5

Що потрібно зрозуміти, це те, що велика кількість програмістського часу була витрачена на перетворення між лівою і правою системою координат, і ще більше програміста витрачено час, згадуючи, яка система була потрібна в будь-який конкретний момент.

Все це пішло, коли праві координатні системи стали галузевим стандартом.

Вже існує достатньо загальних систем координат, без подвоєння числа, вводячи питання про переказ. Див. Minkler & Minkler, "Аерокосмічні системи координат та трансформації" . Якщо ви займаєтесь координацією аерокосмічної справи, займаючись, наприклад, імітацією польотів, вам потрібна ця книга.

Я здогадуюсь, що в Microsoft Direct не було жодного проекту DirectX, який би щось знав про галузеві стандарти, не усвідомлював, що існував галузевий стандарт, і вважав, що це не має значення.

Інша можливість, що вони знали, що праворукі системи є галузевим стандартом, і вони навмисно робили DirectX ліворукими, щоб зробити HARD для людей, що перетворювали код, який використовував DirectX для використання OpenGL, не враховує. Якби я виявив, що це насправді так, я вважав би за необхідне почати нову і, мабуть, короткочасну кар'єру вбивці сокир в Редмонд.


У своєму питанні я не хотів би згадувати як Microsoft, тому не хотів згадувати можливість того, що це було несумісністю з OpenGL, який вони мали на увазі.
greyfade

3
@greyfade: Гаразд, тоді дозвольте сказати так. Немає жодної технічної причини віддавати перевагу ліворуким координатам над праворухими координатами, або навпаки. Однак сьогодні є дуже і дуже вагомі причини віддати перевагу правим координатам, а також націлити, перо і їздити за місто на залізниці будь-хто, хто навіть пошепки натякає на те, щоб взагалі що-небудь застосувати за допомогою ліворуких координат. Це робить це простіше?
Джон Р. Стром

Я не знаю, що я міг викликати будь-яку справедливу обурення. Я працюю з PostScript досить регулярно, як частина моєї роботи (де координати починаються з [0, 0] як лівий нижній кут, а максимум у верхньому правому куті), тому перетворення координат - це просто такий факт життя тут.
Inaimathi

2
Так це 100% спекуляція? Чому він позначений як відповідь?
Фактор Містик

3
Побиває мене, це просто безглузда зухвалість і, як не дивно, як і ліва система координат, багато людей просто чомусь пішли разом з нею.
Швидкий Джо Сміт

5

З тими, хто вважає, що немає переваги правці чи лівші, ви абсолютно неправі. Правильність декартових систем координат походить від визначення векторного поперечного добутку. Для XYZ базисних векторів u, vі w, w = u X v.

Це визначення є основоположним для векторної математики, вектора числення та більшої частини фізики. Припустимо, ви намагаєтеся імітувати електромагнітні взаємодії. У вас вектор магнітного поля M, і заряджена частинка, що рухається в цьому полі зі швидкістю v. Яким способом прискорюється заряд? Легко - у напрямку до M X v. За винятком деяких ідіотів, які вважають, що було б цікаво зробити вашу систему відображення лівою рукою, тому вона прискорюється в напрямку -M X v.

В основному будь-яка фізична взаємодія між двома векторними величинами визначається як праворучна, і тому будь-коли, коли вам потрібно буде моделювати цю взаємодію, ви краще сподіваєтесь, що ваша графічна система є правою рукою, або вам потрібно буде пам'ятати, щоб обробляти негативні знаки в вся ваша математика.


Електромагнітика - не єдине місце, де з’являється перехресний продукт. Це також проявляється в аеродинаміці та орбітальній механіці. Імітація польоту має справу з цим, і тут стикаються фізичні системи координат і графічні системи координат. Дивіться Minkler & Minkler, цитований у моїй відповіді вище.
Джон Р. Стром

@Tom: Я не впевнений, чи це правда; візьміть 3 вектори скажімо (1, 0, 0), (0, 1, 0) і (0, 0, 1), виконуючи ixj дає k, оскільки формула перехресного продукту чітко визначена і числа не мають жодної хиральність / врученість; це лише людина, яка інтерпретує три вектори в деякій рукотворності, навіть тоді ми можемо вирішити інтерпретувати її обома руками, і це все ще буде послідовно, тобто в лівій руці ixj = k буде відсутня, а в правій ixj = k буде спрямований. Зауважте, я і хлопець з правою рукою, але все-таки це факт.
legends2k

@ legends2k: Так, я думаю, це правда, якщо ви не хочете, щоб ваші цифри взагалі нічого не означали. Як тільки ви хочете, щоб ваші номери представляли фізичну взаємодію, або координати в системі відображення, або взагалі щось, то це дуже важливо.
Том

@Tom Ви маєте рацію, що ми повинні дати значення цифрі. Це дійсно має значення. Але це все ще не причина говорити про те, що ліва рука над правою рукою. Я міг би дати сенс 0,0,1як рухатися вперед, а це ліворуч, тому 1,0,0 X 0,1,0зробіть 0,0,1ліву руку
Таїна

@Tom Насправді, коли ви робите фізику в лівій системі координат, формула все-таки є, M X vале Mвважається, що магнітне поле вказує у зворотному напрямку, оскільки це псевдовектор. Ви можете використовувати однакові рівняння в будь-якій системі: єдине, що змінюється, - це ваша інтерпретація того, в який спосіб "вказують" псевдовектори. Правильні вектори, як прискорення, завжди працюватимуть однаково в будь-якій системі координат. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Оскар Бенджамін

5

Справжня відповідь на ранню ліворукість Direct3D набагато менше зловісна, ніж дехто з вас міркує. DirectX почав свою роботу, коли Microsoft придбала RenderMorphics ще в 1995 році.

У той час стандартним графічним текстом, використовуваним в офісах RenderMorphics, були "Принципи інтерактивної комп'ютерної графіки" Ньюмана та Спроула, який робить все, використовуючи ліві координати. Це та сама книга, якою я користувався в коледжі. Дивлячись на код D3D, ви навіть можете їх побачити, використовуючи назви змінних, які відповідають рівнянням у книзі.

Це не якась змова Microsoft. Рішення було прийнято ще до того, як Microsoft навіть з'явилася на світ.


Я погоджуюся з коментарем тут, що це звучить як міська легенда, але приємно отримати свою особисту перспективу.
Йосія Йодер

3

Ні в кінцевому підсумку не краще, ніж інше - ви зіставляєте тривимірні координати на 2D-поверхні, тому третій вимір (який насправді робить речі 3D) можна вибирати довільно, вказуючи на глядача або на екран. Ви все одно збираєтеся прокладати матрицю 4x4, тому немає технічних причин вибирати одне за іншим. Функціонально можна стверджувати:

  • Існує досить широкий консенсус для обчислень та інших полів, щоб вісь X проходила зліва направо (авіації, мабуть, є помітним винятком).
  • У математиці вісь Y вказує вгору. (Також вгору куди йдуть бульбашки).
  • На комп’ютерних дисплеях вісь Y спрямовується вниз (тому, що так працюють екрани CRT, а також тому, що саме такий порядок впорядковує рядки людей).
  • Коли ви дивитесь на "видиму" сторону поверхні в площині X / Y, нормальна повинна вказувати на глядача (наприклад, коли ви дивитесь супутникові кадри; "висота над рівнем моря" вказує на супутник, а не на центр Землі). Оскільки нормальним для площини X / Y є вектор осі Z, то випливає, що вісь Z також повинна вказувати на глядача.
  • Якщо ви дивитеся на 3D-зображення на екрані комп’ютера, точки, які знаходяться далі від глядача, повинні мати більший Z-компонент. Отже, вісь Z повинна вказувати на екран.

Висновок : Існує певна консенсус для осі X, але для двох інших, обидва напрямки можна сперечатися, даючи дві конфігурації праворуч і дві ліві руки, і всі вони мають сенс.


3

Цікавий факт.

Direct3D (не DirectX - DirectX також охоплює вхід, звук тощо) насправді не має лівокоординатної системи координат.

Він ідеально здатний підтримувати як системи RH, так і ЛГ. Якщо ви подивитесь на документацію SDK, ви побачите такі функції, як D3DXMatrixPerspectiveFovLH та D3DXMatrixPers перспективаFovRH. Обидва працюють, і обидва виробляють проекційну матрицю, яку можна успішно використовувати з обраною вами системою координат. Чорт, ви навіть можете використовувати стовпчик-мажор у Direct3D, якщо хочете; це просто бібліотека матриць програмного забезпечення, і вам не потрібно використовувати її. З іншого боку, якщо ви хочете використовувати його з OpenGL, ви побачите, що він також чудово працює і з OpenGL (що, мабуть, є остаточним доказом незалежності бібліотеки матриць від самого Direct3D).

Тому якщо ви хочете використовувати систему RH у своїй програмі, просто використовуйте версію функції -RH. Якщо ви хочете використовувати систему LH, використовуйте версію -LH. Direct3D не хвилює. Так само, якщо ви хочете використовувати систему LH у OpenGL - просто glLoadMatrix матриця проекції LH. Жоден із цих матеріалів не є важливим, і це ніде не існує величезної проблеми, яку ви іноді бачите, як це зроблено.


0

Жодної технічної переваги для будь-якої передачі немає, це абсолютно довільно. Обидва працюють добре, доки ви послідовні.

Через переваги послідовності, в ідеалі варто просто «використовувати те, що використовують всі інші», але це в багатьох випадках досить складно, оскільки на практиці немає переважної «бажаної» конвенції: обидві руки широко використовуються. У кращому випадку є певна послідовність у певних спільнотах (наприклад, OpenGL).

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

Зрештою, це має незначне значення - той, хто серйозно хоче обмінятися активами / кодом з іншими системами / спільнотами, все одно повинен бути готовий боротися з перетворенням handness, оскільки це факт життя в 3D-графіці.


0

Подаючи це як додатковий матеріал до моєї попередньої відповіді тут. Зі старої специфікації OpenGL 1990-х:

OpenGL не змушує ліворуч або праворукості в жодній із своїх систем координат.

(джерело: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Отже, оскільки ні D3D, ні OpenGL не застосовують жодних можливостей, справжнє питання: чому люди сприймають це як щось велике?


1
чому ви опублікували це окремою відповіддю? Я маю на увазі, що ви можете відредагувати свою попередню відповідь, щоб додати це, чи не так?
гнат

-1

Я ненавиджу тобі сказати, але "рука" набору координат насправді суб'єктивна - це залежить від того, яким способом ти уявляєш, що ти дивишся на речі. Приклад, із специфікації карти куба OpenGL: якщо ти уявляєш, що всередині куба дивиться назовні, система координат ліва рука, якщо ти думаєш заглянути ззовні - це права рука. Цей простий факт викликає нескінченну скорботу, адже для отримання чисельно правильної відповіді всі ваші припущення повинні бути узгодженими, хоча локально це насправді не має значення, яке припущення ви робите.

Спеціалізація OpenGL офіційно "нейтральна по відношенню до рук" і йде дуже довго, щоб уникнути цього питання - тобто перенести його на програміста. Однак існує "зміна руки" між координатами очей і координатами кліпів: у моделі та просторі очей, які ми шукаємо, у кліпі та просторі пристрою, на які ми дивимось. Я завжди борюся з наслідками цього, без сумніву, випадкового ускладнення.

Перехресний продукт - наш друг, тому що він дозволяє вам генерувати напевно праворуч або ліворуку 3D координатну систему з пари векторів. Але від якої руки це залежить, який з тих векторів ви називаєте "X".


3
Поперечний продукт є антикоммутаційним. A x B == - B x A. Як такий, визначається перехресний добуток, який приймає неколінеарний перший і другий вектор, записаний у цьому порядку, і виробляє третій вектор, нормальний для площини, що містить перший і другий вектори. , і напряму, відповідного для створення правої системи координат, коли вектори перераховуються в порядку (перший, другий, результат). Якщо ви вирішите перекрутити це, не соромтесь, АЛЕ БЕЗПЕРЕДЖЕНО: Якщо ви це зробите навколо мене, вам краще насолоджуватися дьогтем, пір’ям і осколками в задній частині, коли ви їдете за місто з залізниці.
Джон Р. Стром

Цілком правильно, Джон; але вам все одно доведеться зіткнутися з тим, що таке збочення можливе, тобто немає такого поняття, як "абсолютна правдоподібність", це означає, що ви все ще залежить від вас і мене, щоб правильно визначити знаки.
Томас Шарплесс

-3

Я міг би сказати, що галузевий стандарт неправильний з першого місця

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

Але ви знаєте, ми зараз використовуємо з екраном монітора Це вертикальна площина. X все ще вліво / вправо, але Y - це вгору і вниз замість цього

Отже, що може викликати Праворучна система координат? Це змушує + Z бути назад і -Z бути вперед Що, до біса, це? Вгору є +, а вниз - Право є +, а ліворуч - АЛЕ Вперед -, а назад + + Це так нерозумно, якщо ми робимо гру з цим персонажем, що працює в 3D-світі, але нам потрібно мінус z, щоб йти вперед. Ось чому ігровий програміст найбільше цінує DirectX

Захоплювати стандарт, що прийшов з письмового столу, і використовувати його на моніторі - це так неправильно в багатьох рівнях з першого місця. І тепер ми повинні визнати, що вони, OpenGL та Industry, помиляються. Вони просто використовують те, що, на їхню думку, було б їм комфортно, але вони помиляються, а Праворучна система координат - це просто непотрібна спадщина, яку потрібно викинути якомога швидше.


2
-1 за незнання. Права конвенція походить від фізики та математики, зокрема, функціонування векторного перехресного продукту, що є основоположним для теорії електромагнітного поля та механіки. Обчислювальна техніка прийняла його тому, що первісне використання комп'ютерів полягало в стисканні чисел.
Джон Р. Стром

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