/// <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(); } } }
/// <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(); } } }
/// <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); }
/// <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(); }