archivo.xaml
<Window x:Class="Prueba.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="EjemploCuadrado" Height="350" Width="525"> <Grid> <DockPanel Width="Auto" VerticalAlignment="Stretch" Height="Auto" HorizontalAlignment="Stretch" Grid.ColumnSpan="1" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0" Grid.RowSpan="1"> <StackPanel> <StackPanel.Background> <LinearGradientBrush> <GradientStop Color="White" Offset="0"/> <GradientStop Color="DarkKhaki" Offset=".3"/> <GradientStop Color="DarkKhaki" Offset=".7"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </StackPanel.Background> <StackPanel Margin="10"> <Button Name="simpleButton" Click="CuadradoButtonClick">Cuadrado</Button> </StackPanel> </StackPanel> <Viewport3D Name="mainViewport" ClipToBounds="True"> <Viewport3D.Camera> <PerspectiveCamera FarPlaneDistance="100" LookDirection="1,-10,1" UpDirection="0,1,0" NearPlaneDistance="1" Position="1,20,1" FieldOfView="70" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <DirectionalLight Color="White" Direction="-2,-3,-1" /> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D> </DockPanel> </Grid> </Window>
archivo.xaml.cs
namespace Prueba { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void CuadradoButtonClick(object sender, RoutedEventArgs e) { MeshGeometry3D mallaCuadrado = new MeshGeometry3D(); // Puntos Primer Triangulo Point3D point0 = new Point3D(0, 0, 0); Point3D point1 = new Point3D(0, 0, 5); Point3D point2 = new Point3D(5, 0, 0); // Puntos Segundo Triangulo Point3D point3 = new Point3D(0, 0, 5); Point3D point4 = new Point3D(5, 0, 5); Point3D point5 = new Point3D(5, 0, 0); // Vertices Primer Triangulo mallaCuadrado.Positions.Add(point0); mallaCuadrado.Positions.Add(point1); mallaCuadrado.Positions.Add(point2); // Vertices Segundo Triangulo mallaCuadrado.Positions.Add(point3); mallaCuadrado.Positions.Add(point4); mallaCuadrado.Positions.Add(point5); // Indices Primer Triangulo (Sentido Contrario Agujas Reloj Cara Visible). mallaCuadrado.TriangleIndices.Add(0); mallaCuadrado.TriangleIndices.Add(1); mallaCuadrado.TriangleIndices.Add(2); // Indices Segundo Triangulo (Sentido Contrario Agujas Reloj Cara Visible). mallaCuadrado.TriangleIndices.Add(3); mallaCuadrado.TriangleIndices.Add(4); mallaCuadrado.TriangleIndices.Add(5); Vector3D normal = new Vector3D(0,1, 0); // Normales Primer Triangulo mallaCuadrado.Normals.Add(normal); mallaCuadrado.Normals.Add(normal); mallaCuadrado.Normals.Add(normal); // Normales Segundo Triangulo mallaCuadrado.Normals.Add(normal); mallaCuadrado.Normals.Add(normal); mallaCuadrado.Normals.Add(normal); Material material1 = new DiffuseMaterial(new SolidColorBrush(Colors.DarkKhaki)); GeometryModel3D geometriaCuadrado = new GeometryModel3D(mallaCuadrado, material1); ModelVisual3D modelo = new ModelVisual3D(); modelo.Content = geometriaCuadrado; this.mainViewport.Children.Add(modelo); } } }
Resultado:
