我注意到了这里在Gouraud阴影部分,它说:“与相邻多边形的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)以及照相机中。我认为下面的结果没有视觉异常。也许法线应该有点特别?
我做错什么了吗?有人能给我一些提示吗?

发布于 2014-02-06 17:56:51
T-连接对于Gouraud遮阳和一般的几何都是不好的.
首先要记住,戈罗阴影是一种用于固定流水线时代的光插值方法,光是通过顶点进行插值,使得顶点的网格化(数目和连通性)直接影响到阴影。有t-接合点会使最终插值的颜色出现突然的不连续性(请记住,Gouraud阴影还有其他问题,比如采样不足)。
Gouraud阴影直接使用与Phong阴影不同的顶点法线,并且注意不要将Phong阴影与Phong照明混为一谈,它们是不同的
注意,你呈现的情况是一个t-交界处,但你不会注意到任何阴影问题,因为网格是不够的,而且(似乎)你没有使用任何光。试着在带t结的球体上进行测试。
关于几何,t-结被认为是一个退化的情况。因为在该边/多边形,几何网格失去一致性,您不再有两个边连接在他们的两端,你失去多边形循环属性(读:有向边)。这通常是一个棘手的问题,一个解决办法可以是三角剖分的多边形,使t-juction边现在正确连接。
遮阳
发布于 2014-04-11 16:30:57
你越是处理这种情况,它的核心问题就会变得越清楚。有了一个坚实的例子,并且花了一些时间看它,你很可能会说“啊哈!”然后它就会点击。
从理论上讲,这个问题通常被描述为这样一种情况,即t形的相邻区域中的像素是基于独立的、有时是不同的输入来阴影的(t形的法线相对于相邻的法线)。你可以夸大这个问题作为一个例子,将t-vert的正常值设置为与相邻的verts的法线(例如)非常不同的东西。与他们的平均水平大不相同)。
然而,在practice中,除了角的情况外,您通常处理的是顶点间法线的平滑渐变,所以问题更加微妙。因此,我以不同的方式看待这个问题:作为一个样本数据传播问题。这种情况导致在样本之间进行插值,而不以同质的方式将样本数据传播到表面。在您的示例中,t-vert示例输入不是向上传播的,而是左/右/向下传播的。这就是为什么t-顶点是有问题的,它们代表了网格网络中的不连续性,导致了这样的问题。
你可以想象它在你的脑海中,在表面上的每一个正常点的光值,然后考虑得到的颜色将是在特定的光照位置的脸。用你的例子,但是用一个更平滑的法线层次,你会看到一个长的线性插值的颜色。但是对于下面两张脸,你会看到由t-顶点法线驱动的两个线性的颜色插值。根据光的角度,t-顶点法线可以接收到与相邻法线不同的光量。这将把它上面和下面的颜色插值分开,你会看到一个阴影缝。
为了举例说明,我只使用一种颜色,调整法线,使它们形成更均匀的相对角度分布(类似于下面的集合),然后使用不同的光照位置(特别是靠近t-顶点的位置)查看。
top left normal: [-1, 1, 1]
top right normal: [1, 1, 1]
middle left normal: [-1, 0, 1]
t-vert normal: [0, 0, 1]
middle right normal: [1, 0, 1]
bottom left normal: [-1, -1, 1]
bottom middle normal: [0, -1, 1]
bottom right normal: [1, -1, 1]因为这是一个由采样数据的不均匀传播所驱动的问题--而且传播就是插值所做的--顺便说一句,其他插值技术(比如Phong阴影)也会出现类似的异常。
https://stackoverflow.com/questions/21593786
复制相似问题