Так или иначе, изменение gl_FragColor не меняет окончательный цвет моих 3D-объектов. Как это может быть возможным? Это произошло только внезапно … поскольку ТОЧНЫЙ ЖЕ КОД работал раньше …
Фрагмент шейдера:
#version 120
uniform vec4 ambient;
uniform vec4 diffuse;
uniform vec4 specular;
uniform vec4 objColor;
uniform float shininess;
uniform bool shade;
uniform sampler2D texMap;
varying vec2 st;
varying vec3 N;
varying vec3 L;
varying vec3 E;
void main(void) {
vec3 NN = normalize(N);
vec3 EE = normalize(E);
vec3 LL = normalize(L);
vec3 H = normalize(LL+EE); //Half vector
float Kd = dot(LL, NN);
float Ks = pow(max(dot(NN, H), 0.0), shininess);
vec4 amb, diff, spec;
amb = ambient;
diff = Kd*diffuse;
if(Kd <= 0.0) spec = vec4(0.0, 0.0, 0.0, 1.0);
else spec = specular * Ks;
if(shade) gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); <----------------- THIS LINE
else gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); <---------------------- THIS LINE
}
Vertext Shader:
#version 120
uniform mat4 projection_matrix;
uniform mat4 modelview_matrix;
uniform mat4 transform_matrix;
uniform vec4 light_position;
attribute vec2 a_Textcoord;
attribute vec4 a_Vertex;
attribute vec4 a_Normal;
varying vec2 st;
varying vec3 N;
varying vec3 L;
varying vec3 E;
void main(void) {
vec4 clip_position = transform_matrix * a_Vertex;
gl_Position = projection_matrix * modelview_matrix * clip_position;
vec4 nn = transform_matrix * a_Normal;
N = normalize(nn.xyz);
L = light_position.xyz - clip_position.xyz;
if(light_position.w == 0.0) L = light_position.xyz;
E = clip_position.xyz;
st = a_Textcoord;
}
Как указано в фрагментном шейдере:<—— ЭТА ЛИНИЯ «, любой шейдерный объект — ЧЕРНЫЙ вместо Красного. Я проверил все значения переменных, отправляемые в шейдер, они соответствуют ожидаемым, и Matrix ProView Matrix и Projection Matrix отлично работают. У всех есть идеи, почему это это тот случай?
Волшебным образом это сработало снова … Я ничего не делал, кроме перезагрузки компьютера (выключите и подождите 15 секунд, включите). Связано ли это с настройками OpenGL?
Других решений пока нет …