Пример #1
0
        ///-------------------------------------------------------------------------------------------------
        /// <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);
            }
        }
Пример #4
0
 ///-------------------------------------------------------------------------------------------------
 /// <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));
 }
Пример #5
0
        ///-------------------------------------------------------------------------------------------------
        /// <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;
            }
        }