Opengl着色器为正方形的边缘着色

Opengl shader to colour edges of square

我有一个显示正方形的基本 opengl 应用程序,正方形颜色是使用插值法确定的。在我的片段着色器中,我试图检测像素是否沿着正方形的边缘之一运行,如果是,则将其着色为黑色。

这是我的顶点着色器。

#version 330

layout (location = 0) in vec3 pos;

out vec4 vertColour;
uniform mat4 model;
uniform mat4 projection;


void main()
{
  gl_Position = projection * model * vec4(pos.x, pos.y, pos.z, 1.0);
  vertColour = vec4(clamp(pos, 0.0f, 1.0f), 1.0f);
}

还有我的片段着色器

#version 330

out vec4 colour;
in vec4 vertColour;

void main()
{
  float x = gl_FragCoord.x;
  float y = gl_FragCoord.y;
  float z = gl_FragCoord.z;
  if((x ==  1 && y ==  1) ||
  (x == -1 && y == -1) ||
  (x ==  1 && y == -1) ||
  (x == -1 && y ==  1) ||
  (x ==  1 && z ==  1) ||
  (x == -1 && z == -1) ||
  (x == -1 && z ==  1) ||
  (x ==  1 && z == -1) ||
  (y ==  1 && z ==  1) ||
  (y == -1 && z == -1) ||
  (y ==  1 && z == -1) ||
  (y == -1 && z ==  1))
  {
    colour = vertColour;
  } else {
    colour = vertColour;
  }
}

这是我用来形成正方形的索引和顶点。

int[] indices = {
        0,1,4,
        4,5,1,
        1,0,3,
        3,2,1,
        1,5,6,
        6,1,2,
        2,6,7,
        7,6,5,
        5,4,7,
        7,2,3

};
float[] vertices = {
      -1.0f, -1.0f, -1.0f,
      -1.0f, -1.0f,  1.0f,
       1.0f, -1.0f,  1.0f,
       1.0f, -1.0f, -1.0f,
      -1.0f,  1.0f, -1.0f,
      -1.0f,  1.0f,  1.0f,
       1.0f,  1.0f,  1.0f,
       1.0f,  1.0f, -1.0f,
};

实际上,我正在尝试确定当前片段的位置是否位于每条边的最大值/最小值处。这是我在尝试大纲之前看到的

当我尝试应用轮廓时,整个立方体都变黑了。我假设片段着色器中的逻辑有问题,但未能发现问题。欢迎任何帮助。

gl_FragCoord.xy包含window坐标,单位为像素(水平和垂直片段)。左下坐标为(0.5, 0.5) 右上坐标为(width-0.5, height-0.5).
如果要获取立方体上片段的顶点坐标,需要将pos从顶点传递给片段着色器:

顶点着色器:

layout (location = 0) in vec3 pos;
out vec3 vertPos;

void main()
{
    vertPos = pos;

    // [...]
}

片段着色器:

in vec3 vertPos;

// [...]