Upload
marcelo-silva
View
241
Download
0
Embed Size (px)
Citation preview
5/8/2018 glTranslatef e glScalef - slidepdf.com
http://slidepdf.com/reader/full/gltranslatef-e-glscalef 1/3
glTranslatef e glScalef
glTranslatef é a função que realiza a translação, ou seja, movimenta um objeto. A
origem do sistema é transladada para a posição fornecida dentro dos parâmetros da
função (mais uma vez lembrando que x indica o lado, y a altura e z a profundidade):
glTranslatef(x,y,z)
glScalef altera a escala dos objetos. O resultado obtido é o alongamento ou
encolhimento dos objetos no sentido dos eixos. A função é usada da seguinte forma:
glScalef(x,y,z). Se o valor de algum dos parâmetros for 0, esta cordenada simplesmente
será eliminada.
glPushMatrix e glPopMatrix
Essas funções permitem guardar temporariamente a matriz de transformação atual.Após a instrução glPopMatrix() todas as operações que alteram a matriz atual, como por
exemplo, glTranslatef, efetuadas após o último glPushMatrix(), são ignoradas.
Por exemplo, se depois de criar e movimentar um cubo não usarmos o glPopMatrix, osoutros objetos serão criados à partir do que foi definido depois do primeiro desenho. Se
usarmos o glPushMatrix antes do cubo e o glPopMatrix depois, a origem do sistema
mais uma vez será a que estava sendo trabalhada antes de criarmos o objeto.
Criando a mesa
Vamos fazer agora a modelagem de nossa mesa. Como já fizemos uma biblioteca para
chamar o cubo, podemos chamá-la para criar a tampa e as pernas da mesa, colocandocada parte dentro de glPushMatrix() e glPopMatrix(). Vamos usar o comando glScalef
para mudar os tamanhos dos cubos transformando-os na tampa e nas pernas da mesa e o
comando glTranslatef para definirmos a posição de cada parte da mesa.
//
//Tampa da mesa
//
glPushMatrix();
glScalef(1,0.05,50);
cubo(160,180,160,0,0,0,200,0.25);
glPopMatrix();
//
//Pernas da mesa
//
glPushMatrix();
glTranslatef(-180,-200,-0);
glScalef(0.1,1,2);
cubo(250,50,50,0,0,0,200,0.25);
glPopMatrix();
glPushMatrix();
glTranslatef(180,-200,0);
glScalef(0.1,1,2);
cubo(250,50,50,0,0,0,200,0.25);
5/8/2018 glTranslatef e glScalef - slidepdf.com
http://slidepdf.com/reader/full/gltranslatef-e-glscalef 2/3
glPopMatrix();
glPushMatrix();
glTranslatef(-180,-200,-480);
glScalef(0.1,1,2);
cubo(250,50,50,0,0,0,200,0.25);
glPopMatrix();
glPushMatrix();
glTranslatef(180,-200,-480);
glScalef(0.1,1,2);
cubo(250,50,50,0,0,0,200,0.25);
glPopMatrix();
glRotatef
glRotatef é a função usada para podermos aplicar a rotação nos objetos. Os parâmetros
usados nesta função são: ângulo, componente x, componente y e componente z. Depois
de escolhermos o ângulo, damos os valores para x, y e z, que podem ser 0 ou 1.
Por exemplo, se quero rotacionar um objeto em 45 graus no eixo x, chamo a função da
seguinte forma:
glRotatef(45,1,0,0);
5/8/2018 glTranslatef e glScalef - slidepdf.com
http://slidepdf.com/reader/full/gltranslatef-e-glscalef 3/3
Se quero rotacionar em 70 graus nos eixos y e z, chamo da seguinte forma:
glRotatef(70,0,1,1);
Exercícios
Agora que já modelamos nossa mesa, vamos criar umas cadeiras, rotacionar alguma(s)delas para deixar mais apresentável nosso desenho
Uma dica é criar uma biblioteca cadeira.h para ficar mais fácil colocar mais cadeiras no
desenho. Lembre-se de usar os comandos glPushMatrix e glPopMatrix para cada uma
das cadeiras e colocar dentro desses comandos as funções glTranslatef e glRotatef nas
cadeiras que quiser rotacionar. Se quiser também pode usar glScalef para mudar o
tamanho de algumas cadeira.
Se preferir pode também criar uma biblioteca mesa.h para facilitar a criação de mais
mesas se desejar.
A imagem abaixo mostra o desenho que fiz de uma mesa com um bulê de chá e suas
cadeiras. Fiz uma delas caída para dar aquela impressão de que algum cara meio
chapado acabou derrubando a cadeira (talvez o chá dentro do bulê fosse de cogumelo«
Quem sabe? Talvez os caras que beberam ;D)