2012-01-26 3 views
1

特定のピクセルの周りに8ピクセルをサンプリングし、これからスレッシュホールドルーチンで使用する情報の束を計算したいと思っています。適切にサンプリングする方法glslのtexture2DのtextureCoordinate

これは、iOSでglsl頂点シェーダーとフラグメントシェーダーを使用しています。ここで

は、フラグメントシェーダからの私のサンプリングコードです:

p00 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent, -1.0*extent)); 
p01 = texture2D(videoFrame, textureCoordinate+vec2(0.0, -1.0*extent)); 
p02 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent, -1.0*extent)); 
p10 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent, 0.0)); 
p11 = texture2D(videoFrame, textureCoordinate); 
p12 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent, 0.0)); 
p20 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent, +1.0*extent)); 
p21 = texture2D(videoFrame, textureCoordinate+vec2(0.0, +1.0*extent)); 
p22 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent, +1.0*extent)); 

範囲は、現在、20.0に設定ちょうど数、です。私はサンプリングを合理的にローカルで実行したい。

これは正常にコンパイルされますが、私のルーチンの結果に基づいて、これは現在のピクセルの周りのピクセルをサンプリングするのではなく、行に沿ってサンプリングするサンプリングピクセルのようです。

どのように私はこれを解決できますか?

これが動作するかわからないその他の理由は、AppleがiOSのドキュメントに記載していることですが、これは画像単位でパッケージ化され、regionofinterest関数が使用されるべきだと述べています。可能であれば、glslシェーダですべてを維持することをお勧めします。

答えて

0

エクステントが20の場合、現在のピクセルを基準にして8つの基本方向に8ピクセルあり、20ピクセル離れたところでサンプリングされます。 (20ピクセル "北"、20ピクセル "北東"など)1.0なら、あなたが書いたものは現在のピクセルの周りの8ピクセルをサンプリングする必要があります。 (画像の座標が現在のピクセルの座標であると仮定しています。)

+0

私はImageUnitsが異なっていて、あなた自身のImageUnitをiOSに書き込むことはできないので、無視することができますそれ。 – user1118321

+0

こんにちは - それは私が意図したものでした。北、南、東などの20ピクセルをサンプリングすることができます。ただし、iPhone上でシェーダを実行すると、行ではなく列でのみサンプリングされるように見えます。これはGPUがピクセルを処理する順序と何か関係がありますか? –

+0

サンプリング元のオブジェクトのテクスチャ座標は?テクスチャ座標のY値が同じ場合、そのようなことが起こります。 – user1118321

関連する問題