Почему DirectX использует левостороннюю систему координат?

52

Я думал о публикации в Stack Overflow, но этот вопрос мне кажется слишком субъективным, поскольку я не могу придумать разумного технического объяснения выбора Microsoft в этом вопросе. Но этот вопрос беспокоил меня так долго, и проблема продолжает появляться в одном из моих проектов, и я никогда не видел попытки объяснить это:

OpenGL использует правую систему координат, где часть + Z мировой системы координат простирается к зрителю.

DirectX использует левостороннюю систему, в которой часть мировой координаты + Z простирается в сторону экрана от зрителя.

Я никогда не использовал API Glide , поэтому я не знаю, как он работает, но из того, что я могу собрать, он также использует левостороннюю систему.

Есть ли техническая причина для этого? А если нет, то есть ли какое-то концептуальное преимущество для конкретной системы координат? Почему один выбирает один над другим?

greyfade
источник
5
Это похоже на вопрос, почему арабский и иврит пишутся справа налево, а все остальные языки слева направо.
Гейб
17
Я просто пытаюсь понять, почему существует такое явное несоответствие между графическими API, которые имеют прочную основу в математике. Направление семитских алфавитов определенно не основано на неизменных правилах.
Greyfade
3
На этот вопрос ссылались в разделе Почему мы не нанимаем программистов .NET (2011-03-25).
Питер Мортенсен
2
Ни OpenGL, ни Direct3D не являются чисто правыми или левшами. Прежние изменения в левостороннем пространстве клипа, в то время как пространство последующего правостороннее, то есть в экранном пространстве D3D вращение от X к Y, если смотреть со стороны + Z, является вращением против часовой стрелки. И обе системы позволяют разработчикам использовать пространства любой киральности.
legends2k
1
@PeterMortensen Забавно, что все ненавистники .NET даже не знают, что это такое. Вероятно, они ссылаются на ASP.NET Webforms, фреймворк. .NET можно описать как библиотеку базовых классов и CLR.
Маффин Человек

Ответы:

64

Я знаю, что это старый пост, но я видел, что на этот пост ссылаются, и мне не понравился тон выбранного ответа.

Поэтому я провел небольшое расследование!

  1. DirectX старый . Впервые он был выпущен в 1995 году, когда в мире было намного больше, чем Nvidia и ATI , DirectX против OpenGL. Это более 15 лет, люди.
  2. Glide от 3dfx Interactive (один из конкурентов 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 году я работал над заданием, в котором не было графики, но происходили преобразования координат, и обязательным правилом правой руки была выпущенная памятка проекта FIRST. (И я не выпускал это!)
Джон Р. Стром
7
Я не уверен, что возраст имеет какое-либо отношение к этому. Разве в большинстве физических наук не используется правосторонняя система координат, и прошло много, много лет больше, чем компьютеров? Я бы сказал, что это гораздо более старое соглашение, чем те, которые соблюдаются Glide, а затем DX.
Томас Оуэнс
3
Просто потому, что стандарт, используемый в академических кругах, не означает, что он будет таким же в промышленных / других приложениях. В конце концов, люди следят за тем, что используется в их собственной области. В противном случае графические системы будут располагаться в левом нижнем углу экрана, а не в левом верхнем углу. Кроме того, точка зрения о возрасте заключается в том, что DX родился, когда вся концепция «3D-рендеринга для настольных ПК» была еще новой, а «стандарты» и «лучшие практики» еще не были полностью разработаны.
Kyte
1
а) Таким образом, вы называете мой ответ, который представляет собой простой список доказуемых фактов и то, что я явно называю своими личными спекуляциями, «суеверными» и «необоснованными фактами», когда ваше собственное предложение является обвинением в корпоративном неправомерном поведении без цитирования или поддержка вообще? б) Если вам не нравится мой ответ, вы всегда можете дать свой. Когда я дал этот ответ, принятому ответу было уже год. Вы можете добавлять больше знаний, если чувствуете, что можете внести свой вклад. в) Трудно создать монополию, когда ваша точка опоры на рынке шаткая. Это не современный многонациональный РС.
Kyte
2
@Kyte 3Dfx имел специальные API по определенной причине, чтобы привязать вас к своему оборудованию. Они заставляли конечных пользователей покупать их оборудование, потому что разработчиков «подкупали» на написание игр, которые работали только с 3Dfx. Microsoft хотела запереть вас в своем API, чтобы разработчики писали только игры для Windows, это в конечном итоге убило 3Dfx. Простые и простые деловые решения, не плохое поведение. Это все еще продолжается сегодня. Nvida хочет, чтобы вы блокировали свои карты с помощью CUDA, AMD хочет использовать OpenCL, 2012 с тем же рассуждением о поведении. Это история, я был в отрасли в то время.
37

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

