示例#1
0
        } // Renderizar().fim

        // ---]
        // [---
        private void desenharObjeto(Mesh obj, Propriedades3D props)
        {
            // Ajusta rotação da objeto 3d
            Matrix obj_rot = Matrix.RotationX(props.rotation.X + angulo) *
                             Matrix.RotationY(props.rotation.Y) *
                             Matrix.RotationZ(props.rotation.Z);

            // Ajusta posição do objeto
            Matrix obj_pos = Matrix.Translation(props.position);

            // Atualiza ângulo
            angulo += 0.01f;

            // Tranfere posição e rotação para o mundo
            // Atualiza variáveis do efeito
            mundo = obj_rot * obj_pos;
            Matrix camera = mundo * visao * projecao;

            efeito.SetValue("Camera", camera);

            // Renderiza o mesh texturizado
            for (int ncx = 0; ncx < g_meshTex.Length; ncx++)
            {
                device.SetTexture(0, g_meshTex[ncx]);
                obj.DrawSubset(ncx);
            } // endfor
        }     // desenharObjeto().fim
示例#2
0
        } // InicializarEfeito()

        // ---]
        // [---
        public void Renderizar()
        {
            // Limpa os dispositivos e os buffers de apoio
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Azure, 1.0f, 0);
            device.BeginScene();
            // <b>
            // Renderiza o mesh usando textura negativa
            efeito.Technique = "texturaNegativa";
            int numPasses = efeito.Begin(0);

            for (int ncx = 0; ncx < numPasses; ncx++)
            {
                efeito.Pass(ncx);
                // Desenha o primeiro mesh
                posicao = new Vector3(-150.0f, 40.0f, -100.0f);
                rotacao = new Vector3(0, 0, 0);
                g_props = new Propriedades3D(posicao, rotacao);
                desenharObjeto(objeto3D, g_props);
            } // endfor
            efeito.End();

            // Renderiza o mesh usando textura original
            efeito.Technique = "texturaOriginal";
            numPasses        = efeito.Begin(0);
            for (int ncx = 0; ncx < numPasses; ncx++)
            {
                efeito.Pass(ncx);
                // Desenha o segundo mesh
                g_props.position.X = 100.0f; g_props.position.Y = 0.2f;
                desenharObjeto(objeto3D, g_props);
            } // endfor
            efeito.End();
            // </b>
            device.EndScene();
            device.Present();
            Application.DoEvents();
        } // Renderizar().fim