} // 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
} // 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