2015-05-19 124 views
0

我使用我的片段着色器来剪辑OpenGL ES 2.0中的对象。一切都运行良好,但是被裁剪的表面的颜色都是黑色的......我无法弄清楚如何改变颜色(理想情况下,我想与对象的其余部分做类似的纹理,我已经包括下面我片段着色器的片段着色器使用discard不呈现任何内容到像素的代码。OpenGL ES 2.0 Android剪辑颜色

 precision mediump float; 

     varying vec2 texCoord; 
     varying vec3 v_Normal; 
     varying vec3 v_Position; 
     varying vec4 originalPosition; 

     uniform sampler2D texSampler2D; 
     uniform vec3 lightPosition; 
     uniform vec4 lightColor; 

     void main() 
     { 
      vec3 L = normalize(lightPosition - v_Position); 
      vec3 N = normalize(v_Normal); 
      float NdotL = max(dot(N,L),0.0); 

     if(originalPosition.y >= 2.0){ 
       discard; 
     }else{ 
       gl_FragColor = NdotL * lightColor * texture2D(texSampler2D, texCoord); 
     } 
     } 
+0

不知道我完全理解这个问题。你是说它在着色器代码中没有'if'/discard'吗?如果你补充说,一切都变黑了? –

+0

好的,这里是我所拥有的图片。 http://imgur.com/KZwpgIP – SyedKamran

+0

我不希望黑色中心顶部的东西...而是我想它是类似于其他纹理的东西。 – SyedKamran

回答

0

,它只是离开它,正是因为它是以前的,所以黑色可能是你清晰的彩色或如果您想为当前丢弃的像素渲染特定颜色,请为您的着色器添加另一个uniform作为剪辑颜色,如下所示:

uniform vec4 clipColor; 

设置它以同样的方式设置了lightColor,然后而不是丢弃裁剪当像素,可以在像素设置为剪辑的颜色:

if(originalPosition.y >= 2.0) { 
    gl_FragColor = clipColor; 
} else { 
    gl_FragColor = NdotL * lightColor * texture2D(texSampler2D, texCoord); 
} 
+0

如果我这样做,我得到这样的[this ...](http://imgur.com/GYxSaan) clipColor是白色的,但是我想要它,以便对象看起来像切片时一样切片/剪切我使用丢弃,如[在此显示](http://imgur.com/KZwpgIP) – SyedKamran

+0

我想要删除第二个图像顶部的黑色表面。 – SyedKamran

+0

您是否可以将所需的剪辑颜色设置为您清晰的颜色并进行渲染? – samgak