vec2师表现得很奇怪(自动宽高比校正?)

时间:2016-05-27 16:26:53

标签: opengl-es glsl webgl

使用带有WebGL的OpenGL ES与vec2 divison遇到一些问题 - 特别是它似乎会自动处理宽高比。我的理解是:

someVec2 / anotherVec2 = vec2(
  someVec2.x / anotherVec2.x,
  someVec2.y / anotherVec2.y)

即,它是组件式的。

然而,这段代码(其中uResolution是从当前分辨率的代码传递的ivec2):

vec2 uv = gl_FragCoord.xy / float(uResolution);
gl_FragColor = vec4(uv.x, uv.y, 0.0, 1.0);

产生

broken example

,而

vec2 fragCoordUv = vec2(
  gl_FragCoord.x / float(uResolution.x),
  gl_FragCoord.y / float(uResolution.y)
);
gl_FragColor = vec4(uv.x, uv.y, 0.0, 1.0);

产生

correct example

具体来说,Y值似乎并没有一直向上扩展。如果使用纹理,问题就会变得更加明显。即直分:

another broken example

VS。手动组件部门:

correct example

它看起来像是自动执行宽高比校正。这是一个功能吗?我似乎无法在任何地方找到任何信息。一切都说正常的二元运算符(+, - ,/,*等)只是基于组件。请帮忙!

1 个答案:

答案 0 :(得分:1)

尝试

vec2 uv = gl_FragCoord.xy / vec2(uResolution);