Mesh scaling and lighting problems

I am simply trying to render spheres with a light source coming from directly over head and the spheres have some ambient and diffuse lighting too... but when i change the scale of the mesh, the lighting goes all weird (see screeshots below)

Here is the lighting code:

private void SetupLighting()

{

myDevice.Lights[0].Type = LightType.Directional;

myDevice.Lights[0].Diffuse = Color.White;

myDevice.Lights[0].Ambient = Color.FromArgb(0x404040);

myDevice.Lights[0].Specular = Color.White;

myDevice.Lights[0].Direction = new Vector3(0.0f, -1.0f, 0.0f);

myDevice.Lights[0].Enabled = true;

myDevice.RenderState.Lighting = true;

// myDevice.RenderState.SpecularEnable = true;

myDevice.RenderState.Ambient = Color.FromArgb(60, 60, 60);

}

 

And here is the material code:

myMaterial.Diffuse = Color.FromArgb(23, 170, 51);

myMaterial.Ambient = Color.FromArgb(23, 140, 51);

myScaling.Multiply(0.5f);

Now if I don't scale the size of the mesh, I get this... (satisfactory)

 

However if I scale the size of the mesh, in this case down to half size, the result is a horribly lit sphere. (not satisfactory)

If however I don't scale the sphere and just reduce its radius by half, I get smaller but properly lit spheres again. (satisfactory)

How can i scale my mesh but still get the lighting to look decent Why does scaling the mesh break the lighting



Answer this question

Mesh scaling and lighting problems

  • petro_zn

    Lighting caluclations are based on the normals. When you set a scale for a mesh it scales the normals too affecting the lighting.

    Set the RenderState 'NormalizeNormals' to TRUE and the fixed function pipeline will fix all the normals for you at a slight performance cost.



  • MYVB

    The Zman strikes again!

    That fixed the problem like a charm! Thanks a ton!


  • Mesh scaling and lighting problems