2

OpenGL に慣れていないため、この小さな詳細を理解できないようです。境界要素ではなく、テクスチャの繰り返しに関する情報を見つけ続けています。

テクスチャを拡大すると、端のエッジ ピクセルが、作業中のサーフェス ビューのエッジまで繰り返されます。テクスチャがビューよりも小さい場合は、これらのピクセルの背後にある明確な背景を確認したいと思います。

コードのこれらの行の周りのテクスチャに属性を設定することに関係していると推測できますが、目的の結果を得るためにどのような変更を加える必要があるかを理解するのに十分ではありません。

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

その望ましい結果を得るための(おそらく迅速な変更)トピックの補佐は、私の現在の問題を解決します。

テクスチャの背後にある繰り返しのエッジ ピクセル

4

2 に答える 2

3

わかりました、説明してみます。

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

これGL_TEXTURE_MIN_FILTERは、テクスチャのビットマップの寸法が描画面の対応する寸法よりも大きい場合に適用されるフィルタです。GL_TEXTURE_MAG_FILTER反対です。したがって、これは問題ではありません。

GL_TEXTURE_WRAP_Sただし、GL_TEXTURE_WRAP_Tテクスチャ座標が 0.0 から 1.0 の範囲外にある場合の処理​​を定義します (両方の軸について)。両方とも に設定されていGL_CLAMP_TO_EDGEます。これは基本的に、テクスチャ座標が < 0 の場合は 0 を使用し、> 1 の場合は 1 を使用することを意味します。

GL_REPEATただし、これはどちらがテクスチャを繰り返すか、GL_MIRRORED_REPEATどちらが繰り返して鏡像化するかにしか変更できません。したがって、これらの設定を変更しても問題を解決することはできません。範囲外の場合に破棄する設定はありません。必要だと思います。よろしければ、ドキュメントでこれについて詳しく読むことができます: http://www.khronos.org/opengles/sdk/docs/man/

どのようにズームするのか正確にはわかりませんが、私の知る限り、通常はテクスチャ座標を変更する必要はありません。この方法を維持したい場合は、少しハックを試すことができます-フラグメントシェーダーで、設定する前に追加できますgl_FragColor

   if (tc.x < 0.0 || tc.x > 1.0 || tc.y < 0.0 || tc.y > 1.0 ) 
     discard;

tc はテクスチャ座標です。したがって、テクスチャ座標が 0 ~ 1 の範囲外の場合、フラグメントは破棄されます。

それはきれいな解決策ではありませんが、うまくいくはずです。

于 2013-07-01T19:18:09.047 に答える
2

ブライアンバーグのアプローチは機能しますが、テクスチャ座標を変更するのではなく、画像をレンダリングするクワッドをスケーリングすると、よりクリーンでパフォーマンスの高いソリューションになります。常に画像がクワッドに正確にフィットするようにするため、テクスチャ座標を変更する必要はありません。

于 2013-07-02T08:48:21.653 に答える