Glsl 使用gl_FragCoord在四边形中创建孔

Glsl 使用gl_FragCoord在四边形中创建孔,glsl,webgl,Glsl,Webgl,我正在学习WebGL,并想做以下工作: 使用片段着色器创建一个带有方孔的三维四边形 看起来我需要基于gl_FragCoord适当地设置gl_FragColor 因此,我应该: 将gl_FragCoord从窗口坐标转换为模型坐标,执行适当的几何体检查,并设置颜色 或 b以某种方式将孔信息从顶点着色器传递到片段着色器。可能使用纹理坐标。这方面我不清楚 我对实现上述任何一个都不太清楚,所以我会给出一些编码提示 我的背景是一个OpenGL老前辈,他没有跟上新的着色语言范例,现在正试图赶上 2011年3月

我正在学习WebGL,并想做以下工作:

使用片段着色器创建一个带有方孔的三维四边形

看起来我需要基于gl_FragCoord适当地设置gl_FragColor

因此,我应该:

将gl_FragCoord从窗口坐标转换为模型坐标,执行适当的几何体检查,并设置颜色

b以某种方式将孔信息从顶点着色器传递到片段着色器。可能使用纹理坐标。这方面我不清楚

我对实现上述任何一个都不太清楚,所以我会给出一些编码提示

我的背景是一个OpenGL老前辈,他没有跟上新的着色语言范例,现在正试图赶上

2011年3月27日编辑:

我已经能够基于tex coord提示成功地实现上述功能。我在下面的链接中写下了这个例子:


最简单的方法是使用纹理坐标。只需将corrd作为一个额外的属性数组提供,然后使用不同的属性传递到片段着色器。着色器应包含以下内容:

顶点:

attribute vec3 aPosition;
attribute vec2 aTexCoord;

varying vec2 vTexCoord;

void main(){
     vTexCoord=aTexCoord;
     .......
}
片段:

varying vec2 vTexCoord;

void main(){
     if(vTexCoord.x>{lower x limit} && vTexCoord.x<{upper x limit} && vTexCoord.y>{lower y limit} && vTexCoord.y<{upper y limit}){
discard; //this tell GFX to discard this fragment entirly
}
.....
}

上面有点混乱-那么是否存在与某种alpha通道有关的真实纹理,或者我们只是使用将由片段着色器插值的纹理坐标,但没有设置实际纹理?谢谢。明白了-我现在明白你说的了。不需要设置纹理,只需要一个带有纹理坐标的顶点数组。很好,谢谢!