Fix various problems with the lighting calculations

This commit is contained in:
Luke Benstead 2018-06-06 21:23:17 +01:00
parent a4be2fdaea
commit e70922ebb7
2 changed files with 9 additions and 7 deletions

View File

@ -250,7 +250,7 @@ void calculateLightingContribution(const GLint light, const GLfloat* pos, const
}; };
GLfloat d; GLfloat d;
vec3f_length(V.x, V.y, V.z, d); vec3f_length(L.x, L.y, L.z, d);
vec3f_normalize(L.x, L.y, L.z); vec3f_normalize(L.x, L.y, L.z);
vec3f_normalize(V.x, V.y, V.z); vec3f_normalize(V.x, V.y, V.z);
@ -266,13 +266,13 @@ void calculateLightingContribution(const GLint light, const GLfloat* pos, const
GLfloat VdotR = VdotN - NdotL; GLfloat VdotR = VdotN - NdotL;
GLfloat specularPower = FPOW(VdotR > 0 ? VdotR : 0, MATERIAL.exponent); GLfloat specularPower = FPOW(VdotR > 0 ? VdotR : 0, MATERIAL.exponent);
GLfloat att = (l->position[3] == 0) ? 1.0f : ( GLfloat att = (l->position[3] == 0.0f) ? 1.0f : (
l->constant_attenuation / (1.0f + l->linear_attenuation * d) * (1.0f + l->quadratic_attenuation * d * d) 1.0f / (l->constant_attenuation + (l->linear_attenuation * d) + (l->quadratic_attenuation * d * d))
); );
colour[0] = att * l->ambient[0] * MATERIAL.ambient[0] + f * (l->diffuse[0] * MATERIAL.diffuse[0] * NdotL + l->specular[0] * MATERIAL.specular[0] * specularPower); colour[0] = att * (l->ambient[0] * MATERIAL.ambient[0] + f * (l->diffuse[0] * MATERIAL.diffuse[0] * NdotL + l->specular[0] * MATERIAL.specular[0] * specularPower));
colour[1] = att * l->ambient[1] * MATERIAL.ambient[1] + f * (l->diffuse[1] * MATERIAL.diffuse[1] * NdotL + l->specular[1] * MATERIAL.specular[1] * specularPower); colour[1] = att * (l->ambient[1] * MATERIAL.ambient[1] + f * (l->diffuse[1] * MATERIAL.diffuse[1] * NdotL + l->specular[1] * MATERIAL.specular[1] * specularPower));
colour[2] = att * l->ambient[2] * MATERIAL.ambient[2] + f * (l->diffuse[2] * MATERIAL.diffuse[2] * NdotL + l->specular[2] * MATERIAL.specular[2] * specularPower); colour[2] = att * (l->ambient[2] * MATERIAL.ambient[2] + f * (l->diffuse[2] * MATERIAL.diffuse[2] * NdotL + l->specular[2] * MATERIAL.specular[2] * specularPower));
colour[3] = MATERIAL.diffuse[3]; colour[3] = MATERIAL.diffuse[3];
if(colour[0] > 1.0f) colour[0] = 1.0f; if(colour[0] > 1.0f) colour[0] = 1.0f;

View File

@ -151,7 +151,6 @@ void InitGL(int Width, int Height) // We call this right after our OpenG
glEnable(GL_LIGHTING); glEnable(GL_LIGHTING);
glDisable(GL_LIGHT0); glDisable(GL_LIGHT0);
glEnable(GL_LIGHT1); glEnable(GL_LIGHT1);
glEnable(GL_COLOR_MATERIAL);
GLfloat l1_pos[] = {5.0, 0.0, 1.0, 1.0}; GLfloat l1_pos[] = {5.0, 0.0, 1.0, 1.0};
GLfloat l1_diff[] = {1.0, 0.0, 0.0, 1.0}; GLfloat l1_diff[] = {1.0, 0.0, 0.0, 1.0};
@ -160,6 +159,9 @@ void InitGL(int Width, int Height) // We call this right after our OpenG
//glLightfv(GL_LIGHT1, GL_AMBIENT, l1_amb); //glLightfv(GL_LIGHT1, GL_AMBIENT, l1_amb);
glLightfv(GL_LIGHT1, GL_DIFFUSE, l1_diff); glLightfv(GL_LIGHT1, GL_DIFFUSE, l1_diff);
glLightfv(GL_LIGHT1, GL_POSITION, l1_pos); glLightfv(GL_LIGHT1, GL_POSITION, l1_pos);
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.0f);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.0001);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.00001);
} }
/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */ /* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */