3

I create and render a list with 20 SpotLight points in Helix ViewPort that have specific positions. With a timer I always change the color of the SpotLight. The ViewPort light is set to: <helix:DirectionalHeadLight Position="2,3,0" Brightness="0.30"></helix:DirectionalHeadLight>

Than I also create a list and render a list of 20 spheres SphereVisual3D. The SpotLights and SphereVisual3Ds have similar positions. Than I set a material for the spehres (in this case indigo). See picture:

Figure 1: SphereVisual3D positions

enter image description here

Figure 2: SpotLight positions (with differentcolors per SpotLight)

enter image description here

I want to keep the spheres Material the same, without reflecting light from the SpotLights. I tried with all the 3 types of Material:

1: sphere.Material = new DiffuseMaterial(new SolidColorBrush(Colors.Indigo));

Figure 1.1: Spehres with DiffuseMaterial and SpotLights enter image description here

2: sphere.Material = new SpecularMaterial(new SolidColorBrush(Colors.Indigo),1);

Figure 2.1: Spehres with SpecularMaterial and SpotLights enter image description here

3: sphere.Material = new EmissiveMaterial(new SolidColorBrush(Colors.Indigo));

Figure 3.1: Spehres with SpecularMaterial and SpotLights enter image description here

Is it possible to set a Material that does not reflect the light and keeps its color? Is there any possibility to set a plain color?

Edric
  • 24,639
  • 13
  • 81
  • 91
Georgiana M
  • 323
  • 4
  • 20

1 Answers1

1

I do not think you can do this by means of the material only.

I suggest to replace the SphereVisual3Ds by two-dimensional planes (circles) (e.g. using MeshBuilder.AddEllipse() in Helix) oriented towards the camera and use a DiffuseMaterialon them.

Of course, when the camera's position or look direction changes, you will have to react and change the orientation of the 2d elements accordingly.

wkl
  • 1,896
  • 2
  • 15
  • 26