} // 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 uma 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()
} // AtualizarCamera() 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(); // (...) Todo o código de desenhar vai aqui // Aguarda um momento e gera um número de 0 a 5. int index = ((Environment.TickCount - InitialTickCount) / 2000) % 6; // Atualiza a câmera AtualizarCamera(); AtualizarLuz(); switch (index) { case 0: objeto3D = Mesh.Box(device, 1.0f, 1.0f, 1.0f); posicao = new Vector3(0.0f, 0.0f, 2.0f); rotacao = new Vector3(-10, 10, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.Brown; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: box"; break; case 1: objeto3D = Mesh.Polygon(device, 2.0f, 8); posicao = new Vector3(0.0f, 0.0f, -5.0f); rotacao = new Vector3(-10, 10, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.DarkGreen; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: Polygon"; break; case 2: objeto3D = Mesh.Teapot(device); posicao = new Vector3(0.0f, 0.0f, -2.0f); rotacao = new Vector3(5, 0, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.Red; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: Teapot"; break; case 3: objeto3D = Mesh.Sphere(device, 2.0f, 32, 32); posicao = new Vector3(0.0f, 0.0f, -5.0f); rotacao = new Vector3(-10, 10, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.DarkOrange; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: Sphere"; break; case 4: objeto3D = Mesh.Torus(device, 0.5f, 1.0f, 32, 32); posicao = new Vector3(0.0f, 0.0f, -5.0f); rotacao = new Vector3(-10, 10, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.DarkRed; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: Torus"; break; case 5: objeto3D = Mesh.Cylinder(device, 0.5f, 1.0f, 5.0f, 32, 32); posicao = new Vector3(0.0f, 0.0f, -5.0f); rotacao = new Vector3(-10, 10, 0); g_props = new Propriedades3D(posicao, rotacao); g_props.color = Color.DarkViolet; desenharObjeto(objeto3D, g_props); this.Text = " prj_Meshes01x: Cylinder"; break; } // end switch device.EndScene(); // Apresenta a cena renderizada na tela device.Present(); // Libera a janela para processar outros eventos Application.DoEvents(); } // Renderizar()