Как применить матрицу преобразования цвета к текстуре в OpenGL - PullRequest
2 голосов
/ 20 мая 2009

По сути, у меня есть цветовая матрица, определенная так:

struct ColourXForm
{
   float4 mul;
   float4 add;

   float4 Transform(float4 colour)
   {
      return float4(
         colour.x * mul.x + add.x,
         colour.y * mul.y + add.y,
         colour.z * mul.z + add.z,
         colour.w * mul.w + add.w);
   }
}

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

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

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

Спасибо

Edit: еще одна вещь, которую я должен упомянуть, это то, что текстура содержит предварительно умноженную альфа, поэтому смешивание настроено как glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Ответы [ 2 ]

2 голосов
/ 21 мая 2009

Если бы не шейдеры (сумасшедшие требуют этого, домашняя работа или не-компьютерная платформа?), То вы могли бы настроить это, используя этапы текстуры или что-то в этом роде. Ваша функция довольно проста (tex * a + b), поэтому она должна быть выполнимой, хотя и не очень веселой. : -Р

1 голос
/ 20 мая 2009

Если вы используете достаточно свежую версию OpenGl, вы, конечно, можете сделать это с помощью пользовательского шейдерного программирования.

Если вы не хотите использовать это, но используете OpenGL 2.0 или выше, вы можете использовать функцию <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml" rel="nofollow noreferrer">glMatrixMode()</a>, чтобы установить цветовую матрицу OpenGL в соответствии с желаемым преобразованием.

...