Framework / Presentation Layer / Graphics / Lights / Working with Lights

In This Topic
Working with Lights
In This Topic
This topic refers only to components with 3D Rendering abilities

Lighting is one of the most impressive features delivered by Nevron components. Configuring lighting however is sometimes tricky, because it requires understanding of lighting. There is a set of predefined light schemes that can help you configure lightning with ease. The following code shows how to apply a predefined light model to a chart panel: 
C#
Copy Code
NChart chart = nChartControl1.Charts[0];
chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.ShinyTopLeft);
Visual Basic
Copy Code
Dim chart As NChart = NChartControl1.Charts(0)
chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.ShinyTopLeft)

The above code will enable lighting and modify the global ambient light to RGB(64, 64, 64). It will also create a point light source positioned at (3.0f, 9.0f, 20.0f) with ambient, diffuse and specular colors set to RGB(64, 64, 64), RGB(255, 255, 255) and RGB(64, 64, 64) respectively. The following code example achieves the same effect:

C#
Copy Code
NLightModel lightModel = nChartControl1.Charts[0].LightModel;
lightModel.EnableLighting = true;
lightModel.LightSources.Clear();
lightModel.GlobalAmbientLight = Color.FromArgb(64, 64, 64);
NPointLightSource lightSource = new NPointLightSource();
lightSource.Ambient = Color.FromArgb(64, 64, 64);
lightSource.Diffuse = Color.FromArgb(255, 255, 255);
lightSource.Specular = Color.FromArgb(64, 64, 64);
lightSource.Position = new NVector3DF(3.0f, 9.0f, 20.0f);

lightModel.LightSources.Add(lightSource);
Visual Basic
Copy Code
Dim lightModel As NLightModel = NChartControl1.Charts(0).LightModel
lightModel.EnableLighting = True
lightModel.LightSources.Clear()
lightModel.GlobalAmbientLight = Color.FromArgb(64, 64, 64)
Dim lightSource As New NPointLightSource
lightSource.Ambient = Color.FromArgb(64, 64, 64)
lightSource.Diffuse = Color.FromArgb(255, 255, 255)
lightSource.Specular = Color.FromArgb(64, 64, 64)
lightSource.Position = New NVector3DF(3.0F, 9.0F, 20.0F)
lightModel.LightSources.Add(lightSource)

Now let's examine the above code line by line:

1. The first two lines of code obtain a reference the light model applied on the chart and enables lighting (note that you must also switch the chart in 3D mode, because lighting has effect only for 3D charts) :

C#
Copy Code
NLightModel lightModel = nChartControl1.Charts[0].LightModel;
lightModel.EnableLighting = true;
Visual Basic
Copy Code
Dim lightModel As NLightModel = NChartControl1.Charts(0).LightModel

lightModel.EnableLighting = True

2. Sometimes the scene rendered with lightning looks dark. This is why it is recommended to have a global ambient light that makes the objects in the scene to appear brighter:

C#
Copy Code
lightModel.GlobalAmbientLight = Color.FromArgb(64, 64, 64);
Visual Basic
Copy Code
lightModel.GlobalAmbientLight = Color.FromArgb(64, 64, 64)

Another thing to consider when applying ambient light is that it affects all scene elements. This is why it is best to apply a color with equal red, green and blue components (or in other words use to use shades of gray) as this will result in more realistic lighting.

3. After you configure the global ambient properties you can modify the light sources of the scene. This is done by adding NLightSource derived objects (NDirectionalLightSource, NPointLightSource, NSpotLightSource) to the LightSources collection of the NLightModel class.

C#
Copy Code
NPointLightSoure lightSource = new NPointLightSource();
lightModel.LightSources.Add(lightSource);
Visual Basic
Copy Code
Dim lightSource As New NPointLightSoure
lightModel.LightSources.Add(lightSource)

4. To modify the light source light and position you must alter the Ambient, Diffuse, Specular and Position properties of the NPointLightSource object:

C#
Copy Code
lightSource.Ambient = Color.FromArgb(64, 64, 64);
lightSource.Diffuse = Color.FromArgb(255, 255, 255);
lightSource.Specular = Color.FromArgb(64, 64, 64);
lightSource.Position = new NVector(3.0f, 9.0f, 20.0f);
Visual Basic
Copy Code
lightSource.Ambient = Color.FromArgb(64, 64, 64)
lightSource.Diffuse = Color.FromArgb(255, 255, 255)
lightSource.Specular = Color.FromArgb(64, 64, 64)
lightSource.Position = New NVector(3.0f, 9.0f, 20.0f)
See Also