我在Gouraud阴影部分注意到here,它说:“带有相邻多边形的T型结有时可能会导致视觉异常。通常应避免T型结”。

看起来T形结大约是下面共享图片中的三个表面的边缘,并且点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)中。我认为以下结果没有视觉异常。也许常态应该有点特别吗?

我做错了什么吗?谁能给我一些暗示来实现这一目标?

最佳答案

通常,T型结对Gouraud shading和几何形状不利。

首先请记住,goraud阴影是固定管线时代中使用的光插值方法,在该固定管线时代中,光线沿顶点插值,使顶点的网格镶嵌(数量和连通性)直接影响阴影。具有t接点将使最终插值的颜色看起来突然不连续(请记住,Gouraud阴影还存在其他问题,例如欠采样)。

与Phong阴影不同,Gouraud阴影直接使用顶点法线,并且请注意,不要将Phong阴影与Phong照明混淆,它们是不同的

请注意,当前呈现的是T形结,但是您不会注意到任何着色问题,因为网格没有被充分分割,并且(似乎)您没有使用任何灯光。尝试在带有T型结的球面上进行测试。

关于几何t型接头被认为是退化的情况。因为几何网格在该边/多边形处失去一致性,所以不再在其末端连接两个边,并且失去了多边形循环属性(读取:有向边)。通常,这是一个棘手的问题,一个解决方案是对多边形进行三角剖分,以便现在可以正确地连接T型接合边。

http://en.wikipedia.org/wiki/Gouraud_shading

关于opengl - 在gouraud底纹中,什么是T接缝issure以及如何使用OpenGL进行演示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21593786/

10-10 09:12