public void Clone()
        {
            TriangleMeshShape clone = _meshShape.Clone() as TriangleMeshShape;

            Assert.IsNotNull(clone);
            Assert.IsNotNull(clone.Mesh);
            Assert.IsTrue(clone.Mesh is TriangleMesh);
            Assert.AreSame(_mesh, clone.Mesh);
            Assert.AreEqual(_mesh.NumberOfTriangles, clone.Mesh.NumberOfTriangles);
            for (int i = 0; i < _mesh.NumberOfTriangles; i++)
            {
                Triangle t = _mesh.GetTriangle(i);

                Triangle tCloned = clone.Mesh.GetTriangle(i);

                Assert.AreEqual(t.Vertex0, tCloned.Vertex0);
                Assert.AreEqual(t.Vertex1, tCloned.Vertex1);
                Assert.AreEqual(t.Vertex2, tCloned.Vertex2);
            }
            Assert.AreEqual(_meshShape.GetAabb(Pose.Identity).Minimum, clone.GetAabb(Pose.Identity).Minimum);
            Assert.AreEqual(_meshShape.GetAabb(Pose.Identity).Maximum, clone.GetAabb(Pose.Identity).Maximum);
        }
예제 #2
0
        private MeshNode CreateMeshNode(IEnumerable <Submesh> submeshes, Color color)
        {
            var mesh = new Mesh();

            mesh.Submeshes.AddRange(submeshes);

            var material = new Material();
            BasicEffectBinding defaultEffectBinding = new BasicEffectBinding(GraphicsService, null)
            {
                LightingEnabled    = true,
                TextureEnabled     = false,
                VertexColorEnabled = false
            };

            defaultEffectBinding.Set("DiffuseColor", color.ToVector4());
            defaultEffectBinding.Set("SpecularColor", new Vector3(1, 1, 1));
            defaultEffectBinding.Set("SpecularPower", 100f);
            material.Add("Default", defaultEffectBinding);

            var triangleMesh = mesh.ToTriangleMesh();
            var shape        = new TriangleMeshShape(triangleMesh);
            var aabb         = shape.GetAabb();

            mesh.BoundingShape = new TransformedShape(
                new GeometricObject(
                    new BoxShape(aabb.Extent),
                    new Pose(aabb.Center)));

            mesh.Materials.Add(material);
            foreach (var submesh in mesh.Submeshes)
            {
                submesh.MaterialIndex = 0;
            }

            return(new MeshNode(mesh));
        }