• Nenhum resultado encontrado

Desenvolvendo um exercício na AduboGL

3.3 IMPLEMENTAÇÃO

3.3.2 Operacionalidade da implementação

3.3.2.1 Desenvolvendo um exercício na AduboGL

Nesta seção é mostrado passo a passo como um exercício pode ser resolvido usando da AduboGL. O exercício a ser resolvido está descrito no Apêndice A e trata da geração de uma cena 3D com três cubos transformados.

Como o primeiro cubo é para estar na origem da cena e não sofre nenhuma transformação, a primeira peça a ser colocada deve ser a que representa o cubo, conforme a Figura 20. Para colocar o cubo na bandeja, deve-se clicar sobre a peça correspondente na fábrica e arrastá-la para a bandeja. Ao realizar isso é possível visualizar o código correspondente ao cubo 3D na janela de código-fonte. Observa-se que a matriz de transformação é multiplicada pela matriz acumulada, para realizar as transformações quando houver alguma. Nesse caso, não há transformações ainda, então a matriz acumulada será uma matriz identidade. Pode-se notar também que a cor do cubo será azul e o mesmo será desenhado com arestas de uma unidade.

Figura 20 – Inserção de um cubo na origem da cena

O segundo objeto a ser colocado na cena 3D é um cubo transladado. Como a translação será somente do segundo cubo, deve-se colocar uma peça do tipo glPushMatrix() glPopMatrix() para encapsular a transformação a ser realizada. Para colocar a peça, a

mesma deve ser arrastada da fábrica até abaixo da última peça colocada na bandeja. Após colocar a peça amarela, que representa esse comando, deve-se colocar a peça correspondente a translação na linha horizontal ao comando glPushMatrix()glPopMatrix(). Isso fará com

que a translação seja encaixada tornando-se filha do primeiro comando colocado. O processo pode ser acompanhado na Figura 21. Ao adicionar uma peça filha dentro de outra peça, essa deve vir da fábrica. Caso venha da própria bandeja, as peças apenas são alteradas de posição.

57

Figura 21 – Inserção de peça glPushMatrix() glPopMatrix() com uma translação interna Observa-se no quadro de código-fonte (Figura 21) da translação que os valores a serem transladados em x, y e z estão zerados. Logo, os valores devem ser alterados a partir das

teclas numéricas de 1 a 6. As teclas 1 e 2 aumentam e diminuem o valor do eixo x, as 3 e 4

aumentam e diminuem o valor do eixo y e a 5 e 6 aumentam e diminuem o valor do eixo z,

respectivamente. Deve-se clicar quatro vezes na tecla 2 e cinco vezes na tecla 4 para que a próxima peça seja transladada 4 unidades em x e 5 em y, lembrando que antes deve ter sido

clicado na peça da translação. O código-fonte da peça deverá ficar como mostrado na Figura 22.

Figura 22 - Código-fonte alterado da peça translação

Após a alteração dos valores a serem transladados pode-se colocar a peça que representa o cubo. Essa deve ser posicionada ao lado do comando glPushMatrix() glPopMatrix(), porém abaixo da peça (translação) que já é filha. Assim a translação é

aplicada ao cubo. As peças dentro de uma peça pai não podem ser trocadas de lugar, apenas as peças antecessoras podem. Assim, caso tenha colocado a peça no local errado, deve-se remover o pai de todas as peças e então adicioná-lo novamente. Para remover a peça pai, deve-se clicar sobre ela e arrastá-la até a área da fábrica. Com o cubo encaixado e selecionado, como ele deve ser na cor verde, deve ser pressionada a tecla G. Dessa forma, a peça será colorida na cor verde e o código será alterado. Ao clicar na peça pai da transformação e do cubo é visualizado o código geral na janela de código-fonte. A inserção e modificação da peça cubo assim como o código da peça pai podem ser visto na Figura 23.

58

Figura 23 – Peça com duas sucessoras e visualização de seu código-fonte

Nota-se que é realizado o comando glPushMatrix() para encapsular as

transformações e em seguida é feito o comando makeTranslation da matriz de

transformação para ser colocada na matriz acumulada. Esse comando recebe os valores de x, y e z aplicados na peça correspondente a translação colocada no exercício. Após, a matriz acumulada é multiplicada pela matriz corrente, que é a matriz do cubo, é setada a cor do cubo que foi modificada para verde e então o cubo é desenhado. Por fim, utiliza-se o comando

glPoMatrix() para desempilhar a matriz de transformação.

