Spot light issue

Now i am working in spotlight lighting. Spotlight does not light my object correctly. I have placed my light at position (0.0,0.0,9.0,1.0), and my spot light cone direction(0.0,0.0,-1.0) and spot cut off angle 16.80, and spot exponent value is 0.15. I have render plane at (0,0,-5) and cube at (0,0,0). It should render as small spot light over my plane and cube, but my spot light only light up the cube. When i increase spot cut off angle to 50.00. But it is a big spot over plane. This is my shader code.

vertex shader :


#version 300 es

in vec3 a_position;
in vec3 a_normal;
in vec2 texcoord;

uniform mat4 u_mvp;
uniform mat4 u_lightMVP;
uniform mat4 u_world;

uniform vec3 u_lightPos;
uniform vec3 u_eyePos;

/***************  material data **********/

uniform vec4 mat_ambient;
uniform vec4 mat_diffuse;
uniform vec4 mat_emission;
uniform vec4 mat_specular;

/***************************************/

out float v_diffuse;
out vec2 frag_tex;
out vec3 rgb;
out vec3 linearColor;


uniform vec4 u_lightColor;

vec3 incidence_vector;
vec3 reflectionVector;
vec3 surfaceToCamera;

/*** light uniform ***/


struct param
{
    vec4 color;
        vec4 position;
    vec4 spot;
    //float const_atten;


    float quad_atten;
    //float linear_atten;
    /*float fall_off_angle;
    float fall_off_exp;*/

};

layout(std140) uniform light_block
{
    param light_par[1];
};

uniform bool texturing;
uniform bool point_light;
uniform bool spot_light;
uniform bool sun_direct_light;

vec4 light_pos = vec4(0.0,0.0,9.0,1.0);

float attenuation;

vec3 cone_dir = vec3(0.0,0.0,-1.0);

float angle = 50.80002f;

float spot_cut_off,spot_attn;

spot_expo = 0.15f;


/*******************************/


void main() 
{

    gl_Position = u_mvp *  vec4(a_position,1.0);

    frag_tex = texcoord;
    
    vec4 worldPos = u_world *  vec4(a_position,1.0);



    vec3 lightDir = normalize(light_pos.xyz - worldPos.xyz);

    vec3 worldNormal = normalize(mat3(u_world) * a_normal);

/* calculate diffuse component */

    v_diffuse = max(0.0,dot(lightDir, worldNormal));

    rgb = light_par[0].color.xyz * mat_diffuse.xyz;


/* calculate attenuation */


    float distanceToLight = length(light_pos.xyz - worldPos.xyz);

    attenuation = 1.0 / (1.0 + (0.001111 *  distanceToLight * distanceToLight) + (0.0 *  distanceToLight) );

              float clampedCosine1 = max(0.0,dot(-lightDir, normalize(vec3(cone_dir))));


                      if (clampedCosine1 < cos(radians(angle))) // outside of spotlight cone
                      {
                      attenuation = 0.0;
                      }

                      else
                      {
                    spot_attn = pow(clampedCosine1,spot_expo);
                    attenuation = attenuation ;
                      }

    linearColor = (attenuation * (rgb));

}

Thanks,

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.