Glsl 丢弃着色器中的特定面

Glsl 丢弃着色器中的特定面,glsl,Glsl,我试图通过使用discard关键字隐藏特定的面(假设面为0) 顶点着色器: uniform float v_triangleId; varying vec3 normal; void main() { v_triangleId = floor(gl_VertexID / 3.0); normal = normalize(gl_NormalMatrix * gl_Normal); gl_Position = ftransform(); } 像素着色器: uniform fl

我试图通过使用
discard
关键字隐藏特定的面(假设面为0)

顶点着色器:

uniform float v_triangleId;
varying vec3 normal;

void main() {
   v_triangleId = floor(gl_VertexID / 3.0);

   normal = normalize(gl_NormalMatrix * gl_Normal);
   gl_Position = ftransform();
}
像素着色器:

uniform float v_triangleId;

void main(void)
{   
    float diff = abs(v_triangleId - 0); // I just want to hide face 0
    if (diff < 0.01) {
        discard;
    }
}
uniformfloat v_triangleId;
真空总管(真空)
{   
float diff=abs(v_triangleId-0);//我只想隐藏面0
如果(差值<0.01){
丢弃;
}
}

但是,在这种情况下,所有面都被隐藏,而不仅仅是一个面。我想知道出了什么问题。

“我正试图隐藏一个特定的面”您是否只打算放弃使用前3个顶点构建的面?或者你还有其他的标准吗?@Nicolas我的目的是隐藏所有有脸索引的脸。(即
v_triangleId
应该是一个数组)。但为了简化这个问题,我现在假设隐藏面只是前3个顶点。这是VS可以计算的标准吗?别忘了考虑面可以共享顶点。@Nicolas我想是的。以下是我的答案: