mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-18 23:11:38 +00:00
Add in some ambient light for iqm models.
Though the bsp loader doesn't yet support colored lighting, the ambient light will be colored when it does. With this, I guess iqm model support is done for glsl until I figure out how I want to do dual quaternion support.
This commit is contained in:
parent
111377f1be
commit
31772afd13
2 changed files with 9 additions and 1 deletions
|
@ -83,6 +83,7 @@ static struct {
|
||||||
shaderparam_t vtangent;
|
shaderparam_t vtangent;
|
||||||
shaderparam_t vnormal;
|
shaderparam_t vnormal;
|
||||||
shaderparam_t vposition;
|
shaderparam_t vposition;
|
||||||
|
shaderparam_t ambient;
|
||||||
lightpar_t lights[MAX_IQM_LIGHTS];
|
lightpar_t lights[MAX_IQM_LIGHTS];
|
||||||
shaderparam_t texture;
|
shaderparam_t texture;
|
||||||
shaderparam_t normalmap;
|
shaderparam_t normalmap;
|
||||||
|
@ -99,6 +100,7 @@ static struct {
|
||||||
{"vtangent", 0},
|
{"vtangent", 0},
|
||||||
{"vnormal", 0},
|
{"vnormal", 0},
|
||||||
{"vposition", 0},
|
{"vposition", 0},
|
||||||
|
{"ambient", 1},
|
||||||
{
|
{
|
||||||
{{"lights[0].position", 1}, {"lights[0].color", 1}},
|
{{"lights[0].position", 1}, {"lights[0].color", 1}},
|
||||||
{{"lights[1].position", 1}, {"lights[1].color", 1}},
|
{{"lights[1].position", 1}, {"lights[1].color", 1}},
|
||||||
|
@ -151,6 +153,7 @@ glsl_R_InitIQM (void)
|
||||||
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vtangent);
|
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vtangent);
|
||||||
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vnormal);
|
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vnormal);
|
||||||
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vposition);
|
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.vposition);
|
||||||
|
GLSL_ResolveShaderParam (iqm_shader.program, &iqm_shader.ambient);
|
||||||
for (i = 0; i < MAX_IQM_LIGHTS; i++) {
|
for (i = 0; i < MAX_IQM_LIGHTS; i++) {
|
||||||
GLSL_ResolveShaderParam (iqm_shader.program,
|
GLSL_ResolveShaderParam (iqm_shader.program,
|
||||||
&iqm_shader.lights[i].position);
|
&iqm_shader.lights[i].position);
|
||||||
|
@ -203,6 +206,8 @@ glsl_R_DrawIQM (void)
|
||||||
float blend;
|
float blend;
|
||||||
iqmframe_t *frame;
|
iqmframe_t *frame;
|
||||||
|
|
||||||
|
R_LightPoint (ent->origin); //FIXME min_light?
|
||||||
|
VectorScale (ambientcolor, 1/255.0, ambientcolor);
|
||||||
R_FindNearLights (ent->origin, MAX_IQM_LIGHTS, lights);
|
R_FindNearLights (ent->origin, MAX_IQM_LIGHTS, lights);
|
||||||
|
|
||||||
// we need only the rotation for normals.
|
// we need only the rotation for normals.
|
||||||
|
@ -233,6 +238,7 @@ glsl_R_DrawIQM (void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
qfeglUniform3fv (iqm_shader.ambient.location, 1, ambientcolor);
|
||||||
for (i = 0; i < MAX_IQM_LIGHTS; i++) {
|
for (i = 0; i < MAX_IQM_LIGHTS; i++) {
|
||||||
quat_t val;
|
quat_t val;
|
||||||
lightpar_t *l = &iqm_shader.lights[i];
|
lightpar_t *l = &iqm_shader.lights[i];
|
||||||
|
|
|
@ -4,6 +4,7 @@ struct light {
|
||||||
};
|
};
|
||||||
uniform sampler2D texture;
|
uniform sampler2D texture;
|
||||||
uniform sampler2D normalmap;
|
uniform sampler2D normalmap;
|
||||||
|
uniform vec3 ambient;
|
||||||
uniform light lights[8];
|
uniform light lights[8];
|
||||||
uniform vec4 fog;
|
uniform vec4 fog;
|
||||||
|
|
||||||
|
@ -52,7 +53,8 @@ main (void)
|
||||||
|
|
||||||
norm = (texture2D (normalmap, st).xyz - vec3(0.5)) * 2.0;
|
norm = (texture2D (normalmap, st).xyz - vec3(0.5)) * 2.0;
|
||||||
norm = tbn * norm;
|
norm = tbn * norm;
|
||||||
l = calc_light (norm, 0);
|
l = ambient;
|
||||||
|
l += calc_light (norm, 0);
|
||||||
l += calc_light (norm, 1);
|
l += calc_light (norm, 1);
|
||||||
l += calc_light (norm, 2);
|
l += calc_light (norm, 2);
|
||||||
l += calc_light (norm, 3);
|
l += calc_light (norm, 3);
|
||||||
|
|
Loading…
Reference in a new issue