Beispiel #1
0
        ///-------------------------------------------------------------------------------------------------
        /// <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);
			}
		}