Glsl 使用gl_FragCoord在四边形中创建孔
我正在学习WebGL,并想做以下工作: 使用片段着色器创建一个带有方孔的三维四边形 看起来我需要基于gl_FragCoord适当地设置gl_FragColor 因此,我应该: 将gl_FragCoord从窗口坐标转换为模型坐标,执行适当的几何体检查,并设置颜色 或 b以某种方式将孔信息从顶点着色器传递到片段着色器。可能使用纹理坐标。这方面我不清楚 我对实现上述任何一个都不太清楚,所以我会给出一些编码提示 我的背景是一个OpenGL老前辈,他没有跟上新的着色语言范例,现在正试图赶上 2011年3月27日编辑: 我已经能够基于tex coord提示成功地实现上述功能。我在下面的链接中写下了这个例子:Glsl 使用gl_FragCoord在四边形中创建孔,glsl,webgl,Glsl,Webgl,我正在学习WebGL,并想做以下工作: 使用片段着色器创建一个带有方孔的三维四边形 看起来我需要基于gl_FragCoord适当地设置gl_FragColor 因此,我应该: 将gl_FragCoord从窗口坐标转换为模型坐标,执行适当的几何体检查,并设置颜色 或 b以某种方式将孔信息从顶点着色器传递到片段着色器。可能使用纹理坐标。这方面我不清楚 我对实现上述任何一个都不太清楚,所以我会给出一些编码提示 我的背景是一个OpenGL老前辈,他没有跟上新的着色语言范例,现在正试图赶上 2011年3月
最简单的方法是使用纹理坐标。只需将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通道有关的真实纹理,或者我们只是使用将由片段着色器插值的纹理坐标,但没有设置实际纹理?谢谢。明白了-我现在明白你说的了。不需要设置纹理,只需要一个带有纹理坐标的顶点数组。很好,谢谢!