Beispiel #1
0
        } // Renderizar().fim

        // ---]
        // [---
        private void desenharObjeto(BaseMesh obj, Propriedades3D props)
        {
            // Ajusta rotação do 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 3d
            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\textura no objeto
            for (int ncx = 0; ncx < g_meshMtl.Length; ncx++)
            {
                // Informa ao dispositivo o material a ser utilizado
                // na renderização
                device.Material = g_meshMtl[ncx];
                device.SetTexture(0, g_meshTex[ncx]);

                // Renderiza o mesh
                obj.DrawSubset(ncx);
            } // endfor
        }     // desenharObjeto().fim
Beispiel #2
0
        } // AtualizarCamera().fim

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

            device.BeginScene();

            AtualizarCamera();

            // AtualizarLuz();
            device.RenderState.Lighting = false;

            // Renderiza o modelo 3d original
            posicao = new Vector3(100.0f, 0.2f, -100.0f);
            rotacao = new Vector3(0, 0, 0);
            g_props = new Propriedades3D(posicao, rotacao);
            desenharObjeto(objeto3D, g_props);

            // Renderiza o modelo progressivo
            posicao = new Vector3(-100.0f, 0.2f, -200.0f);
            g_props = new Propriedades3D(posicao, rotacao);
            desenharObjeto(mesh_progressivo, g_props);

            // Mostra o número de vértices de cada modelo
            string info;

            info = String.Format("Modelo limpo: {0}", mesh_limpo.NumberVertices);
            MostrarMensagem(20, 20, info);

            // Repare no casting de ProgressiveMesh para BaseMesh
            info = String.Format("progressivo: {0}",
                                 ((BaseMesh)mesh_progressivo).NumberVertices);
            MostrarMensagem(220, 20, info);
            info = String.Format("original: {0}", objeto3D.NumberVertices);
            MostrarMensagem(420, 20, info);
            info = "+ Aumentar nível de detalhe       - Reduzir nível de detalhe";
            MostrarMensagem(60, this.Height - 60, info);

            device.EndScene();

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

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