Exemplo n.º 1
0
        /// <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();
            }
        }