Неожиданный конец файла в шейдерном фрагменте GLSL

Я просто работаю над освещением для каждого фрагмента, работаю в 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!

-1

Решение

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]