我在 Gouraud 着色部分注意到这里,它说“具有相邻多边形的 T 形路口有时会导致视觉异常。一般而言,应避免使用 T 形路口”。
看起来T-junction是下图中的三个表面共享边缘,并且点A可能具有不同的法向量,因为它属于不同的表面。
但是当T-junction发生时会产生什么影响以及如何使用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) 以及相机中。我认为下面的结果没有视觉异常。也许法线应该有点特别?
我做错了什么吗?谁能给我一些提示来实现这一点?