фрагмент шейдера в AMD OpenGL ES SDK for 3.1 (по состоянию на 5/13/2016) заключается в следующем:Проблемы с 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 на последней строке.
Не знаю, что происходит с попыткой вычислить диффузный шейдер. Он использует dot, чтобы получить поплавок и вызов swizzle (я думаю, это то, что вы называете оператором .xxx) на поплавке, чтобы попытаться его дублировать?
Как кто-то легко узнает больше о шейдерах? Кажется, очень сложная область, чтобы стать квалифицированным.
Исходный код затенения не «утончаются неправильно». Это просто отсутствует директива версии. Поскольку вы пытаетесь использовать ES 3.1, он должен иметь '#version 310 es' в качестве первой строки. Без директивы версии по умолчанию используется версия 100, соответствующая ES 2.0, для которой требуется старая функция выборки текстуры. –