2つの三角形を結合して線分を描いています。三角形の各頂点は、さまざまな変数(vec3 vBC)として固有の座標セットを取得します。フラグメントシェーダでは、この変数の値は補間された値であり、三角形内のフラグメントの位置を示しています。この値を使用して、フラグメントが三角形のエッジからどれだけ離れているかを判断します。これは、エッジでアンチエイリアスを行うために使用されます。私はこれらのよう辺BCとDEにアンチエイリアスを適用しておりませんので、これがあるのRect 1のギザギザが内部エッジである OpenGLの重心座標を使用したアンチエイリアス線
お知らせ:
は、下の画像に問題を参照してください。長さxは非常に小さいので、頂点CおよびDに近いエッジBCおよびDEのギザギザのエッジが見えるようになります。これらのぎざぎざのエッジは、長さxよりも長さが長い。これらの2つのエッジ(BCとDE)にアンチエイリアスを適用すると、Rect 2が表示されます。これは、アンチエイリアス処理中のスムージング処理が0.0のアルファ値をエッジの上または近くにあるフラグメントに割り当てるためです。したがって、アンチエイリアス処理されたBCとDEは、内側に白い対角線を導入します。私の質問はどのように私はおそらくRect 1を滑らかにすることができますか?
フラグメントシェーダ:シェーダコードで
varying vec4 DestinationColor;
varying vec2 TexCoordOut;
varying vec3 vBC;
uniform sampler2D Texture;
uniform int TexEnabled;
float edgeFactor();
void main() {
if (TexEnabled == 1) {
gl_FragColor = texture2D(Texture, TexCoordOut) * DestinationColor;
} else{
gl_FragColor = vec4(DestinationColor.xyz, edgeFactor());
}
}
float edgeFactor() {
vec3 d = fwidth(vBC);
vec3 a3 = smoothstep(vec3(0.0), d*1.5, vBC);
return a3.y;
};
、a3.y座標即ちYの組の2番目の値(頂点DまたはCと断片との間の距離)を意味し、D 1(0表します1,0)、最初の0と2番目の0はそれぞれxとzを表します。
"* Rect 1のギザギザのエッジに注意してください。*"いいえ、私はちょうど2つのコーナーに若干の汚れがある黒い矩形を見ます。 –
これは私がopenglから得たオリジナルの出力ではありません。私はちょうどギザギザのエッジの位置を表示しようとしました。これらの「汚れ」は、実際にはBCおよびDEの鋭いエッジである。私はあなたがラインBCとDE – asad
のギザギザのエッジを見ることができることを願っています "*私はOpenGLから取得した元の出力ではありません*"だから、あなたはあなたが提供したイメージには表示されていない、ギザギザのエッジについて質問しています。 –