From 64de49cf9910a21b42de89a9690dd4a44c004849 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Mon, 2 Feb 2026 19:11:51 +0900 Subject: [PATCH] better --- engine/data/shader/shadow.fs | 4 ++-- engine/src/client.c | 5 +++++ engine/src/gl/gl_shadow.c | 13 +++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) 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);