AMD OpenGL ES SDK for 3.1 (2016 年 5 月 13 日現在)のフラグメント シェーダーは次のとおりです。
precision highp float;
uniform vec4 lightVec;
uniform sampler2D textureUnit0;
varying vec2 vTexCoord;
varying vec3 vNormal;
void main()
{
vec4 diff = vec4(dot(lightVec.xyz,normalize(vNormal)).xxx, 1);
gl_FragColor = diff * texture(textureUnit0, vTexCoord);
}
これは完全に間違っています。私がそれを修正するのに最も近いのは次のとおりです。
precision highp float;
uniform vec4 lightVec;
uniform sampler2D textureUnit0;
varying vec2 vTexCoord;
varying vec3 vNormal;
void main()
{
vec4 diff = vec4(dot(lightVec.xyz,normalize(vNormal)).xxx, 1);
gl_FragColor = diff * texture2D(textureUnit0, vTexCoord);
}
これは、最後の行でテクスチャを texture2D に変換するだけです。
拡散シェーダを計算しようとして何が起こっているのかわかりません。ドットを使用してフロートを取得し、フロートでスウィズル (それを.xxx演算子と呼んでいるものだと思います) を呼び出して、それを複製しようとしていますか?
シェーダーについて簡単に学ぶにはどうすればよいですか? 熟練するのは非常に難しい分野のようです。