/// <summary> /// Renderiza la malla, si esta habilitada. /// Para que haya animacion se tiene que haber seteado una y haber /// llamado previamente al metodo updateAnimation() /// Sino se renderiza la pose fija de la malla /// </summary> public void Render() { if (!enabled) { return; } //Actualizar transformacion de malla con el default. if (AutoTransformEnable) { UpdateMeshTransform(); } //Cargar VertexDeclaration D3DDevice.Instance.Device.VertexDeclaration = vertexDeclaration; //Activar AlphaBlending si corresponde activateAlphaBlend(); //Cargar matrices para el shader setShaderMatrix(); //Enviar al shader el array de matrices de huesos para poder hacer skinning en el Vertex Shader effect.SetValue("bonesMatWorldArray", TGCMatrix.ToMatrixArray(boneSpaceFinalTransforms)); //Renderizar malla if (!renderSkeleton) { //Renderizar segun el tipo de Render de la malla effect.Technique = technique; var numPasses = effect.Begin(0); switch (renderType) { case MeshRenderType.VERTEX_COLOR: //Hacer reset de texturas TexturesManager.Instance.clear(0); TexturesManager.Instance.clear(1); //Iniciar Shader e iterar sobre sus Render Passes for (var n = 0; n < numPasses; n++) { //Iniciar pasada de shader effect.BeginPass(n); d3dMesh.DrawSubset(0); effect.EndPass(); } break; case MeshRenderType.DIFFUSE_MAP: //Hacer reset de Lightmap TexturesManager.Instance.clear(1); //Iniciar Shader e iterar sobre sus Render Passes for (var n = 0; n < numPasses; n++) { //Dibujar cada subset con su DiffuseMap correspondiente for (var i = 0; i < materials.Length; i++) { //Setear textura en shader TexturesManager.Instance.shaderSet(effect, "texDiffuseMap", diffuseMaps[i]); //Iniciar pasada de shader effect.BeginPass(n); d3dMesh.DrawSubset(i); effect.EndPass(); } } break; } //Finalizar shader effect.End(); } //Renderizar esqueleto else { renderSkeletonMesh(); } //Desactivar alphaBlend resetAlphaBlend(); //Renderizar attachments foreach (var attach in attachments) { attach.updateMeshTransform(transform); attach.Mesh.Render(); } }