基本上,我有一个颜色矩阵定义如下:
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);
答案 0 :(得分:2)
如果不是着色器(疯狂要求,家庭作业或非PC平台?)那么你可以使用纹理阶段或其他东西设置它。你的功能很简单(tex * a + b)所以它应该是可行的,而且不是很有趣。 :-P
答案 1 :(得分:1)
如果您使用的是最新版本的OpenGl,您当然可以使用着色器编程来执行此操作。
如果您不想使用它,但使用的是OpenGL 2.0或更高版本,则可以使用glMatrixMode()
函数将OpenGL的颜色矩阵设置为与所需变换匹配的颜色。