Beispiel #1
0
 public void SetRenderMeshes(params Mesh[] meshes)
 {
     Models.Children.Clear();
     foreach (var mesh in meshes)
     {
         Models.Children.Add(ResourceCache.GetModel(mesh));
     }
     Models.Children.Add(new AmbientLight(Colors.White));
     RaisePropertyChanged("Models");
 }
        public void SetRenderMeshes(params Mesh[] meshes)
        {
            Models.Children.Clear();
            bool        firstMesh = true;
            BoundingBox bb        = new BoundingBox();

            _centerOfMass     = new Point3D();
            _centerOfGeometry = new Point3D();
            foreach (var mesh in meshes)
            {
                var bakedMesh = ResourceCache.GetModel(mesh);
                Models.Children.Add(bakedMesh.Mesh);
                _centerOfMass = Point3D.Add(_centerOfMass, bakedMesh.CenterOfMass.ToVector3D());
                if (firstMesh)
                {
                    bb        = bakedMesh.BoundingBox;
                    firstMesh = false;
                }
                else
                {
                    bb = BoundingBox.Merge(bb, bakedMesh.BoundingBox);
                }
                //bb = BoundingBox.Merge(bb, mesh.BoundingBox.ToSharpDxBoundingBox());
            }

            if (meshes.Length > 0)
            {
                _centerOfMass.X /= meshes.Length;
                _centerOfMass.Y /= meshes.Length;
                _centerOfMass.Z /= meshes.Length;
            }

            ClampBoundingBox(ref bb);
            _modelBoundingBox = bb;
            _centerOfGeometry = _modelBoundingBox.Center.ToPoint3D();
            ReferenceScale    = CalculateReferenceScale(_modelBoundingBox);
            //UpdateGridLines(bb);

            RaisePropertyChanged("Models");
            RefocusCenter();
            RaisePropertyChanged("ReferenceScale");
        }
 public void SetRenderMeshes(params Mesh[] meshes)
 {
     Models.Children.Clear();
     foreach (var mesh in meshes)
     {
         Models.Children.Add(ResourceCache.GetModel(mesh).Mesh);
     }
     if (Models.Children.First() != null)
     {
         var target = Models.Children.First().Bounds.Location;
         //Creates a fake ambient light that does not burn corners.
         Models.Children.Add(new PointLight(Colors.White, new Point3D(50, 50, 0)));
         Models.Children.Add(new PointLight(Colors.White, new Point3D(-50, -50, 0)));
     }
     else
     {
         Models.Children.Add(new AmbientLight(Colors.White));
     }
     RaisePropertyChanged("Models");
 }