Почему в компьютерной графике используются однородные координаты?
В чем была бы проблема, если бы однородные координаты не использовались в матричных преобразованиях?
Почему в компьютерной графике используются однородные координаты?
В чем была бы проблема, если бы однородные координаты не использовались в матричных преобразованиях?
Ответы:
Они упрощают и унифицируют математику, используемую в графике:
Они позволяют вам представлять переводы с матрицами.
Они позволяют вам представить деление по глубине в перспективных проекциях.
Первый связан с аффинной геометрией. Второй связан с проективной геометрией.
Это в названии: однородные координаты хорошо ... однородны. Быть однородным означает равномерное представление вращения, перемещения, масштабирования и других преобразований.
Единое представление позволяет оптимизировать. Аппаратные средства трехмерной графики могут быть специализированы для выполнения умножения матриц на матрицах 4х4. Он может даже специализироваться для распознавания и экономии на умножениях на 0 или 1, потому что они часто используются.
Отказ от использования однородных координат может затруднить использование сильно оптимизированного оборудования в полном объеме. Независимо от того, какая программа распознает, что могут быть использованы оптимизированные инструкции аппаратного обеспечения (обычно это компилятор, но иногда все сложнее) для однородных координат, будет сложно с оптимизацией для других представлений. Он будет выбирать менее оптимизированные инструкции и, следовательно, не использовать потенциал оборудования.
Как были призывы к примерам: Sony PS4 может выполнять массивные умножения матриц. Он настолько хорош, что на какое-то время был распродан, потому что их кластеры использовались вместо более дорогих суперкомпьютеров. Впоследствии Sony потребовала, чтобы их оборудование не использовалось в военных целях. Да, суперкомпьютеры - это военная техника.
Для исследователей стало вполне обычным использовать графические карты для вычисления умножения матриц, даже если графические элементы не используются. Просто потому, что они на порядок лучше, чем процессоры общего назначения. Для сравнения, современные многоядерные процессоры имеют порядка 16 конвейеров (x0.5 или x2 не так уж и много значат), в то время как графические процессоры имеют порядка 1024 конвейеров.
Это не столько ядра, сколько конвейеры, которые допускают фактическую параллельную обработку. Ядра работают на темы. Потоки должны быть запрограммированы явно. Трубопроводы работают на уровне инструкций. Чип может распараллеливать инструкции более или менее самостоятельно.
дополнение:
Что касается перспективного преобразования, оно даже позволяет правильно интерполировать без искажения перспективы (в отличие от раннего графического оборудования на ПК).
Как личный вкус, я всегда воздерживался (когда это возможно) от использования однородных координат и предпочитал простую декартову формулировку.
Основная причина заключается в том, что однородные координаты используют 4 тривиальные записи в матрицах преобразования (0, 0, 0, 1), что приводит к бесполезному хранению и вычислениям (а также накладным расходам процедур вычисления матриц общего назначения, которые «по умолчанию» используются в этот случай).
Недостатком является то, что вам нужно больше внимания при написании уравнений и потерять поддержку теории матриц, но до сих пор я выжил.
plain Cartesian formulation
или ссылку на ресурс, который описывает его использование в 3D-графике?
w
?
Пусть R и S - матрицы вращения и масштабирования, а T - вектор трансляции. В компьютерной графике вам может потребоваться выполнить серию переводов в точку. Вы можете представить, как это может быть сложно.
Расчеты в аффинных координатах часто требуют делений, которые дороги по сравнению с сложениями или умножениями. Обычно не требуется деления при использовании проективных координат.
Использование проективных координат (и, в более общем смысле, проективной геометрии) также приводит к исключению особых случаев, делая все более простым и однородным.