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を初めて使用するので、コードを投稿したり、チュートリアルや必要な関数/パラメーターを紹介したりすると便利です。

ありがとう

編集:もう1つ言及する必要があるのは、テクスチャに事前に乗算されたアルファが含まれているため、ブレンドは次のように設定されていることです。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 に答える