Descricao O objetivo do primeiro trabalho de implementacao da disciplina de Computacao Grafica e escrever um programa capaz de modelar e manipular malhas de poligonos, utilizando a biblioteca OpenGL. As seguintes funcionalidades devem ser implementadas:Especifique uma camera virtual com a posicao e orientacao arbitrarias;Use o buffer de profundidade para a obtencao de oclusao adequada na renderizacao final;Utilizar diferentes primitivas para desenhar os objetos.Realizar backface abate para reduzir o numero de primitivos realmente tirados;Criar efeitos de sombreamento;Efeitos de zoom.Implementacao Para a implementacao do trabalho foi desenvolvido um programa em C++, utilizando o ambiente de desenvolvimento Visual C++ e as bibliotecas do OpenGL. Foram criadas duas classes, InterfaceUsuario e Objetos. A classe InterfaceUsuario e responsavel por captar os eventos do teclado e da interface grafica e executar os comandos correspondentes. A classe Objetos e responsavel por realizar a leitura do arquivo, que contem o objeto, criacao e manipulacao dos poligonos. O trabalho foi divido em tarefas, de A a H, conforme a especificacao.a) Ler e exibir modelos geometricos, armazenadas em um arquivo, utilizando malha de triangulos. Para o desenvolvimento desta funcionalidade, foi utilizado o codigo exemplo contido na descricao do trabalho. Foi criado um metodo Leitura(char *FileName) que recebe um arquivo de texto como parametro e, atraves da leitura do arquivo, instanciar a malha de poligonos. Utiliza-se uma struct chamada Triangulos para armazenar as informacoes contidas no do arquivo. Nessa struct, sao armazenadas as configuracoes dos poligonos: coordenadas dos vertices, normal, face da normal e cor. As coordenadas de iluminacao sao armazenadas em tres structs distintas: diffuse, ambient e specular.b) Transladar a camera em x, y e z. Para transladar os objetos foram criados eventos de teclado, presentes na biblioteca OpenGL, da seguinte forma: Transladar no eixo X para esquerda: utiliza a tecla "esquerda" (GLUT_KEY_LEFT) e translada de 0.1 em 0.1;Transladar no eixo X para direita: utiliza a tecla de navegacao direita, GLUT_KEY_RIGHT em OpenGL, e translada de 0.1 em 0.1;Transladar no eixo Y para cima: utiliza a tecla de navegacao up, GLUT_KEY_UP em OpenGL, e translada de 0.1 em 0.1;Transladar no eixo Y para baixo: utiliza a tecla de navegacao down, GLUT_KEY_DOWN em OpenGL, e translada de 0.1 em 0.1.Transladar no eixo Z para frente: utiliza a tecla de navegacao Page Up, GLUT_KEY_PAGE_UP em OpenGL, e translada de 0.1 em 0.1.Transladar no eixo Z para tras: utiliza a tecla de navegacao Page Down, GLUT_KEY_PAGE_DOWN em OpenGL, e translada de 0.1 em 0.1.Transladar a camera ao longo dos eixos, olhando para o centro do objeto.Para transladar os objetos, utilizou-se a interface grafica para os eixos x e y e evento de teclado para z.c) Rotacionar a camera ao longo dos eixos. E possivel rotacionar os objetos de duas formas. Utiliza-se a interface grafica para indicar a que grau o objeto deve ser rotacionado em x, y ou z. Utiliza-se um evento de teclado para rotacionar a camera de 90 em 90 graus, utilizando as teclas x para rotacionar em relacao ao eixo x, y para rotacionar em relacao ao eixo y e w para rotacionar em relacao ao eixo z.d) Resetar a camera para