Почему в компьютерной графике используются однородные координаты?


14

Почему в компьютерной графике используются однородные координаты?

В чем была бы проблема, если бы однородные координаты не использовались в матричных преобразованиях?


Ответы:


12

Они упрощают и унифицируют математику, используемую в графике:

  • Они позволяют вам представлять переводы с матрицами.

  • Они позволяют вам представить деление по глубине в перспективных проекциях.

Первый связан с аффинной геометрией. Второй связан с проективной геометрией.


Какие примеры вы ищете? Матрицы перевода и все, что связано с перспективными проекциями, должно быть достаточно легко найти?
Барт

@ Барт, нужна аналогия.

2
Извините, @anonymous, но это ничего мне не говорит. Вам придется использовать больше слов, чтобы объяснить, что именно вы ищете.
Барт

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

5

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

Единое представление позволяет оптимизировать. Аппаратные средства трехмерной графики могут быть специализированы для выполнения умножения матриц на матрицах 4х4. Он может даже специализироваться для распознавания и экономии на умножениях на 0 или 1, потому что они часто используются.

Отказ от использования однородных координат может затруднить использование сильно оптимизированного оборудования в полном объеме. Независимо от того, какая программа распознает, что могут быть использованы оптимизированные инструкции аппаратного обеспечения (обычно это компилятор, но иногда все сложнее) для однородных координат, будет сложно с оптимизацией для других представлений. Он будет выбирать менее оптимизированные инструкции и, следовательно, не использовать потенциал оборудования.

Как были призывы к примерам: Sony PS4 может выполнять массивные умножения матриц. Он настолько хорош, что на какое-то время был распродан, потому что их кластеры использовались вместо более дорогих суперкомпьютеров. Впоследствии Sony потребовала, чтобы их оборудование не использовалось в военных целях. Да, суперкомпьютеры - это военная техника.

Для исследователей стало вполне обычным использовать графические карты для вычисления умножения матриц, даже если графические элементы не используются. Просто потому, что они на порядок лучше, чем процессоры общего назначения. Для сравнения, современные многоядерные процессоры имеют порядка 16 конвейеров (x0.5 или x2 не так уж и много значат), в то время как графические процессоры имеют порядка 1024 конвейеров.

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


«PS4 от Sony может выполнять массовые умножения матриц». Вы имеете в виду процессор Cell PS3, верно? PS4 имеет довольно обычный процессор x86.
Вумпф,

Хотя это хороший ответ, я не думаю, что он отвечает на вопрос ОП и предлагает предположить, что используются однородные координаты, потому что оборудование оптимизировано для этого, довольно однородные координаты более полезны, и в конечном итоге было разработано оборудование. Другим аргументом для vec4s является то, что они выровнены на 128 бит, что делает его более эффективным для чтения на шинах с большой памятью (GPU)
PaulHK

4

дополнение:

(x,y,z,0)=x,y,z0x,y,z

Что касается перспективного преобразования, оно даже позволяет правильно интерполировать без искажения перспективы (в отличие от раннего графического оборудования на ПК).


2

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

Основная причина заключается в том, что однородные координаты используют 4 тривиальные записи в матрицах преобразования (0, 0, 0, 1), что приводит к бесполезному хранению и вычислениям (а также накладным расходам процедур вычисления матриц общего назначения, которые «по умолчанию» используются в этот случай).

Недостатком является то, что вам нужно больше внимания при написании уравнений и потерять поддержку теории матриц, но до сих пор я выжил.


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

1
@ Hurkyl Очевидно. Это делается редко, так как наборы матричных инструментов общего назначения имеются в наличии.
Ив Дауст

@YvesDaoust Не могли бы вы привести пример plain Cartesian formulationили ссылку на ресурс, который описывает его использование в 3D-графике?
Дан

@Dan: используйте y = Ax + b, где A - матрица 3x3 и вектор ba 3x1, вместо y '= Ax', где y ', x' - расширенные векторы, а A - матрица 4x4.
Ив Дауст

@YvesDaoust Итак, вы передаете матрицу 3х3 и вектор 3х1 своим шейдерам вместо матрицы 4х4? Где вы рассчитываете и храните w?
Дэн,

2

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]

Пусть R и S - матрицы вращения и масштабирования, а T - вектор трансляции. В компьютерной графике вам может потребоваться выполнить серию переводов в точку. Вы можете представить, как это может быть сложно.

p=SR(Sp+T)+T

M=TSRTS
p=Mp

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]
Вы должны разработать несколько примеров, чтобы убедить себя, что они действительно дают желаемое преобразование и что вы можете составить серию преобразований, умножив несколько матриц вместе.

p=[xyw]
Q=[1000010000100010]

1

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

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


«Расчеты в аффинных координатах часто требуют делений»: я не понимаю, почему. На самом деле вы вычисляете точно такие же выражения.
Ив Дауст

@ Yves: Я отвечаю на более общую тему «использование в компьютерной графике», а не на конкретный вопрос «преобразования вычислительной матрицы».

@Hurkyl: я тоже. При рендеринге сцены вы вычисляете точно такие же выражения с одинаковым количеством делений (разница заключается в фиктивных терминах с коэффициентом 0).
Ив Дауст

@ Ив: Хм. Я привык делать вычисления, где преобразование обратно в аффинный может быть до некоторой степени отложено; Я уступлю вашему опыту, если вы скажете, что это случается не часто.

-1
  • более простые формулы
  • Меньше особых случаев
  • Объединение и
  • двойственность

2
Ответ очень неясен. Вы должны уточнить по каждому пункту.
Rotem
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.