A última peça a ser colocada na cena 3D é um cubo na cor vermelha com as três transformações. Para isso deve ser colocada novamente uma peça do tipo glPushMatrix() glPopMatrix(). A peça deve conter quatro filhos, sendo eles uma peça do tipo escala, outra

do tipo rotação, outra do tipo translação e por fim a peça do tipo cubo. As peças devem ser colocadas uma por vez ao lado da peça glPushMatrix() glPopMatrix() e abaixo da peça

anterior, caso a mesma já tenha algum filho. Pode-se colocar todas as peças para depois fazer a modificação de suas propriedades ou conforme cada peça é colocada a propriedade pode ser alterada. O importante é ter sempre selecionada a peça antes de aplicar a alteração da propriedade. Lembra-se que para realizar as modificações nos eixos x, y e z deve-se utilizar as

teclas de 1 a 6 e para colorir o cubo de vermelho deve ser pressionada a tecla R. Após a construção pode ser clicada sobre a peça antecessora das quatro para visualizar o código completo do terceiro cubo. A Figura 24 exibe a formação das peças para a resolução do exercício, assim como o código correspondente ao último cubo.

59

Figura 24 – Visualização da resolução do exercício assim como o código do último cubo

Na janela de código-fonte pode ser visto que o comando glPushMatrix() glPopMatrix()circundam as transformações realizadas sobre o cubo, assim como a função

que o desenha. Assim, as transformações serão aplicadas somente a essa peça. Também pode ser notado que cada transformação é aplicada sobre uma matriz auxiliar a partir dos valores das coordenadas indicadas nas peças e então é multiplicada pela matriz acumulada. Sempre que é realizado um comando de transformação, a matriz recebe sua identidade e então calcula a transformação com base no ponto de origem. Logo, é necessário ter uma matriz auxiliar para não perder as transformações realizadas sobre o objeto. Depois de calculada a transformação com base na origem, essa deve ser passada para uma matriz que acumula todas as transformações a serem aplicadas sobre o objeto. Isso é feito a partir da multiplicação da matriz auxiliar com a matriz acumulada. Assim, quando a matriz do cubo for multiplicada pela matriz acumulada, ela terá todas as transformações realizadas para aplicar na peça. E assim a primeira parte do exercício é finalizada.

O código-fonte apresentado na janela código-fonte durante a realização do exercício é também utilizado para exibir a cena gerada em 3D. Logo, pode-se observar a cena em 3D para a primeira parte do exercício ao salvá-lo (Figura 24). O exercício é gravado clicando-se com o botão direito do mouse sobre a bandeja e em seguida no menu “gravar exercício”. Um arquivo “Exercicio.txt” é gerado na pasta do projeto. A aplicação lerá o arquivo e carregará a cena 3D conforme é apresentado na Figura 25. Essa cena é carregada de duas formas, uma a partir da visão de uma câmera e outra vista de frente, assim o usuário pode analisar o cenário em formas diferentes. Os três cubos montados a partir do plano 2D na AduboGL é visualizado em um espaço 3D com suas transformações.

60

Figura 25 – Aplicação exemplo executando exercício gerado

Após a visualização da cena em 3D pode ser feita a segunda parte do exercício. Nessa parte a cena toda deve ser transladada em quatro unidades para x. Para isso, deve-se abrir

novamente o exercício caso tenha fechado, clicando com o botão direito na bandeja e em seguida no menu “abrir exercício”.

Com o exercício carregado, pode ser realizada a modificação sobre ele. Como toda a cena deverá ser transladada, deve ser colocada uma peça translação. Lembra-se que para ela não ser removida do exercício, a primeira vez ela deve ser posicionada abaixo de todas já colocadas, como mostra a Figura 26.

Figura 26 – Inserção de peça translação

Após a peça colocada, pode-se alterar o valor x a ser transladado pressionando a tecla

numérica 2 quatro vezes. Para que a translação seja sobre toda a cena, ela deve ser posicionada por primeiro, sobre todas as demais peças. Deve-se clicar sobre a peça a ser movida e arrastá-la até o topo da bandeja para soltá-la. Assim a peça irá ocupar a primeira posição da bandeja. O resultado é observado na Figura 27.

61

Figura 27 – Reposição da peça translação

Feita a alteração no exercício, pode-se salvá-lo. A nova cena 3D será a mesma da anterior, porém deslocada no eixo x, conforme é visto na Figura 28. Assim o exercício é

concluído.

Figura 28 – Cena 3D resultante do exercício

Documentos relacionados