После того, как вы выбросили конвейер с фиксированной функцией, вы имеете дело непосредственно с «clip-space». Спецификация 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

Это чистая история. В древние времена ранние программисты в области пещерной графики считали поверхность обзора монитора (телетайп «stonetype») двумерной миллиметровкой. В математике и технике обычные соглашения для построения точек данных на миллиметровой бумаге: x = справа, y = вверх. И вот однажды, примерно через неделю после изобретения силиконового колеса, кто-то подумал о 3D-графике. Когда свеча этой идеи по какой-то причине загорелась над их головой, они решили добавить Z = от зрителя. (Ой, моя правая рука болит, просто воображая это.)

Они не знали, что когда-нибудь их далекие потомки станут инженерами, учеными, прекрасными художниками, коммерческими художниками, аниматорами, дизайнерами продуктов и т. Д. И найдут 3D-графику полезной. Все эти прекрасные современные люди используют правосторонние системы координат, чтобы соответствовать друг другу и более установленным математическим текстам и физическим соглашениям.

Глупо основывать трехмерную систему координат на поверхности дисплея. Это модель, которая имеет значение - треугольники, многоугольники и плоскости, описывающие дом, стул, избыточного веса зеленого людоеда или галактику. В настоящее время мы все проектируем и моделируем вещи для правосторонних систем XYZ, и делаем это с точки зрения мира модели, даже прежде чем думать о том, как она будет отображаться. В какой-то момент добавляется камера, возможно, созданная для того, чтобы летать сумасшедшими способами, и это невидимая инфраструктура, которая преобразует модель в пиксели, которые внутри ее кишечника должны вращаться с согласованными преобразованиями системы.

Просто чтобы добавить к путанице, некоторые графические библиотеки распознают, что ЭЛТ сканируют изображение сверху вниз, и поэтому имеют Y = вниз. Это используется даже сегодня во всех оконных системах и менеджерах окон - X11, fvwm, gtk +, Win31 API и т. Д. То, как новые 3D-системы с графическим интерфейсом, такие как Clutter, Beryl и т. Д., Имеют дело с Z, является отдельной проблемой от моделирования трехмерной графики. Это должно касаться только разработчиков приложений и дизайнеров GUI.

DarenW
источник
1
Все очень интересно, и это, безусловно, объясняет обоснование GL SGI. ... Но как это объясняет, что DirectX был левшой?
Greyfade
Несколько 2D и 3D систем все получили свои соглашения из общей истории.
DarenW
10

Они оба по сути эквивалентны, так как одно может быть легко преобразовано в другое. Единственное преимущество, которое я могу найти для левосторонней системы, состоит в том, что, поскольку объекты находятся дальше от наблюдателя, в любом направлении (x, y или z) расстояние является более высоким значением. Но я понятия не имею, поэтому ли Microsoft выбрала одно из другого?

POV-Ray также использует левостороннюю систему коридора.

tcrosley
источник
5
Да, я думаю, что многие новички в графике считают, что z увеличивается с глубиной на экране более естественно. Но они также хотят, чтобы x увеличивалось вправо и y вверх, в стиле «осей графа». Это дает им левостороннюю систему координат. Только позже, когда они пытаются делать более сложные вещи, они понимают, что они не в ногу с правым миром науки / математики / техники.
Timday
6
@Timday, ты должен научить новичков секретной трехмерной графике без рукопожатия. Протяните правую руку, вытянув большой, указательный и средний пальцы, все под прямым углом друг к другу. Большой палец - это X, указательный палец - это Y, средний палец - это Z. Теперь переместите вашу руку, чтобы выровнять ее с любыми желаемыми координатами, и вы сразу поймете, как движение повлияет на преобразования.
Джон Р. Штром
3
@John: Эй, угадай, у физиков тоже секретное рукопожатие!
Timday
1
@John Хотя я полностью согласен с преимуществами системы, предназначенной для правой руки, вы знаете, что ваше правило рукопожатия (которое каждый должен был выучить в школе) также может использоваться левой рукой для системы, предназначенной для левой руки.
Крис говорит восстановить Монику
@ChristianRau, какая рука вы используете, зависит от того, какую систему координат вы пытаетесь описать, правую или левую.
Джон Р. Штром
10

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

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

Источник: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/

