Hello, I'm trying to make a 3D plane in C#, it runs with no error, but why the plane doesn't show up? My code is below:
<Window x:Class="Water.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="630" Width="1120" KeyDown="Window_KeyDown"><Grid><Viewport3D x:Name="Water" ClipToBounds="True"><!--Camera--><Viewport3D.Camera><PerspectiveCamera x:Name="MainCamera" Position="0,0,30" LookDirection="0,0,-1" FieldOfView="60"><PerspectiveCamera.Transform><RotateTransform3D><RotateTransform3D.Rotation><AxisAngleRotation3D x:Name="CameraRoate" Axis="0,1,0" Angle="0"/></RotateTransform3D.Rotation></RotateTransform3D></PerspectiveCamera.Transform></PerspectiveCamera></Viewport3D.Camera><!--Lights--><ModelVisual3D><ModelVisual3D.Content><Model3DGroup><DirectionalLight Color="#FFFFFF" Direction="0.6, -0.5, -0.6"/><DirectionalLight Color="#FFFFFF" Direction="-0.6, -0.5, -0.6"/><AmbientLight Color="#FFFFFF"/></Model3DGroup></ModelVisual3D.Content></ModelVisual3D><!--Water--><ModelVisual3D x:Name="WaterMesh"><ModelVisual3D.Content><GeometryModel3D><!--Front Texture--><GeometryModel3D.Material><MaterialGroup><DiffuseMaterial><DiffuseMaterial.Brush><SolidColorBrush Color="BlueViolet"/></DiffuseMaterial.Brush></DiffuseMaterial></MaterialGroup></GeometryModel3D.Material><!--Back Texture--><GeometryModel3D.BackMaterial><DiffuseMaterial><DiffuseMaterial.Brush><ImageBrush ImageSource="Texture\water.jpg"/></DiffuseMaterial.Brush></DiffuseMaterial></GeometryModel3D.BackMaterial></GeometryModel3D></ModelVisual3D.Content><!--Set Rotation Angle--><ModelVisual3D.Transform><RotateTransform3D><RotateTransform3D.Rotation><AxisAngleRotation3D x:Name="WaterRotate" Axis="1,0,0" Angle="0"/></RotateTransform3D.Rotation></RotateTransform3D></ModelVisual3D.Transform></ModelVisual3D></Viewport3D></Grid></Window>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Media.Media3D; using System.Windows.Media.Imaging; namespace Water { public class WaterGrid : ModelVisual3D { //<ModelVisual3D> -> <ModelVisual3D.Content> -> //<GeometryModel3D> -> <GeometryModel3D.Geometry> -> //<MeshGeometry3D /> public WaterGrid() { this.Content = new GeometryModel3D(); (this.Content as GeometryModel3D).Geometry = Mesh(); } internal Geometry3D Mesh() { MeshGeometry3D mesh = new MeshGeometry3D(); mesh.Positions.Add(new Point3D(-10, 10, 0)); mesh.Positions.Add(new Point3D(-10, -10, 0)); mesh.Positions.Add(new Point3D( 10, -10, 0)); mesh.Positions.Add(new Point3D( 10, 10, 0)); mesh.TriangleIndices.Add(0); mesh.TriangleIndices.Add(1); mesh.TriangleIndices.Add(2); mesh.TriangleIndices.Add(2); mesh.TriangleIndices.Add(3); mesh.TriangleIndices.Add(0); mesh.Normals.Add(new Vector3D(0, 0, 1)); mesh.Normals.Add(new Vector3D(0, 0, 1)); mesh.Normals.Add(new Vector3D(0, 0, 1)); mesh.Normals.Add(new Vector3D(0, 0, 1)); mesh.TextureCoordinates.Add(new Point(0, 0)); mesh.TextureCoordinates.Add(new Point(0, 1)); mesh.TextureCoordinates.Add(new Point(1, 1)); mesh.TextureCoordinates.Add(new Point(1, 0)); return mesh; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Media.Media3D; namespace Water { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ModelVisual3D model = new ModelVisual3D(); WaterGrid mesh = new WaterGrid(); WaterMesh.Children.Add(model); } } }