Заметил такую вещь. Исследовал модели освещения и юзал примеры шейдеров. Так вот что означает glModelViewMatrix? Это view_matrix * model_matrix или только model_matrix? Потому что если заюзать view_matrix * model_matrix, то изображение становится не правильное...
Еще: почему такой странный эффект может быть? Чем дальше двигаем свет, тем ярче светит O_o
http://rutube.ru/video/7f47e12f23b3c...c964c7730847c/
const std::string NORMAL_VS =
"varying vec3 l;\n"
"varying vec3 v;\n"
"varying vec3 n;\n"
"attribute vec4 POSITION;\n"
"attribute vec3 NORMAL;\n"
"attribute vec2 TEXCOORD;\n"
"attribute vec3 TANGENT;\n"
"attribute vec3 BINORMAL;\n"
"uniform vec3 LIGHTS_POSITION[8];\n"
"uniform vec3 CAMERA_POSITION;\n"
"uniform mat4 MODEL_VIEW_PROJ_MATRIX;\n"
"uniform mat4 MODEL_MATRIX;\n"
"uniform mat4 VIEW_MATRIX;\n"
"uniform mat3 NORMAL_MATRIX;\n"
"varying vec2 texcoord;\n"
"void main(void){\n"
" vec3 p = vec3(MODEL_MATRIX * POSITION);\n"
" l = normalize(vec3(LIGHTS_POSITION[0]) - p ); \n"
" v = normalize(vec3(CAMERA_POSITION) - p );\n"
" n = normalize(NORMAL_MATRIX * NORMAL);\n"
" //mat3 tbn = mat3(TANGENT, BINORMAL, NORMAL);\n"
" //l = tbn * l;\n"
" gl_Position = MODEL_VIEW_PROJ_MATRIX * POSITION;\n"
" texcoord = TEXCOORD;\n"
"}\n";
const std::string NORMAL_FS =
"uniform sampler2D TEXTURE_DIFFUSE;\n"
"uniform sampler2D TEXTURE_NORMAL;\n"
"uniform vec4 LIGHTS_DIFFUSE[8];\n"
"uniform vec4 LIGHTS_SPECULAR[8];\n"
"varying vec3 l;\n"
"varying vec3 v;\n"
"varying vec3 n;\n"
"varying vec2 texcoord;\n"
"void main (void)\n"
"{\n"
" vec4 diffc = texture2D(TEXTURE_DIFFUSE, texcoord);\n"
" vec4 bumpc = texture2D(TEXTURE_NORMAL, texcoord);\n"
" vec3 bumpn = normalize((bumpc.rgb * 2.0 - 1.0) * vec3(1.0, 1.0, 1.0));"
" vec3 h = normalize(v + l);\n"
" const float specPower = 20.0;\n"
" vec3 n2 = normalize ( -n );\n"
" vec3 bn2 = normalize ( -bumpn );\n"
" vec3 l2 = normalize ( l );\n"
" vec3 h2 = normalize ( h );\n"
" vec4 diff = LIGHTS_DIFFUSE[0] * max ( dot ( n2, l2 ), 0.0 );\n"
" vec4 diffn = LIGHTS_DIFFUSE[0] * max ( dot ( bn2, l2 ), 0.0 );\n"
" vec4 spec = LIGHTS_SPECULAR[0] * pow ( max ( dot ( n2, h2 ), 0.0 ), specPower );\n"
" gl_FragColor = diff * diffc + spec;\n"
"}\n";