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。
不知道尝试计算漫反射着色器发生了什么。它使用点来获取浮点数,并在浮点数上调用 swizzle(我认为这就是您所说的.xxx运算符)来尝试复制它?
有人如何轻松地了解有关着色器的更多信息?这似乎是一个很难熟练掌握的领域。