Даниэль Риковски
источник
Это произвольный выбор, только если вы не имеете ни малейшего представления о том, что делает остальной мир, что остальной мир де-факто стандартизирован для правосторонних систем координат для графики.
Джон Р. Штром
1
@ JohnR.Strohm - ты вообще читал ссылку на статью?
Максимус Минимус
Рот-гниль съел эту страницу. Вот последний рабочий снимок: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Макс Барракло
5

Нужно понимать, что ОГРОМНОЕ количество времени программиста было потрачено впустую на преобразование между левосторонней и правой системами координат, и еще больше времени программиста было потрачено на запоминание того, какая система была необходима в данный момент.

Все это прошло, когда правосторонние системы координат стали отраслевым стандартом.

Уже есть достаточно широко используемых систем координат, не удваивая число, вводя вопрос о вручении. См. Minkler & Minkler, «Аэрокосмические системы координат и преобразования» . Если вы занимаетесь аэрокосмическим бизнесом, например, симуляцией полета, вам НУЖНА эта книга.

Я предполагаю, что у Microsoft не было НИКАКОГО в проекте DirectX, который ничего не знал о отраслевых стандартах, не понимал, что там был отраслевой стандарт, и полагал, что это не имеет значения.

Другая возможность, что они знали, что правосторонние системы были отраслевым стандартом, и они сознательно сделали DirectX левосторонним, чтобы затруднить преобразование кода, использующего DirectX для использования OpenGL, не имеет значения. Если бы я обнаружил, что это действительно так, я бы счел необходимым начать новую и, предположительно, недолгую карьеру убийцы топоров в Редмонде.

Джон Р. Штром
источник
Я не хотел выдавать себя за Microsoft в своем вопросе, поэтому я не хотел упоминать о возможности несовместимости с OpenGL, которую они имели в виду.
Greyfade
3
@greyfade: Хорошо, тогда позвольте мне сказать это так. Нет никакой технической причины, чтобы отдавать предпочтение левосторонним координатам правосторонним или наоборот. Однако в настоящее время есть очень и очень веские причины отдавать предпочтение правосторонним координатам, а также выбрасывать, перемещать и ездить за город по железной дороге любому, кто даже шепчет намек на что-либо, используя левосторонние координаты. Это делает это проще?
Джон Р. Штром
Я не знаю, смог бы ли я испытать любое количество праведного негодования по этому поводу. Я работаю с PostScript довольно регулярно, как часть моей работы (где координаты начинаются с [0, 0] как нижний левый угол, а максимальный - в верхнем правом), поэтому преобразование координат - это просто факт жизни здесь.
Инамати
2
Ну, тогда это 100% спекуляция? Почему это помечено как ответ?
Фактор Мистик
3
Бьет меня, это просто бессмысленная болтовня и, по иронии судьбы, как и левосторонняя система координат, многие люди почему-то согласились с ней.
Быстрый Джо Смит
5

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

Это определение имеет основополагающее значение для векторной математики, векторного исчисления и большей части физики. Предположим, что вы пытаетесь симулировать электромагнитные взаимодействия. У вас есть вектор магнитного поля M, и заряженная частица движется в этом поле со скоростью v. Каким образом ускоряется заряд? Легко - в направлении M X v. За исключением того, что некоторые идиоты подумали, что было бы интересно сделать вашу систему отображения левой рукой, поэтому она ускоряется в направлении -M X v.

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

Том
источник
Электромагнетизм - не единственное место, где возникает перекрестный продукт. Это также проявляется в аэродинамике и орбитальной механике. Имитация полета должна иметь дело с этим, и именно здесь физические системы координат и графические системы координат сталкиваются. См. Minkler & Minkler, цитируемый в моем ответе выше.
Джон Р. Штром
@ Том: я не уверен, правда ли это; принять 3 вектора, скажем (1, 0, 0), (0, 1, 0) и (0, 0, 1), выполнение ixj дает k, так как формула для перекрестного произведения хорошо определена, а числа не имеют никакого хиральность / рукость; только человек интерпретирует эти три вектора с некоторой направленностью, даже тогда мы можем принять решение интерпретировать его с обеих сторон, и он все равно будет последовательным, т. е. в левой руке ixj = k будет отсутствовать, а в правой руке ixj = К будет в сторону. Имейте в виду, я тоже правша, но все же это факт.
legends2k
@ legends2k: Да, я думаю, это правда, если вы не хотите, чтобы ваши цифры вообще что-то значили. Как только вы захотите, чтобы ваши числа представляли физическое взаимодействие, или координаты в системе отображения, или вообще что-то вообще, это очень важно.
Том
@ Tom Ты прав, что мы должны придать смысл числам. Это действительно важно. Но это еще не причина говорить, что левая рука находится над правой рукой. Я мог бы придать значение тому, 0,0,1как идти вперед, и это левша, так что 1,0,0 X 0,1,0make 0,0,1левая рука
Thaina
@Tom На самом деле при выполнении физики в левой системе координат формула остается неизменной, M X vно считается, что магнитное поле Mнаправлено в противоположном направлении, потому что это псевдовектор. Вы можете использовать одни и те же уравнения в любой системе: единственное, что меняется, - это ваша интерпретация того, каким образом псевдовекторы «указывают». Собственные векторы, такие как ускорение, всегда будут работать одинаково в любой системе координат. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Оскар Бенджамин,
5

