Beispiel #1
0
        public void CreateMesh()
        {
            Point3DCollection point3DCollection = new Point3DCollection();
              //Front
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_min.Z));
              //Back
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_max.Z));
              //Left
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_max.Z));
              //Right
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_max.Z));
              //Bottom
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_min.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_min.Y, m_min.Z));
              //Top
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_max.Z));
              point3DCollection.Add(new Point3D(m_max.X, m_max.Y, m_min.Z));
              point3DCollection.Add(new Point3D(m_min.X, m_max.Y, m_min.Z));

              Vector3DCollection normals = new Vector3DCollection();
              normals.Add(new Vector3D(0, 0, 1));
              normals.Add(new Vector3D(0, 0, 1));
              normals.Add(new Vector3D(0, 0, 1));
              normals.Add(new Vector3D(0, 0, 1));

              normals.Add(new Vector3D(0, 0, -1));
              normals.Add(new Vector3D(0, 0, -1));
              normals.Add(new Vector3D(0, 0, -1));
              normals.Add(new Vector3D(0, 0, -1));

              normals.Add(new Vector3D(-1, 0, 0));
              normals.Add(new Vector3D(-1, 0, 0));
              normals.Add(new Vector3D(-1, 0, 0));
              normals.Add(new Vector3D(-1, 0, 0));

              normals.Add(new Vector3D(1, 0, 0));
              normals.Add(new Vector3D(1, 0, 0));
              normals.Add(new Vector3D(1, 0, 0));
              normals.Add(new Vector3D(1, 0, 0));

              normals.Add(new Vector3D(0, -1, 0));
              normals.Add(new Vector3D(0, -1, 0));
              normals.Add(new Vector3D(0, -1, 0));
              normals.Add(new Vector3D(0, -1, 0));

              normals.Add(new Vector3D(0, 1, 0));
              normals.Add(new Vector3D(0, 1, 0));
              normals.Add(new Vector3D(0, 1, 0));
              normals.Add(new Vector3D(0, 1, 0));

              Int32Collection triangles = new Int32Collection();

              //for (int i = 1; i < 6; i += 2)
              //{
              //  triangles.Add(0 + (i * 4));
              //  triangles.Add(1 + (i * 4));
              //  triangles.Add(3 + (i * 4));
              //  triangles.Add(1 + (i * 4));
              //  triangles.Add(2 + (i * 4));
              //  triangles.Add(3 + (i * 4));
              //}

              //for (int i = 0; i < 6; i += 2)
              //{
              //  triangles.Add(3 + (i * 4));
              //  triangles.Add(1 + (i * 4));
              //  triangles.Add(0 + (i * 4));
              //  triangles.Add(3 + (i * 4));
              //  triangles.Add(2 + (i * 4));
              //  triangles.Add(1 + (i * 4));
              //}

              for (int i = 0; i < 6; i++)
              {
            triangles.Add(0 + (i * 4));
            triangles.Add(1 + (i * 4));
            triangles.Add(0 + (i * 4));
            triangles.Add(1 + (i * 4));
            triangles.Add(2 + (i * 4));
            triangles.Add(1 + (i * 4));
            triangles.Add(2 + (i * 4));
            triangles.Add(3 + (i * 4));
            triangles.Add(2 + (i * 4));
            triangles.Add(3 + (i * 4));
            triangles.Add(0 + (i * 4));
            triangles.Add(3 + (i * 4));
              }

              MeshGeometry3D meshGeometry3D = new MeshGeometry3D
            {
              Positions = point3DCollection,
              Normals = normals,
              TriangleIndices = triangles
            };

              m_geometryModel3D = new GeometryModel3D();
              GeometryModel3D.Geometry = meshGeometry3D.ToWireframe(0.1);
              GeometryModel3D.Material = new DiffuseMaterial(new SolidColorBrush(m_color));
        }