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