Реальный ответ на раннюю леворукость Direct3D гораздо менее зловещий, чем некоторые из вас предполагают. DirectX получил свое начало, когда Microsoft купила RenderMorphics еще в 1995 году.

В то время стандартным графическим текстом, используемым в офисах RenderMorphics, были «Принципы интерактивной компьютерной графики», разработанные Newmann и Sproul, которые делают все, используя левосторонние координаты. Это та же книга, которую я использовал в колледже. Глядя на код D3D, вы можете даже увидеть их, используя имена переменных, которые соответствуют уравнениям в книге.

Это не какой-то заговор Microsoft. Решение было принято еще до того, как Microsoft вошла в картину.

Стивен Кой
источник
Я согласен с комментарием здесь, что это звучит как городская легенда, но приятно получить вашу личную точку зрения.
Иосия Йодер
3

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

  • Существует довольно широкий консенсус в вычислительной и других областях, чтобы ось Х проходила слева направо (видимо, авиации являются заметным исключением).
  • В математике ось Y направлена ​​вверх. (Кроме того, там, где идут пузыри).
  • На компьютерных дисплеях ось Y направлена ​​вниз (потому что именно так работают экраны CRT, а также потому, что именно в этом порядке большинство сценариев человека размещают строки).
  • Когда вы смотрите на «видимую» сторону поверхности в плоскости X / Y, нормаль должна указывать на зрителя (например, когда вы смотрите отснятый материал со спутника; «высота над уровнем моря» указывает на спутник, а не на центр Земли). Поскольку нормалью для плоскости X / Y является вектор оси Z, из этого следует, что ось Z также должна указывать на зрителя.
  • Когда вы смотрите на 3D-изображения на экране компьютера, точки, которые находятся дальше от зрителя, должны иметь больший Z-компонент. Следовательно, ось Z должна указывать на экран.

Вывод : существует некоторый консенсус для оси X, но для двух других можно аргументировать оба направления, получая две правосторонние и две левосторонние конфигурации, и все они имеют смысл.

tdammers
источник
3

Интересен тот факт.

Direct3D (не DirectX - DirectX также охватывает ввод, звук и т. Д.) На самом деле не имеет левосторонней системы координат.

Он вполне способен поддерживать как RH, так и LH системы. Если вы посмотрите документацию SDK, вы увидите такие функции, как D3DXMatrixPerspectiveFovLH и D3DXMatrixPerspectiveFovRH. Оба работают, и оба производят матрицу проекции, которая может быть успешно использована с вашей системой координат выбора. Черт, вы даже можете использовать столбец-майор в Direct3D, если хотите; это просто библиотека программных матриц, и вы не обязаны ее использовать. С другой стороны, если вы захотите использовать его с OpenGL, вы обнаружите, что он также прекрасно работает и с OpenGL (что, возможно, является убедительным доказательством независимости библиотеки матриц от Direct3D).

Поэтому, если вы хотите использовать систему RH в своей программе, просто используйте версию -RH функции. Если вы хотите использовать систему LH, используйте версию -LH. Direct3D не волнует. Точно так же, если вы хотите использовать систему LH в OpenGL - просто glLoadMatrix матрица проекции LH. Ничто из этого не важно, и это далеко не та огромная проблема, которую вы иногда видите.

Максимус Минимус
источник
0

Никаких технических преимуществ у обеих рук нет, это совершенно произвольно. Оба работают нормально, если вы последовательны.

Из-за преимуществ согласованности в идеале нужно просто «использовать то, что используют все остальные», но во многих случаях это довольно сложно, потому что на практике также нет подавляющего «предпочтительного» соглашения: обе руки широко используются. В лучшем случае, есть некоторая согласованность в определенных сообществах (например, OpenGL).

Поэтому я думаю, что основной ответ на этот вопрос таков: они выбрали то, что выбрали, потому что он чувствовал себя хорошо (без сомнения, у них был некоторый предыдущий опыт работы с этими руками), и не было особых причин не делать этого.

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

