Directional light
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="" Height="300" Width="300" Loaded="Window1_Loaded"> <Window.Resources> <MeshGeometry3D x:Key="triangleMesh" Positions="-1,-1,0 1,-1,-2 1,1,0" TriangleIndices="0 1 2" /> </Window.Resources> <UniformGrid> <Viewport3D x:Name="vp1"> <Viewport3D.Camera> <PerspectiveCamera LookDirection="0,0,-1" Position="0,0,5" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <DirectionalLight Direction="-1,-1,-1" Color="White" /> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D> </UniformGrid> </Window> //File:Window.xaml.cs using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Media3D; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Window1_Loaded(object sender, RoutedEventArgs e) { MeshGeometry3D triangleMesh = (MeshGeometry3D)TryFindResource("triangleMesh"); CreateTriangles(vp1, 4, triangleMesh); } private void CreateTriangles(Viewport3D viewport3D,int triangleCount, MeshGeometry3D triangleMesh) { ModelVisual3D modelVisual3D = new ModelVisual3D(); GeometryModel3D geometryModel3D = new GeometryModel3D(); geometryModel3D.Geometry = triangleMesh; geometryModel3D.Material= new DiffuseMaterial(Brushes.Firebrick); modelVisual3D.Content = geometryModel3D; RotateTransform3D rotateTransform = new RotateTransform3D(); rotateTransform.Rotation = new AxisAngleRotation3D(new Vector3D(0, 0, -1), 20); modelVisual3D.Transform = rotateTransform; viewport3D.Children.Add(modelVisual3D); } } }