FBOピクセルデータを取得してから、グレースケール化し、画像をそのFBOに戻す方法はありますか?
1 に答える
固定関数パイプライン (ES 1.1) を使用glReadPixels
している場合は、GPU からピクセル データをプルして直接処理できるようにするために使用できます。次に、その結果からテクスチャを作成し、新しいテクスチャにマップされたクワッドをレンダリングする必要があります。しかし、これは結果を達成するためのかなり非効率的な方法です。
シェーダー (ES 2.0) を使用している場合は、これを GPU で直接実行できるため、高速です。つまり、次のいくつかの方法のいずれかで、フラグメント シェーダーでグレースケーリングを行うことを意味します。
レンダリングが単純な場合は、通常のフラグメント シェーダーにグレースケール演算を追加し、ブール値の均一変数で切り替えることができます。
通常のパイプラインでグレースケールをいじりたくない場合は、オフスクリーン FBO (テクスチャ) に通常どおりレンダリングし、計算を行う特別なグレースケール テクスチャリング シェーダを使用して、そのテクスチャのコンテンツを画面の FBO にレンダリングできます。サンプリングされたテクセル。
必要な場合のグレースケールの計算は次のとおりです: https://web.archive.org/web/20141230145627/http://bobpowell.net/grayscale.aspx基本的に、RGB 値をその式に代入し、結果の輝度値を使用します。すべてのチャネルで。