Exemplo n.º 1
0
        public CoordinateSystem(CoordinateSystem cs)
            : this(cs.Type,
				cs.Up,
				cs.Right,
				cs.Meter)
        {
        }
Exemplo n.º 2
0
        // Summary:
        //     Initializes a new instance of Model.
        // This will work only if the COLLADA geometry has been processed for vertex array
        // Parameters:
        //   _document:
        //      The collada document
        public Model(Document _doc)
        {
            // internals
            doc = _doc;

            // create coordinate systems
            coordinateSystemSource = doc.CoordinateSystem;
            coordinateSystemTarget = new CoordinateSystem(
                CoordinateSystemType.LeftHanded);

            // create meshes
            meshes = new Dictionary<string, CMesh>();
            foreach (Document.Geometry geo in doc.geometries)
            {
                // only load valid meshes
                if (geo.mesh != null && geo.mesh.primitives != null && geo.mesh.primitives.Count > 0)
                    meshes[geo.id] = new CMesh(this, geo);
                else
                    COLLADAUtil.Log(COLLADALogType.Warning, "Geometry '" + geo.id + "' seems invalid ... skipping.");
            }

            // skinned meshes will be created in ReadNode method, because the only way to tell if a mesh
            // needs skinning is by reading the scene graph of collada.
            // since skinned meshes need additional data in vertex and index buffers this is a litte dirty.
            skinnedMeshes = new Dictionary<string, CSkinnedMesh>();

            // create materials
            // Need a list of meshPart per material...., and most probably a link from the meshPart to the mesh
            basicMaterials = new Dictionary<string, BasicMaterial>();
            textureBindings = new Dictionary<string, Dictionary<string, uint>>();
            foreach (Document.Material material in doc.materials)
                basicMaterials[material.id] = CreateBasicMaterial(this, material);

            // create cameras
            cameras = new Dictionary<string, Camera>();
            foreach (Document.Camera camera in doc.cameras)
                cameras[camera.id] = new Camera(this, camera);

            // get the model from the instanced visual scene
            Document.VisualScene scene = doc.dic[doc.instanceVisualScene.url.Fragment] as Document.VisualScene;
            if (scene == null) throw new Exception("NO VISUAL SCENE (MODEL) IN DOCUMENT");

            // recursive call to load scene
            bones = new Dictionary<string, Bone>();
            instanceMeshes = new List<InstanceMesh>();
            instanceCameras = new List<InstanceCamera>();
            root = new Model.Bone(this,null,scene.id,scene.name, "VISUAL_SCENE");

            foreach (Document.Node node in scene.nodes)
                root.Children.Add(ReadNode(root, node));

            // create animations
            animations = new Dictionary<string, Animation>();
            foreach (Document.Animation animation in doc.animations)
            {
                try
                {
                    animations.Add(animation.id, new Animation(doc, this, animation));
                }
                catch (ColladaException e)
                {
                    COLLADAUtil.Log(e);
                }
            }
        }
Exemplo n.º 3
0
 public static Matrix ConversionMatrix(
     CoordinateSystem Source,
     CoordinateSystem Target)
 {
     var conversionMatrix = MatrixToDNMatrix(Source.Matrix).LU().Solve(MatrixToDNMatrix(Target.Matrix));
     return DNMatrixToMatrix(conversionMatrix);
 }