Я пытаюсь расширить возможности моих шейдеров, добавив немного освещения в сцену. Я добавил кучу новых переменных в вершинный шейдер
attribute vec4 Position; // 1
attribute vec4 SourceColor; // 2
attribute vec3 Normal;
attribute vec4 Sample;
attribute vec3 DiffuseMaterial;
varying vec4 DestinationColor; // 3
uniform mat4 Projection;
uniform mat4 Modelview;
uniform mat3 NormalMatrix;
uniform vec3 LightPosition;
uniform vec3 AmbientMaterial;
uniform vec3 SpecularMaterial;
uniform float Shininess;
void main(void) { // 4
vec3 N = NormalMatrix * Normal;
vec3 L = normalize(LightPosition);
vec3 E = vec3(0, 0, 1);
vec3 H = normalize(L + E);
float df = max(0.0, dot(N, L));
float sf = max(0.0, dot(N, H));
sf = pow(sf, Shininess);
vec3 color = AmbientMaterial + df * DiffuseMaterial + sf * SpecularMaterial;
DestinationColor = vec4(color, 1);
// DestinationColor = SourceColor;
gl_Position = Projection * Modelview * Position;
}
Однако, когда я делаю
_normalSlot = glGetAttribLocation(programHandle, "Normal");
Я всегда получаю значение 0 или -1. У кого-нибудь есть идеи?