0

我正在使用 GLSL 渲染一个基本的立方体(由GL_QUADS表面制成)。我想将gl_Vertex顶点中的内容传递到片段着色器中。如果我为此使用gl_FrontColor(vertex shader) 和gl_Color(fragment shader) 一切正常,但在使用普通模式时它不起作用varying(参见下面的代码和图像)。由于某种原因,似乎没有在表面上插值变化。知道在 OpenGL 中可能导致这种情况的原因是什么吗?

glShadeModel设置为GL_SMOOTH- 我现在想不出任何其他可能导致这种效果的东西。

顶点着色器:

#version 120

varying vec4 frontSideValue;

void main() {
   frontSideValue = gl_Vertex;
   gl_Position = transformPos;
}

片段着色器:

#version 120

varying vec4 frontSideValue;

void main() {
   gl_FragColor = frontSideValue;
}

左:不需要的结果,右:正确的插值

4

1 回答 1

2

结果看起来就像您没有使用 [0,1] 范围内的值作为颜色向量。您基本上使用未转换的顶点位置,它可能远远超出此范围。您的立方体似乎以原点为中心,因此您看到的值实际上在 [0,1] 范围内的小过渡作为那个不清晰的带。

使用 builin gl_FrontColor,该值似乎在插值之前被固定。

于 2013-08-21T19:39:52.117 回答