Ich stelle meine Shader um und verlasse mich nicht mehr auf die OpenGL-Pipeline mit den festen Funktionen. Zuvor, OpenGL automatisch transformiert die Lichter für mich, aber jetzt muss ich es selbst tun.
Ich habe den folgenden GLSL-Code in meinem Vertex-Shader:
//compute all of the light vectors. we want normalized vectors
//from the vertex towards the light
for(int i=0;i < NUM_LIGHTS; i++)
{
//if w is 0, it's a directional light, it is a vector
//pointing from the world towards the light source
if(u_lightPos[i].w == 0)
{
vec3 transformedLight = normalize(vec3(??? * u_lightPos[i]));
v_lightDir[i] = transformedLight;
}
else
{
//this is a positional light, transform it by the view*projection matrix
vec4 transformedLight = u_vp_matrix * u_lightPos[i];
//subtract the vertex from the light to get a vector from the vertex to the light
v_lightDir[i] = normalize(vec3(transformedLight - gl_Position));
}
}
Wodurch ersetze ich das ??? in der Zeile vec3 transformedLight = normalize(vec3(??? * u_lightPos[i]));
?
Ich habe bereits die folgenden Matrizen als Eingaben:
uniform mat4 u_mvp_matrix;//model matrix*view matrix*projection matrix
uniform mat4 u_vp_matrix;//view matrix*projection matrix
uniform mat3 u_normal_matrix;//normal matrix for this model
Ich glaube nicht, dass es an einem von ihnen liegt. Es ist offensichtlich nicht die mvp-Matrix oder die normale Matrix, weil diese spezifisch für das aktuelle Modell sind, und ich versuche, in Ansichtskoordinaten zu konvertieren. Ich glaube nicht, es ist die vp-Matrix auch nicht, weil das Übersetzungen und ich will nicht, einen Vektor zu übersetzen.
Kann ich die Matrix, die ich benötige, aus dem berechnen, was derzeit an den Shader übergeben wird, und wenn ja, was muss ich berechnen? Wenn nicht, welche Matrix muss ich hinzufügen und wie sollte sie berechnet werden?