Реализация разреженной матричной конструкции и умножения в OpenGL ES - PullRequest
0 голосов
/ 04 мая 2011

Я гуглил, но не нашел ответа, который подходит мне для OpenGL.

Я хочу построить разреженную матрицу с одной диагональю и около 9 вне диагоналей. Эти диагонали не обязательно находятся рядом с главной диагональю, и они оборачиваются вокруг. Каждая диагональ представляет собой изображение в главном формате строки, то есть вектор размером NxM.

Размер матрицы составляет (NxM) x (NxM)

Мой вопрос таков: После некоторого возни с математикой я пришел к основным элементам своей операции. Он включает в себя пиксельное умножение двух изображений (БЕЗ ограничения значения результата, т. Е. Так, чтобы оно могло быть выше 1 или ниже 0), сохраняя полученное изображение, а затем добавляя несколько результирующих изображений (ЖЕ, как и выше).

Как я могу умножать и добавлять изображения по пикселям в OpenGL? Это проще в 1.1 или 2.0? Приведет ли использование текстур к резкому увеличению результатов между 0 и 1? Это максимизирует использование ядер GPU?

1 Ответ

1 голос
/ 04 мая 2011

Чтобы иметь возможность хранить значения за пределами диапазона [0-1], вам придется использовать текстуры с плавающей запятой. OpenGL ES 1.1 не поддерживается, а для OpenGL ES 2.0 это необязательное расширение (см. Другой SO вопрос ).

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

В OpenGL ES 1.1 вы можете использовать вызов glTexEnv, чтобы установить, как пиксели из разных текстурных блоков должны объединяться. Затем вы можете использовать «модулировать» или «добавить», чтобы умножить / добавить значения. Результат будет ограничен до [0,1] диапазона.

...