GLSL片段着色器获得“顶点位置”

yu
<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的距离?

克里斯·多德(Chris Dodd)

您声明vVertexPositionvarying,因此它在三角形的三个顶点之间插值。由于在每个顶点为其设置的值是顶点位置,因此最终将与片段位置相同。

问题是,你想要什么?您说要“距当前顶点位置的距离”,但这没有任何意义,因为片段着色器中没有单个“当前”顶点-有多个顶点定义了包含片段的图元。

在OGL / GLSL的更高版本中,您可以将其定义为flat varying(或仅flat取决于版本),在这种情况下,它将是激发顶点的位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

GLSL 变量未从顶点传递到片段着色器

获取片段着色器中的顶点位置

glsl片段着色器计算纹理位置

OpenGL:如何将顶点位置从几何着色器传递到片段着色器?

顶点着色器与片段着色器

GLSL从“片段着色器”到“顶点着色器”发送颜色数据似乎总是等于0

在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

GLSL着色器-片段着色器无法编译

GLSL将片段着色器蒙版拟合到顶点坐标

glsl片段着色器如何从每个顶点获取非插值数据

GLSL片段着色器输出类型

THREE.js / GLSL:WebGL着色器根据世界空间位置为片段着色

获取 GLSL 顶点着色器位置以用于 cpu 事件碰撞函数

如何在GLSL片段着色器中获得相对于法线的视角?

如何通过顶点着色器将数据从顶点着色器传递到片段着色器

片段着色器如何确定来自顶点着色器输出的片段数?

在 GLSL (WebGL) 中,如何在片段着色器中获取屏幕像素 X 位置?

如何在顶点着色器中获得未变换的位置?

将顶点位置从顶点传递到片段着色器-仅在使用Nsight进行调试时有效

优化片段和顶点着色器之间的操作

“拦截” METAL顶点/片段着色器结果的最佳方法

在顶点着色器与片段着色器中计算TBN矩阵?

了解来自顶点着色器的片段着色器输入

警告:片段着色器不会读取顶点着色器“ v_gradient”的输出

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

如何在Metal中将数组从顶点着色器传递到片段着色器

OpenGL无法将变量从顶点着色器发送到片段着色器

如何在顶点着色器中将VBO数据用作位置数据,在片段着色器中如何将统一数据用作颜色数据

有没有办法在片段着色器上从顶点着色器到一个点的位置绘制一个圆?