///------------------------------------------------------------------------------------------------- /// <summary> Creates instances of all the controllers. </summary> ///------------------------------------------------------------------------------------------------- void CreateNodeList() { var materialReferences = new MaterialReferenceList(); if (mShaderDataProvider != null) { // create a list of every shader used foreach (var effect in mShaderDataProvider.GetEffects()) { string effectName = ColladaUtilities.FormatName(Path.GetFileNameWithoutExtension(effect.Name), " ", "_"); materialReferences.Add(new MaterialReference( effectName, ColladaUtilities.BuildUri(ColladaElement.FormatID <Fx.ColladaMaterial>(effectName)), effectName)); } } // create the controller instances var geometrySetList = mModelDataProvider.GetGeometries(); for (int i = 0; i < geometrySetList.Count; i++) { var node = CreateNode(geometrySetList[i].Name, "", geometrySetList[i].Name, Enums.ColladaNodeType.NODE); // If there are no bones instance the static geometry, otherwise create a skinned instance string name = ColladaUtilities.FormatName(geometrySetList[i].Name, " ", "_"); if (mModelDataProvider.GetBones().Count == 0) { node.Add( CreateInstanceGeometry( ColladaUtilities.BuildUri(ColladaElement.FormatID <Core.ColladaGeometry>(name)), name, materialReferences ) ); } else { node.Add( CreateInstanceController( ColladaUtilities.BuildUri(ColladaElement.FormatID <Core.ColladaController>(name)), name, materialReferences ) ); } listNode.Add(node); } }
/// <summary> /// Creates nodes for all the geometry elements in the collada file /// </summary> void CreateNodeList() { // create a geometry instance for each geometry that has been created for (int i = 0; i < listGeometry.Count; i++) { string url = ColladaUtilities.BuildUri(listGeometry[i].ID); string name = listGeometry[i].ID; Core.ColladaNode node = CreateNode(name, "", name, Enums.ColladaNodeType.NODE); node.Add(CreateInstanceGeometry(url, listGeometry[i].Name, new MaterialReferenceList())); listNode.Add(node); } }
/// <summary> /// Creates nodes for all the geometry elements in the collada file /// </summary> void CreateNodeList() { // create a list of all the shaders used in the file //List<string> shader_list = new List<string>(); //for (int shader_index = 0; shader_index < shaderInfo.GetShaderCount(); shader_index++) // shader_list.Add(ColladaUtilities.FormatName(Path.GetFileNameWithoutExtension(shaderInfo.GetShaderName(shader_index)), " ", "_")); // create a controller instance for each geometry for (int i = 0; i < listGeometry.Count; i++) { string url = ColladaUtilities.BuildUri(listGeometry[i].ID); string name = listGeometry[i].ID; Core.ColladaNode node = CreateNode(name, "", name, Enums.ColladaNodeType.NODE); node.Add(CreateInstanceGeometry(url, listGeometry[i].Name, new MaterialReferenceList())); listNode.Add(node); } }
///------------------------------------------------------------------------------------------------- /// <summary> Builds external reference URI. </summary> /// <param name="externalReference"> The external reference source. </param> /// <param name="rootDirectory"> Pathname of the root directory. </param> /// <param name="id"> The identifier of the element to referenec. </param> /// <returns> The absolute URI of the external element reference. </returns> ///------------------------------------------------------------------------------------------------- public static string BuildExternalReference(IColladaExternalReference externalReference, string rootDirectory, string id) { return(ColladaUtilities.BuildUri("file://", Path.Combine(rootDirectory, externalReference.GetRelativeURL()) + ".dae", id)); }
///------------------------------------------------------------------------------------------------- /// <summary> Creates nodes for all the geometry elements in the collada file. </summary> ///------------------------------------------------------------------------------------------------- private void CreateNodeList() { // Create the list of materials for the geometry to use var materialReferences = new MaterialReferenceList(); Action <string> addMaterialRef = effectName => { string name = ColladaUtilities.FormatName(Path.GetFileNameWithoutExtension(effectName), " ", "_"); materialReferences.Add(new MaterialReference( effectName, ColladaUtilities.BuildUri(ColladaElement.FormatID <Fx.ColladaMaterial>(name)), name)); }; if (mShaderDataProvider != null) { // create a list of every shader used if (mBSPDataProvider.IncludeRenderMesh) { foreach (var effect in mShaderDataProvider.GetEffects()) { addMaterialRef(effect.Name); } } // if portals are included add the portals shader to the names if (mBSPDataProvider.IncludePortals) { addMaterialRef("portals"); } // if fogplanes are included add the fogplanes shader to the names if (mBSPDataProvider.IncludeFogPlanes) { addMaterialRef("fogplanes"); } } // Create a node with a geometry instance for all included geometry var definition = mTagManager.TagDefinition as H1.Tags.structure_bsp_group; Func <int, Core.ColladaNode> addGeometryInstance = geometryIndex => { string name = listGeometry[geometryIndex].Name; var node = CreateNode(name, "", name, Enums.ColladaNodeType.NODE); string url = ColladaUtilities.BuildUri(listGeometry[geometryIndex].ID); node.Add(CreateInstanceGeometry(url, name, materialReferences)); return(node); }; int geometry_offset = 0; if (mBSPDataProvider.IncludeRenderMesh) { // create geometry instance for all of the lightmaps for (int i = 0; i < definition.Lightmaps.Count; i++) { listNode.Add(addGeometryInstance(geometry_offset + i)); } geometry_offset += definition.Lightmaps.Count; } if (mBSPDataProvider.IncludePortals) { // create geometry instance for all of the portal meshes for (int i = 0; i < definition.ClusterPortals.Count; i++) { listNode.Add(addGeometryInstance(geometry_offset + i)); } geometry_offset += definition.ClusterPortals.Count; } if (mBSPDataProvider.IncludeFogPlanes) { // create geometry instance for all of the fogplane meshes for (int i = 0; i < definition.FogPlanes.Count; i++) { listNode.Add(addGeometryInstance(geometry_offset + i)); } geometry_offset += definition.FogPlanes.Count; } }