1

OpenGL ES でシェーダーを使用する方法を学んでいます。

例として: 現在のビデオ フレームを取得してグレースケールにするプレイグラウンド フラグメント シェーダーを次に示します。

varying highp vec2 textureCoordinate;

uniform sampler2D videoFrame;

void main() {
    highp vec4 theColor = texture2D(videoFrame, textureCoordinate);
    highp float avrg = (theColor[0] + theColor[1] + theColor[2]) / 3.0;
    theColor[0] = avrg; // r
    theColor[1] = avrg; // g
    theColor[2] = avrg; // b
    gl_FragColor = theColor;
}

theColor現在のピクセルを表します。この同じ座標で前のピクセルにもアクセスできると便利です。

好奇心のために、現在のピクセルの色を前のレンダリング フレームのピクセルの色に加算または乗算したいと思います。

以前のピクセルを保持し、フラグメント シェーダーに渡して何かを行うにはどうすればよいですか?

注: iPhone では OpenGL ES 2.0 です。

4

2 に答える 2

5

フレームバッファ オブジェクト (FBO) を使用して、前のフレームをテクスチャにレンダリングする必要があります。その後、フラグメント シェーダでこのテクスチャを読み取ることができます。

于 2011-07-25T15:58:39.290 に答える