2

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

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);

4

2 回答 2

2

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

于 2009-05-20T20:29:05.220 回答
1

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

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

于 2009-05-20T08:19:28.827 回答