14. Tools to fire up a 3D Area!
• Set the desired area
– Viewport3D
• Light the area with a DirectionalLight!
– new ModelVisual3D
{
Content = new DirectionalLight
{
Color = Colors.White,
Direction = new Vector3D(0, 0, -1)
}
});
• Set a camera to look around!
– PerspectiveCamera
20. So, Let’s start!
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
21. 3D Rendering
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
22. 3D Rendering
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
<Viewport3D Name="viewport3D">
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="White" Direction="-2,-3,-1" />
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
23. 3D Rendering
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
24. 3D Rendering
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
25. Set a camera to look around!
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
class CameraManagement
{
public PerspectiveCamera Camera { set; get; }
public CameraManagement(Viewport3D viewport3D)
{
this.Camera = new PerspectiveCamera();
this.Camera.FarPlaneDistance = 500;
this.Camera.NearPlaneDistance = 1;
// LookDirection
this.Camera.LookDirection = new Vector3D(-10, -15, -25);
// UpDirection
this.Camera.UpDirection = new Vector3D(0, 1, 0);
// Position
this.Camera.Position = new Point3D(50, 100, 150);
this.Camera.FieldOfView = 70;
this.Camera.Transform = new Transform3DGroup();
viewport3D.Camera = this.Camera;
}
}
26. Set a camera to look around!
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CameraManagement cameraManagement = new CameraManagement(viewport3D);
}
}
27. 3D Rendering
• Set the desired area
• Light the area with a DirectionalLight!
• Set a camera to look around!
• Draw whatever u want!
– Our Cuboid!
28. 3D Rendering
1. Set the desired area
2. Light the area with a DirectionalLight!
3. Set a camera to look around!
4. Draw whatever u want!
– Our Cuboid!
• What do u need to create a Cuboid?!
• Bunch of Triangles!
29. 3D Rendering
1. Set the desired area
2. Light the area with a DirectionalLight!
3. Set a camera to look around!
4. Draw whatever u want!
– Our Cuboid!
• What do u need to create a Cuboid?!
• Bunch of 16 Triangles!
30. 3D Rendering
class Triangle
{
public static Model3DGroup CreateTriangleModelGroup(Point3D p0,
Point3D p1,
Point3D p2,
Color myColor)
{
MeshGeometry3D mesh = new MeshGeometry3D();
mesh.Positions.Add(p0);
mesh.Positions.Add(p1);
mesh.Positions.Add(p2);
mesh.TriangleIndices.Add(0);
mesh.TriangleIndices.Add(1);
mesh.TriangleIndices.Add(2);
Material material = new DiffuseMaterial(new SolidColorBrush(myColor));
GeometryModel3D model = new GeometryModel3D(mesh, material);
Model3DGroup group = new Model3DGroup();
group.Children.Add(model);
return group;
}
}
31. 3D Rendering
class Cuboid
{
public Cuboid(Viewport3D viewport3D, Point3D initialPosition, double length, double width, double height, Color color)
{
Model3D model = CreateModelGroup(initialPosition, length, width, height, color);
ModelVisual3D visualModel = new ModelVisual3D();
visualModel.Content = model;
viewport3D.Children.Add(visualModel);
}
private Model3D CreateModelGroup(Point3D initialPosition,double length, double width, double height, Color color)
{
Model3DGroup group = new Model3DGroup();
// *HERE* //
return group;
}
public static Point3D GetSummedPoint(Point3D p1, Point3D p2)
{
Point3D myPoint = new Point3D();
// Manipulate Coordinates
myPoint.X = p1.X + p2.X;
myPoint.Y = p1.Y + p2.Y;
myPoint.Z = p1.Z + p2.Z;
return myPoint;
}
}
32. 3D Rendering
class Cuboid
{
public Cuboid(Viewport3D viewport3D, Point3D initialPosition, double length, double width, double height, Color color)
{
Model3D model = CreateModelGroup(initialPosition, length, width, height, color);
ModelVisual3D visualModel = new ModelVisual3D();
visualModel.Content = model;
viewport3D.Children.Add(visualModel);
}
private Model3D CreateModelGroup(Point3D initialPosition,double length, double width, double height, Color color)
{
Model3DGroup group = new Model3DGroup();
// *HERE* //
return group;
}
public static Point3D GetSummedPoint(Point3D p1, Point3D p2)
{
Point3D myPoint = new Point3D();
// Manipulate Coordinates
myPoint.X = p1.X + p2.X;
myPoint.Y = p1.Y + p2.Y;
myPoint.Z = p1.Z + p2.Z;
return myPoint;
}
}
//* HERE *//
Point3D p0 = initialPosition;
Point3D p1 = GetSummedPoint(initialPosition, new Point3D(width, 0, 0));
Point3D p2 = GetSummedPoint(initialPosition, new Point3D(width, 0, length));
Point3D p3 = GetSummedPoint(initialPosition, new Point3D(0, 0, length));
Point3D p4 = GetSummedPoint(initialPosition, new Point3D(0, height, 0));
Point3D p5 = GetSummedPoint(initialPosition, new Point3D(width, height, 0));
Point3D p6 = GetSummedPoint(initialPosition, new Point3D(width, height, length));
Point3D p7 = GetSummedPoint(initialPosition, new Point3D(0, height, length));
//front side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p3, p2, p6, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p3, p6, p7, color));
//right side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p2, p1, p5, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p2, p5, p6, color));
//back side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p1, p0, p4, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p1, p4, p5, color));
//left side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p0, p3, p7, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p0, p7, p4, color));
//top side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p7, p6, p5, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p7, p5, p4, color));
//bottom side triangles
group.Children.Add(Triangle.CreateTriangleModelGroup(p2, p3, p0, color));
group.Children.Add(Triangle.CreateTriangleModelGroup(p2, p0, p1, color));
33. 3D Rendering
class Cuboid
{
public Cuboid(Viewport3D viewport3D, Point3D initialPosition, double length, double width, double height, Color color)
{
Model3D model = CreateModelGroup(initialPosition, length, width, height, color);
ModelVisual3D visualModel = new ModelVisual3D();
visualModel.Content = model;
viewport3D.Children.Add(visualModel);
}
private Model3D CreateModelGroup(Point3D initialPosition,double length, double width, double height, Color color)
{
Model3DGroup group = new Model3DGroup();
// *HERE* //
return group;
}
public static Point3D GetSummedPoint(Point3D p1, Point3D p2)
{
Point3D myPoint = new Point3D();
// Manipulate Coordinates
myPoint.X = p1.X + p2.X;
myPoint.Y = p1.Y + p2.Y;
myPoint.Z = p1.Z + p2.Z;
return myPoint;
}
}
34. 3D Rendering
• Now just call and play! :D
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CameraManagement cameraManagement = new CameraManagement(viewport3D);
Cuboid myFirstCuboid = new Cuboid(viewport3D, new Point3D(0, 0, 0), 40, 40, 40, Colors.Red);
}
}
36. 3D Rendering
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CameraManagement cameraManagement = new CameraManagement(viewport3D);
Cuboid myFirstCuboid = new Cuboid(viewport3D, new Point3D(0, 0, 0), 50, 60, 10, Colors.Red);
}
}
40. Project “Track-Ball”
Provided by the WPF team 3-D tools
Visit: http://www.codeplex.com/3DTools/
<Window xmlns:tools="clr-namespace:_3DTools;assembly=3DTools"... >
Then you can easily add the TrackballDecorator to your markup:
<tools:TrackballDecorator>
<Viewport3D>
...
</Viewport3D>
</tools:TrackballDecorator>
Hit Testing
70. Take a Look on my other courses
@ http://www.slideshare.net/ZGTRZGTR
Available courses to the date of this slide:
C# Starter, C# Advanced, WPF, C++.NET, XNA, OpenGL, Delphi