【问题标题】:How do I apply a colour transformation matrix to a texture in OpenGL如何将颜色转换矩阵应用于 OpenGL 中的纹理
【发布时间】:2010-10-27 13:39:21
【问题描述】:

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

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

【问题讨论】:

    标签: opengl texturing


    【解决方案1】:

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

    【讨论】:

    • 你知道实现纹理阶段的任何教程,或者至少有一些我可以搜索的所需功能吗?
    • 不,自从我使用旧方法进行多重纹理处理以来已经很久了。我认为 glTexEnv 是正确使用的函数。
    • +1 Marcus 在这点上是对的。检查这个google.se/…
    【解决方案2】:

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

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

    【讨论】:

    • 我不允许使用着色器(外部需求,无法协商),虽然 OpenGL 颜色矩阵的东西看起来正是我所需要的,但我的似乎并不支持目标平台。不管怎么说,还是要谢谢你。还有其他想法吗?
    • +1 这里也是 :) glMatrixMode() 是一个非常好的解决方案。 glMatrixMode(GL_TEXTURE); glLoadMatrix(..);加载的矩阵是 4x4,这正是您所需要的,并且您已经拥有了矩阵的所有信息。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 2010-10-21
    • 1970-01-01
    • 2012-06-02
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多