public CoordinateSystem(CoordinateSystem cs) : this(cs.Type, cs.Up, cs.Right, cs.Meter) { }
// 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); } } }
public static Matrix ConversionMatrix( CoordinateSystem Source, CoordinateSystem Target) { var conversionMatrix = MatrixToDNMatrix(Source.Matrix).LU().Solve(MatrixToDNMatrix(Target.Matrix)); return DNMatrixToMatrix(conversionMatrix); }