在AMD OpenGL ES SDK for 3.1(如2016年5月13日的)片段着色器是這樣的:麻煩與AMD的OpenGL ES SDK 3.1片段着色器
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運算符)來嘗試並複製它?
人們如何更輕鬆地瞭解着色器?這似乎是一個非常難以熟練的領域。
原始着色器的代碼是不是「平出錯誤的」。它只是缺少版本指令。既然你正在嘗試使用ES 3.1,它應該有一個'#version 310 es'作爲第一行。沒有版本指令,缺省值爲版本100,對應於ES 2.0,它需要舊式紋理採樣功能。 –