///------------------------------------------------------------------------------------------------- /// <summary> Creates controllers to skin each geometry in the collada file. </summary> ///------------------------------------------------------------------------------------------------- void CreateControllerList() { var boneList = mModelDataProvider.GetBones(); // if there are no nodes then no skinning is possible if (boneList.Count == 0) { return; } // create a controller for each geometry var geometrySetList = mModelDataProvider.GetGeometries(); for (int i = 0; i < geometrySetList.Count; i++) { var geometrySet = geometrySetList[i]; var skinData = new Skin(geometrySet.Name, listGeometry[i].ID); // create a list of vertex weights from all of the geometry parts foreach (var part in geometrySet.Geometry.Parts) { foreach (var vertex in part.UncompressedVertices) { var vertex_weight = new Skin.VertexWeight(); int node1 = vertex.NodeIndex1; int node2 = vertex.NodeIndex2; // if the bone index count is 0 then the index references the main node list, // otherwise it references a local node map for this part if (part.NodeMapCount != 0) { node1 = part.NodeMap[node1]; node2 = (node2 != -1 ? part.NodeMap[node2].Value : node2); } vertex_weight.AddWeight(node1, vertex.NodeWeight1); // if the first weight is 1 the vertex is weighted to one bone only so the second weight is not needed if (vertex.NodeWeight1 != 1) { vertex_weight.AddWeight(node2, vertex.NodeWeight2); } skinData.AddVertexWeight(vertex_weight); } } // create the controller element CreateSkinController(skinData); } }
///------------------------------------------------------------------------------------------------- /// <summary> Creates controllers to skin each geometry in the collada file. </summary> ///------------------------------------------------------------------------------------------------- void CreateControllerList() { var boneList = mModelDataProvider.GetBones(); // if there are no nodes then no skinning is possible if (boneList.Count == 0) { return; } // create a controller for each geometry var geometrySetList = mModelDataProvider.GetGeometries(); for (int i = 0; i < geometrySetList.Count; i++) { var geometrySet = geometrySetList[i]; var skinData = new Skin(geometrySet.Name, listGeometry[i].ID); // create a list of vertex weights from all of the geometry parts foreach (var part in geometrySet.Geometry.Parts) { foreach (var vertex in part.UncompressedVertices) { var vertex_weight = new Skin.VertexWeight(); int node1 = vertex.NodeIndex1; int node2 = vertex.NodeIndex2; // if the bone index count is 0 then the index references the main node list, // otherwise it references a local node map for this part if (part.NodeMapCount != 0) { node1 = part.NodeMap[node1]; node2 = (node2 != -1 ? part.NodeMap[node2].Value : node2); } vertex_weight.AddWeight(node1, vertex.NodeWeight1); // if the first weight is 1 the vertex is weighted to one bone only so the second weight is not needed if (vertex.NodeWeight1 != 1) { vertex_weight.AddWeight(node2, vertex.NodeWeight2); } skinData.AddVertexWeight(vertex_weight); } } // create the controller element CreateSkinController(skinData); } }