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

如何在OpenGL中将颜色变换矩阵应用于纹理,opengl,texturing,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, colo

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

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);
   }
}
我想做的是,当纹理渲染到屏幕上时,对纹理中的每个像素应用函数“Transform”。实际上,我不能修改纹理,因为不同的颜色变换矩阵可以在一帧中多次应用于同一图像(在渲染纹理之前,我不知道将应用什么),我也不能使用着色器

考虑到这些要求,有没有办法做到这一点?(到目前为止,我唯一的想法是多重纹理,但不知道如何应用它)

另外,我是OpenGL新手,所以发布一些代码,或者给我指点教程,甚至是所需的函数/参数,也会很有帮助

谢谢


编辑:我还要提到的一点是,纹理包含预乘的alpha,因此混合设置为
glBlendFunc(GL_One,GL_One减去SRC_alpha)

如果您使用的是足够新的OpenGl版本,那么您当然可以通过用户着色器编程来实现这一点


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

如果不是着色器(疯狂的需求、家庭作业或非PC平台?),那么您可能可以使用纹理阶段或其他方法进行设置。您的函数非常简单(tex*a+b),所以它应该是可行的,尽管不是很有趣-P

我不允许使用着色器(外部需求,无法协商),尽管OpenGL颜色矩阵看起来正是我所需要的,但我的目标平台似乎不支持它。无论如何,谢谢你。还有其他想法吗?+1:)glMatrixMode()是一个非常好的解决方案。glMatrixMode(GL_纹理);glLoadMatrix(…);加载的矩阵是一个4x4,这正是您所需要的,并且您已经拥有了矩阵的所有信息。您知道任何实现纹理阶段的教程,或者至少一些我可以搜索的所需函数吗?不,自从我使用旧方法进行多文本处理以来,已经有很多年了。我认为glTexEnv是正确使用的函数。+1 Marcus在这方面是正确的。检查这个