Я просто работаю над освещением для каждого фрагмента, работаю в Visual Studio 2010 C ++ и использую GLSL, и по какой-то причине проблемы возникают только у этого фрагментного шейдера, я прошел через фрагментные шейдеры, которые работают, и все мои вершинные шейдеры работают так что это как-то связано с этим конкретным парнем. В основном мой шейдер выглядит так:
#version 120
varying vec3 normal;
varying vec3 lightDir;
varying vec4 ambient;
varying vec4 diffuse;
void main()
{
float NdotL = max(dot(lightDir,normalize(normal)),0.0);
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb), gl_FrontMaterial.diffuse.a);
}
У кого-нибудь есть идеи, чтобы помочь? Как я уже сказал, я уже загружаю в программу несколько шейдеров, но только этот парень не работает
РЕДАКТИРОВАТЬ: переключил vec3 на float, все еще получая ту же проблему. HALP!
dot(lightDir,normalize(normal))
это скалярное произведение. Так что возвращает скаляр.
max(scalar, scalar)
также оценивает скаляр.
Следовательно:
vec3 NdotL = max(dot(lightDir,normalize(normal)),0.0);
Попытки назначить скаляр на вектор. Который недействителен.
Итак, что вы, вероятно, хотели, было:
float NdotL = max(dot(lightDir,normalize(normal)),0.0);
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb), gl_FrontMaterial.diffuse.a);
Других решений пока нет …