Пример #1
0
        } // Renderizar()

        // ---]

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

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

            // Tranfere posição e rotação para o mundo
            device.Transform.World = obj_rot * obj_pos;

            // Prepara e aplica material na caixa
            Material obj_mtl = new Material();

            obj_mtl.Diffuse = props.color;
            obj_mtl.Ambient = props.color;

            // Informa ao dispositivo o material a ser utilizado
            // na renderização
            device.Material = obj_mtl;

            // Renderiza o mesh
            obj.DrawSubset(0);
        } // desenharObjeto()
Пример #2
0
        } // AtualizarCamera()

        // [---
        public void Renderizar()
        {
            // Limpa os dispositivos e os buffers de apoio
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0);

            device.BeginScene();
            // (...) Todo o código de desenhar vai aqui

            // Atualiza a luz e camera
            AtualizarCamera();
            AtualizarLuz();

            // Deleta o objeto3d se ele existir neste ponto porque
            // ele será criado mais adiante no código.
            if (objeto3D != null)
            {
                objeto3D.Dispose();
            }

            // Cria uma esfera lowpoly que será renderizada em wireframe
            device.RenderState.FillMode = FillMode.WireFrame;
            objeto3D = Mesh.Sphere(device, 2.0f, 4, 4);
            // Desenha essa esfera no canto superior-esquerdo
            posicao       = new Vector3(2.5f, 2.5f, -7.0f);
            rotacao       = new Vector3(-10, 10, 0);
            g_props       = new Propriedades3D(posicao, rotacao);
            g_props.color = Color.SaddleBrown;
            desenharObjeto(objeto3D, g_props);

            // Deleta esfera anterior e cria uma outra para ser
            // retalhada
            objeto3D.Dispose();
            objeto3D = Mesh.Sphere(device, 2.0f, 4, 4);
            // Gera a esfera retalhada
            gerarModeloRetalhado(ref objeto3D, nTesselacao);
            // Posiciona-a no canto inferior-esquerdo
            g_props.position = new Vector3(2.5f, -2.0f, -7.0f);
            desenharObjeto(objeto3D, g_props);

            // Vamos gerar agora as versões sólidas das esferas.
            // Deleta a esfera anterior e estabelece o modo sólido
            // de renderização
            objeto3D.Dispose();
            device.RenderState.FillMode = FillMode.Solid;
            // Gera a esfera retalhada e coloca-a no canto inferior-direito
            objeto3D = Mesh.Sphere(device, 2.0f, 4, 4);
            gerarModeloRetalhado(ref objeto3D, nTesselacao);
            g_props.position = new Vector3(-2.5f, -2.0f, -7.0f);
            desenharObjeto(objeto3D, g_props);
            String info = String.Format("nVértices: {0}", objeto3D.NumberVertices);

            MostrarMensagem(420, 10, info);

            // Deleta a esfera anterior e renderiza a versão lowpoly
            // no canto superior-direito
            objeto3D.Dispose();
            objeto3D         = Mesh.Sphere(device, 2.0f, 4, 4);
            g_props.position = new Vector3(-2.5f, 2.5f, -7.0f);
            desenharObjeto(objeto3D, g_props);

            // Mostra o nível de tesselação e dica de teclado
            info = String.Format("nTesselação: {0}", nTesselacao.ToString());
            MostrarMensagem(20, 10, info);
            info = " +  Aumentar nível de detalhe       - Reduzir nível de detalhe";
            MostrarMensagem(20, this.Height - 60, info);

            device.EndScene();

            // Apresenta a cena renderizada na tela
            device.Present();

            // Libera a janela para processar outros eventos
            Application.DoEvents();
        } // Renderizar()