グーロー シェーディングの部分で、「ポリゴンが隣接している T ジャンクションは視覚的な異常を引き起こす場合があります。一般的に、T ジャンクションは避けるべきです」と書かれていることに気付きました。
T ジャンクションは、下の図の約 3 つのサーフェスでエッジを共有しているように見えます。ポイント A は、異なるサーフェスに属しているため、異なる法線ベクトルを持つ可能性があります。
しかし、Tジャンクションが発生したときの影響と、OpenGLを使用してそれを実装する方法は何ですか? 各長方形の頂点ごとに異なる法線を設定し、シーンにライトを配置してみましたが、接合点 A に異常は見られませんでした。
これが私のコードです:
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_QUADS);
glNormal3f(0, 0,1);
glVertex3f(-5.0f, 5.0f, 0.0f);
glNormal3f(0, 1,1);
glVertex3f(5.0f, 5.0f, 0.0f);
glNormal3f(1, 1,1);
glVertex3f(5.0f, 0.0f, 0.0f);
glNormal3f(0, -1,1);
glVertex3f(-5.0f, 0.0f, 0.0f);
glEnd();
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_QUADS);
glNormal3f(1, 0,1);
glVertex3f(-5.0f, 0.0f, 0.0f);
glNormal3f(1, 2,1);
glVertex3f(0.0f, 0.0f, 0.0f);
glNormal3f(0, 0,1);
glVertex3f(0.0f, -5.0f, 0.0f);
glNormal3f(0, 1, 2);
glVertex3f(-5.0f, -5.0f, 0.0f);
glEnd();
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_QUADS);
glNormal3f(1, 1, 3);
glVertex3f(0.0f, 0.0f, 0.0f);
glNormal3f(0, -2, 5);
glVertex3f(5.0f, 0.0f, 0.0f);
glNormal3f(-1, 1, 1);
glVertex3f(5.0f, -5.0f, 0.0f);
glNormal3f(1, -2, 0);
glVertex3f(0.0f, -5.0f, 0.0f);
glEnd();
ポイント ライトはカメラと同様に (0, 0, 10) にあります。以下の結果には、視覚的な異常はないと思います。たぶん法線は特別なものであるべきですか?
私が何か間違ったことはありますか?これを実現するためのヒントを誰か教えてもらえますか?