<script id="shader-triangle-fs" type="x-shader/x-fragment">
precision mediump float;
uniform vec4 colorVec;
uniform sampler2D uSampler;
varying highp vec2 vTextureCoord;
varying vec3 vVertexPosition;
void main(void) {
float dist = length(vVertexPosition.xy - gl_FragCoord.xy);
float att = 100.0/dist;
vec4 color = vec4(att,att,att, 1);
vec4 texture = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
gl_FragColor = color;
}
</script>
<script id="shader-triangle-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec2 aTextureCoord;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying highp vec2 vTextureCoord;
varying vec3 vVertexPosition;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vTextureCoord = aTextureCoord;
vVertexPosition = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
}
</script>
在中float dist = length(vVertexPosition.xy - gl_FragCoord.xy);
,我要获取的是从当前顶点坐标到片段坐标的距离。
但我总是得到的是这个。
http://puu.sh/6rbva.jpg
http://puu.sh/6rbzM.jpg
(我使用了triangleStrip。)
这些图像说明了这vVertexPosition.xy - gl_FragCoord.xy = 0
一点vVertexPosition.xy == gl_FragCoord.xy
。
为什么会发生这种事情?
以及如何获取当前顶点位置到当前FragCoord的距离?
您声明vVertexPosition
为varying
,因此它在三角形的三个顶点之间插值。由于在每个顶点为其设置的值是顶点位置,因此最终将与片段位置相同。
问题是,你想要什么?您说要“距当前顶点位置的距离”,但这没有任何意义,因为片段着色器中没有单个“当前”顶点-有多个顶点定义了包含片段的图元。
在OGL / GLSL的更高版本中,您可以将其定义为flat varying
(或仅flat
取决于版本),在这种情况下,它将是激发顶点的位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句