0

実行時にグレースケールフィルターを作りたい このコードで成功

NSString *const kGPUImageLuminanceFragmentShaderString = SHADER_STRING
(
  precision highp float;

   varying vec2 textureCoordinate;

    uniform sampler2D inputImageTexture;

    const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);
   void main()
  {     
   float luminance = dot(texture2D(inputImageTexture, textureCoordinate).rgb, W);
    gl_FragColor = vec4(vec3(luminance), 1.0);
  }
 );

私が今欲しいのは、各ポイントの RGB 値にアクセスし、それに私のアルゴリズムを適用してから、私のアルゴリズムに基づいてポイントの RGB 値を変更することです

言い換えれば私の質問

ポイントの RGB 値にアクセスし、同じポイントの RGB 値を設定したい

4

2 に答える 2

1
vec3 pixel =  texture2D(inputImageTexture, textureCoordinate).rgb;
 float red = pixel.r;
 float green = pixel.g;
 float blue = pixel.b;


    .
    . manipulate the values as needed
    .

    gl_FragColor = vec4(red, green, blue, 1.0); 

または、元のピクセルのアルファを維持するには、次のようにします。

vec4 pixel =  texture2D(inputImageTexture, textureCoordinate).rgba;
.
.
.

    gl_FragColor = vec4(red, green, blue, pixel.a); 
于 2012-08-23T14:59:38.797 に答える
0

ポイントでピクセルを意味する場合、探しているのはフレームバッファオブジェクト(FBO)だと思います。シーンを画像にレンダリングし、それをシェーダーにフィードバックして、必要なことを実行し、それを最終出力としてレンダリングできます。

于 2012-08-23T14:55:03.343 に答える