snogglethorpe
источник
0

Предоставляя это как дополнительный материал к моему предыдущему ответу здесь. Из старой спецификации OpenGL 1990-х годов:

OpenGL не навязывает леворукость или праворукость ни одной из своих систем координат.

(источник: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Таким образом, поскольку ни D3D, ни OpenGL не навязывают никаких мер, реальный вопрос: почему люди считают это чем-то важным?

Максимус Минимус
источник
1
почему вы разместили это в отдельном ответе? Я имею в виду, вы могли бы отредактировать свой предыдущий ответ, чтобы добавить это, не так ли?
комнат
-1

Я не хочу говорить тебе, но «рука» набора координат на самом деле субъективна - это зависит от того, каким образом ты воображаешь, что смотришь на вещи. Например, из спецификации карты куба OpenGL: если вы представляете, что находитесь внутри куба и смотрите наружу, система координат является левой, если вы думаете, что смотрите снаружи, то это правая рука. Этот простой факт вызывает бесконечное горе, потому что для получения числового правильного ответа все ваши предположения должны быть непротиворечивыми, даже если локально не имеет значения, какое предположение вы делаете.

Спецификация OpenGL официально «нейтральна для рук» и делает все возможное, чтобы избежать этой проблемы, то есть перенести ее на программиста. Однако есть «смена руки» между координатами глаза и координатами клипа: в модели и пространстве глаза, в которых мы смотрим, в пространстве клипа и устройства, которые мы наблюдаем. Я всегда борюсь с последствиями этого, без сомнения, случайного осложнения.

Совместный продукт - наш друг, потому что он позволяет вам генерировать определенную правую или левую трехмерную систему координат из пары векторов. Но какая это рука, зависит от того, какой из этих векторов вы называете «Х».

Томас Шарплесс
источник
3
Перекрестное произведение антикоммутативно. A x B == - B x A. Таким образом, перекрестное произведение определено так, чтобы взять неколлинеарный первый вектор и второй вектор, записанные в этом порядке, и получить третий вектор, нормальный к плоскости, содержащей первый и второй векторы. и направление, подходящее для создания правосторонней системы координат, когда векторы нумеруются в порядке (первый, второй, результат). Если вы решите извращать это, не стесняйтесь, НО БУДЬТЕ ПРЕДУПРЕЖДЕННЫ: Если вы делаете это вокруг меня, вам лучше наслаждаться смолой, перьями и осколками в заднице от поездки на поезде за город.
Джон Р. Штром
Совершенно верно, Джон; но вам все еще приходится сталкиваться с тем фактом, что такое извращение возможно, то есть не существует такой вещи, как «абсолютная правша», а это означает, что вы и я все еще должны правильно понять знаки.
Томас Шарплесс
-3

Я мог бы сказать, что отраслевой стандарт является неправильным с самого начала

Отраслевой стандарт координат на самом деле пришел от координат стола, когда люди рисуют на столе все, что является горизонтальной плоскостью. X - левый / правый, а Y - передний / задний, так что это просто делает Z восходящим, и это было рождено Правосторонней системой координат.

Но Вы знаете, что мы сейчас используем с экраном монитора. Это вертикальная плоскость. X все еще влево / вправо, но Y вместо этого вверх и вниз

Так что же может вызвать Правая система координат? Это заставляет + Z быть назад и -Z быть вперед Что, черт возьми, это? Вверх это +, а Вниз - Право + и Лево - НО Вперед - и Назад + ??? Это так глупо, если мы делаем игру таким персонажем, работающим в 3D мире, но нам нужно минус z, чтобы идти вперед. Вот почему программист игры больше всего ценит DirectX

Захватить стандарт, который пришел со стола, и использовать его на мониторе, во многом неправильно с самого начала. И теперь мы должны признать, что они, OpenGL и Industry, не правы. Они просто используют то, что, по их мнению, им будет удобно, но они не правы, а Правая система координат - это просто ненужное наследие, которое следует выбросить как можно быстрее.

Thaina
источник
2
-1 за невежество. Правая конвенция исходит из физики и математики, в частности, операции с векторным перекрестным произведением, которая является фундаментальной для теории электромагнитного поля и механики. Вычислительная техника приняла его, потому что первоначальное использование компьютеров заключалось в сокращении чисел.
Джон Р. Штром
Должен -1 вместо вашего невежества. Как я уже говорил, физика и математика «настольной координаты» в прежние времена всегда работали на столе, а не на мониторе, поэтому я назвал это «настольной координатой», потому что вы вычисляете физику и математику на горизонтальном столе
Thaina