- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到 here在 Gouraud Shading 部分,它说“具有相邻多边形的 T-Junction 有时会导致视觉异常。一般来说,应该避免 T-Junction”。
下图中的 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();
最佳答案
T 形接头对 Gouraud shading 不利和一般的几何学。
首先记住 goraud shading,是一种在固定管道时代使用的光插值方法,其中光在顶点之间进行插值,使顶点的网格分割(数量和连接性)直接影响着色。使用 T 形连接会使最终插值颜色的外观突然不连续(请记住,Gouraud 着色还有其他问题,例如欠采样)。
与 Phong 着色不同,Gouraud 着色直接使用顶点法线,注意不要将 Phong 着色与 Phong 照明混淆,它们是不同的
请注意,您呈现的情况是 T 形接头,但您不会注意到任何着色问题,因为网格不够分割,并且(似乎)您没有使用任何光线。尝试在带有 T 形接头的球体上进行测试。
关于几何 t 型接头被认为是退化的情况。因为在该边/多边形处,几何网格失去一致性,您不再有两条边在它们的末端连接,并且您失去了多边形循环属性(阅读:有向边)。这通常是一个棘手的问题,解决方法可能是对多边形进行三角剖分,以便现在正确连接 T 形接头边缘。
http://en.wikipedia.org/wiki/Gouraud_shading
关于opengl - 在 gouraud shading 中,什么是 T 型连接问题以及如何使用 OpenGL 进行演示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21593786/
我正在尝试使用解释的方法用 Cairo 获得一个 Gouraud 阴影三角形 here . 我有以下代码: cairo_surface_t *surface = cairo_image_surface
据我了解,Gouraud shading 计算每个顶点的光色并对该颜色进行插值,而 Phong shading 为每个像素插值法线并根据该插值计算光色。 然而,当我试图从数学上推导出浅色时,我最终得到
我是 Open GL 的新手,我对 Gouraud 着色有点困惑。我主要处理共面三角形。我的理解是,在 Gouraud 着色中,我必须为三个顶点中的每一个找到法线,然后在插入顶点之前,我必须插入它的法
我读到,在 Gouraud Shading 中,片段的颜色是在顶点着色器中计算的。而在 Phong Shading 中,片段的颜色是在片段着色器中计算的。 在此实现中,我们使用其中哪些? 我不太明白它
我正在使用 OpenGL ES在 low-resolution, embedded device . 我已经使用顶点着色将垂直颜色渐变应用到用作渲染场景背景的大多边形上。我可以在颜色渐变中看到清晰可见
我坚持实现 Gouraud 平滑着色。我遗漏了一些东西,我需要帮助。 首先是漫射照明。为了获得漫射光,我使用了这个公式: Id * Kd * max( dot(N,L), 0.0) 我应该得到我的漫反
我刚开始学习 C++ 和 OpenGL。我正在尝试在 OpenGL 中计算顶点法线。 我知道有一个函数 glNormal3f。但是,我不允许使用该功能。相反,我必须使用代码和 obj 文件来计算顶点法
我试图让一个形状因光源而具有一些阴影,但我希望所有形状都是一种颜色。 我的问题是,无论我多么努力,我似乎都无法在单一颜色模型上获得任何阴影。我已将我的模型简化为单个三角形以使此示例更清晰: #in
我注意到 here在 Gouraud Shading 部分,它说“具有相邻多边形的 T-Junction 有时会导致视觉异常。一般来说,应该避免 T-Junction”。 下图中的 T 形接头似乎是共
我是一名优秀的程序员,十分优秀!