言及したところで、T ジャンクションを削除するための通常の解決策、つまり T ジャンクションに頂点を挿入する方法に従った場合、基本的に貪欲なメッシングの利点が取り消されます。これはすでにここで議論されているようですが、実際の解決策は提案されていません。どうやらそこには、ほとんどのハードウェアでこの問題が十分に反映されていないため、さらに調査する必要があるという議論があったようです。
あなたの場合、ポリゴン エッジの実際のラスタライズ (T ジャンクション エラー) 中に問題が発生するのではなく、頂点ごとの補間に依存するフラグメント シェーダーで値を計算しようとすると、ほとんど問題が発生しないようです。カラー バッファを赤にクリアしているようです。その場合、ラスタライズ中にこれらがサブピクセル T ジャンクション エラーである可能性はさらに低くなります。よく調べてみると、斜めの三角形のエッジに沿っていくつかの不連続性があることに気付きます (顔の半分で法線が反転しているように見えます)。おそらく、この問題は実際には入力頂点属性の大きな不一致に関連しています。最初に顔全体で滑らかな結果が得られるように照明を修正しようとしますが、それが原因で T ジャンクションの問題も発生している可能性があります。
実際、頂点シェーダーを質問に含めることは可能でしょうか? がどのようnormal.w
に計算されるのか興味があります。
アップデート:
私はあなたのコードを OS X に移植しました (あなたが考えるより難しい:P)、同じ結果で:
OpenGL レンダラー文字列: NVIDIA GeForce GT 330M OpenGL エンジン
OpenGL バージョン文字列: 2.1 NVIDIA-1.6.36
OpenGL シェーディング言語のバージョン文字列: 1.20

頂点シェーダーに次の変更を加えた後:
//ノーマル = v_ノーマル;
normal = vec4 (正規化 (v_normal.xyz), v_normal.w);
およびフラグメント シェーダー:
//float light = normal.w * max (0.15*dot(normal.xyz, vec3 (1,1,1)), 0.0);
float light = normal.w * max (1.5*dot(normal.xyz, vec3 (1,1,1)), 0.0);
キラキラが消え、これが結果です。

ただし、アンビエント オクルージョンの用語は、三角測量された顔の半分でまだ逆になっているようです。