如何在OpenGL中将颜色转换矩阵应用于纹理

时间:2009-05-20 08:08:49

标签: opengl texturing

基本上,我有一个颜色矩阵定义如下:

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的新手,所以发布一些代码也很有帮助,或者指向一个教程甚至是所需的函数/参数。

由于

编辑:我应该提到的另一件事是,纹理包含预乘的alpha,因此混合设置为glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

2 个答案:

答案 0 :(得分:2)

如果不是着色器(疯狂要求,家庭作业或非PC平台?)那么你可以使用纹理阶段或其他东西设置它。你的功能很简单(tex * a + b)所以它应该是可行的,而且不是很有趣。 :-P

答案 1 :(得分:1)

如果您使用的是最新版本的OpenGl,您当然可以使用着色器编程来执行此操作。

如果您不想使用它,但使用的是OpenGL 2.0或更高版本,则可以使用glMatrixMode()函数将OpenGL的颜色矩阵设置为与所需变换匹配的颜色。