diff --git a/engine/data/shader/shadow.fs b/engine/data/shader/shadow.fs index 46f7932..658884f 100644 --- a/engine/data/shader/shadow.fs +++ b/engine/data/shader/shadow.fs @@ -16,7 +16,7 @@ vec4 PhongShading(void) vec3 L = normalize(gl_LightSource[0].position.xyz-vPos.xyz); if(gl_LightSource[0].position.w < 0.5){ - L = normalize(gl_LightSource[0].position.xyz); + L = -normalize(gl_LightSource[0].position.xyz); } vec4 ambient = gl_FrontLightProduct[0].ambient; @@ -59,7 +59,7 @@ float ShadowCoef(void){ shadow_coef -= 0.2; } } - + return shadow_coef; } diff --git a/engine/src/client.c b/engine/src/client.c index 8ff30c2..b0316e6 100644 --- a/engine/src/client.c +++ b/engine/src/client.c @@ -49,6 +49,11 @@ GSClient GSClientCreate(GSEngine engine) { client->light0[2] = 0; client->light0[3] = 1; + client->light0[0] = -1; + client->light0[1] = -1; + client->light0[2] = 0; + client->light0[3] = 0; + client->skybox_enabled = GSFalse; if((client->sengine = GSSoundEngineCreate(client)) == NULL) { diff --git a/engine/src/gl/gl_shadow.c b/engine/src/gl/gl_shadow.c index 37b7308..fe6c610 100644 --- a/engine/src/gl/gl_shadow.c +++ b/engine/src/gl/gl_shadow.c @@ -58,7 +58,7 @@ GSBool GSGLShadowBeforeMapping(GSGL gl) { if(gl->engine->client->light0[3]) { GSGLCameraPerspective(gl, GSGLMaxShadowDistance, GSGLMaxShadowDistance); } else { - glOrtho(-GSGLMaxShadowDistance / 2, GSGLMaxShadowDistance / 2, -GSGLMaxShadowDistance / 2, GSGLMaxShadowDistance / 2, -GSGLMaxDistance, GSGLMaxDistance); + glOrtho(-10, 10, -10, 10, -10, 20); } glGetDoublev(GL_PROJECTION_MATRIX, gl->shadow_projection); @@ -66,7 +66,16 @@ GSBool GSGLShadowBeforeMapping(GSGL gl) { glMatrixMode(GL_MODELVIEW); glGetDoublev(GL_MODELVIEW_MATRIX, gl->shadow_old_modelview); glLoadIdentity(); - GSGLCameraLookAt(gl, gl->engine->client->light0, zero); + if(gl->engine->client->light0[3]){ + GSGLCameraLookAt(gl, gl->engine->client->light0, zero); + }else{ + GSVector3 n; + int i; + + for(i = 0; i < 3; i++) n[i] = -gl->engine->client->light0[i]; + + GSGLCameraLookAt(gl, n, zero); + } glGetDoublev(GL_MODELVIEW_MATRIX, gl->shadow_modelview);