我正在尝试渲染带有彩色边框的四边形。我正在使用纹理坐标来检测片段是否应被视为边框的一部分。如果它是边框的一部分,则用绿色或黑色进行渲染。
这是我的顶点/法线/ tex坐标。
float vertices[] = {
// posistions // normals // texture coords
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,
0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f,
0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,
0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f,
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,
}
这是我的片段着色器
#version 330 core
in vec3 frag_pos;
in vec3 frag_nor;
in vec2 frag_tex;
out vec4 frag_color;
void main()
{
vec2 origin = vec2(0.01, 0.01);
float width = 1.0 - origin.x * 2.0;
float height = 1.0 - origin.y * 2.0;
if( (frag_tex.x >= origin.x && frag_tex.x < origin.x + width) &&
(frag_tex.y >= origin.y && frag_tex.y < origin.y + height) )
{
frag_color = vec4(0.0);
}
else
{
frag_color = vec4(0.0, 1.0, 0.0, 0.0);
}
}
这就是我的渲染方式
glDisable(GL_DEPTH_TEST);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 6);
在右边,我正在线框模式下用另一个直通片段着色器绘制相同的四边形。
如您所见,移动相机时左四边形闪烁。任何想法如何解决这一问题。
答案 0 :(得分:0)
即使应用2D纹理,该问题仍然存在。为了解决这个问题,我在这些过滤器中使用了Mipmap。
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);