2016-05-27 28 views
0

vec2 divisonでOpenGL ESとWebGLを併用すると、アスペクト比を自動的に処理するように見えます。私の理解は次のとおりです。vec2 division weirdly(自動アスペクト比補正?)

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

:それは自動的にアスペクト比補正を行っているよう

correct example

に見えます。これは機能ですか?どこの情報も見つけられないようだ。すべてのことは、通常のバイナリ演算子(+、 - 、/、*など)はコンポーネントベースで動作すると述べています。助けてください!

答えて

1

はトリックをした

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

をお試しください!ありがとうございました。 'float(someiVec)'を実行したときに実際に何が起きているのか知っていますか? – Knifa

+2

私はfloat(uResolution)== float(uResolution.x)と考えています。そして、vec2を単一のfloatで分割すると、各要素はそのfloatで独立して分割されます。 – 246tNt

+1

'float'はスカラー型なので、' float(someiVec) 'は最初に引数をスカラーに変換し(最初のコンポーネントを除くすべてを削除して)、そのスカラーを' float'型に変換します。 –