Пример #1
0
        /// <summary>
        /// Render all models in this Gma model using the given model renderer.
        /// </summary>
        /// <param name="renderer">The model renderer to use to render the objects.</param>
        public void Render(IRenderer renderer)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer");
            }

            foreach (GmaEntry entry in Items)
            {
                if (entry != null)
                {
                    // Define a new object for the model
                    renderer.BeginObject(entry.Name);
                    entry.ModelObject.Render(renderer);
                    renderer.EndObject();
                }
                else
                {
                    // Define an empty model in order to make the entries in the GMA
                    // correspond correctly to the entries in the model tree
                    renderer.BeginObject("EmptyObject");
                    renderer.EndObject();
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Render all models in this Gma model using the given model renderer.
        /// </summary>
        /// <param name="renderer">The model renderer to use to render the objects.</param>
        public void Render(IRenderer renderer)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer");
            }

            foreach (GmaEntry entry in Items)
            {
                if (entry != null)
                {
                    try
                    {
                        // Define a new object for the model
                        renderer.BeginObject(entry.Name);
                        entry.ModelObject.Render(renderer);
                        renderer.EndObject();
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(("Model " + entry.Name + " failed to render for the following reason:\n\n" + e.Message), "Render Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        renderer.EndObject();
                        renderer.EndObject();
                        renderer.ClearMaterialList();
                    }
                }
                else
                {
                    // Define an empty model in order to make the entries in the GMA
                    // correspond correctly to the entries in the model tree
                    renderer.BeginObject("EmptyObject");
                    renderer.EndObject();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Render all models in this Gma model using the given model renderer.
        /// </summary>
        /// <param name="renderer">The model renderer to use to render the objects.</param>
        public List <int> Render(IRenderer renderer, string modelName)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer");
            }

            List <int> textureIds = new List <int>();

            foreach (GmaEntry entry in Items)
            {
                if (entry != null)
                {
                    if (entry.Name.Equals(modelName))
                    {
                        // Define a new object for the model
                        renderer.BeginObject(entry.Name);
                        entry.ModelObject.Render(renderer);
                        renderer.EndObject();
                        foreach (GcmfMaterial mat in entry.ModelObject.Materials)
                        {
                            if (!textureIds.Contains(mat.TextureIdx))
                            {
                                textureIds.Add(mat.TextureIdx);
                            }
                        }
                    }
                }
            }
            return(textureIds);
        }
Пример #4
0
        /// <summary>
        /// Render this Gcmf object using the given renderer.
        /// </summary>
        public void Render(IRenderer renderer)
        {
            GcmfRenderContext context = new GcmfRenderContext(this);

            // Set up the default transform matrix indexes in the context
            // Those may get patched later in each triangle mesh
            // Note that those are not re-set for every mesh!
            // The specific indexes set on one mesh may affect the next meshes
            Array.Copy(TransformMatrixDefaultIdxs, context.TransformMatrixIdxs, 8);

            // Set up the materials required to render each mesh
            for (int i = 0; i < Materials.Count; i++)
            {
                Materials[i].Render(renderer, i);
            }

            // Render each mesh
            for (int i = 0; i < Meshes.Count; i++)
            {
                renderer.BeginObject(string.Format("Mesh{0}", i));
                Meshes[i].RenderInternal(renderer, context);
                renderer.EndObject();
            }

            // Clean up the materials in order to have a clean ground for the next object
            renderer.ClearMaterialList();
        }