2017-02-03 11 views
0

Я программирую raytracer в GLSL и существует множество алгоритмов для вычисления пересечения лучей-треугольника. Некоторые из них используют детерминанты, некоторые из них, но дело в том, что вычисление детерминанта происходит медленно. Итак, мой вопрос: оптимизирована ли функция детерминанта() на графических процессорах и насколько она быстра по сравнению с умножениями.Насколько быстро функция детерминанта() «GLSL»

+0

Я думаю, что это зависит от видеокарты GPU. Надеюсь, он оптимизирован. – Unick

ответ

3

Поскольку функция GLSL determinant() работает на не более 4x4 матриц, это не приведет к удалению Гаусса или что-то в этом роде. Это несколько умножений и дополнений/вычитаний, как если бы вы писали «разворачиваемую» формулу вручную. Для случая 3x3 это около 12 умножений и 5 сложения/вычитания (с использованием правила Крамера), из которых можно разделить умножения.

Вы можете посмотреть на determinant implementation in the GLM library, GLSL один, вероятно, реализован очень точно, но, конечно же, он может варьироваться между поставщиками/драйверами/графическими процессорами.

+0

Не могли бы вы рассказать, как вы пришли к 18 умножениям? Правило Сарруса использует [12 умножений для матриц 3x3] (https://en.wikipedia.org/wiki/Rule_of_Sarrus)? И реализация glm, которую вы связали, сокращает до 9 умножений. – BDL

+0

Yup, вы правы. Мой счет был неправильным :) –