Funções para serem usadas no exercício de Lab
Explicação mais Detalhada
// Especifica a projeção perspectiva(angulo,aspecto,zMin,zMax)
GLvoid gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble nearClip, GLdouble farClip )
•Um Grande fovy é como olhar através de uma lente grande
•Um pequeno fovy é como olhar através de um telescópio
•O aspecto é a largura/altura do plano de projeção
• Nome gluLookAt — define a viewing transformation
• Especificação em C
• void gluLookAt ( GLdouble eyeX , GLdouble eyeY , GLdouble eyeZ ,
GLdouble centerX , GLdouble centerY , GLdouble centerZ , GLdouble upX ,
GLdouble upY , GLdouble upZ );
•
•
•
•
Parametros
eyeX, eyeY, eyeZ especificam a posição do observador
CenterX, CenterY, CenterZ especificam a posição do alvo
upX, upY, upZ especificam a direção da câmera
• Description
• gluLookAt cria uma matriz de visualização a partir de um visualizador em
um ponto, um ponto de referência indicando um alvo na cena e um vetor
indicando para onde a câmera está apontada.
Objetos Pré-definidos no OpenGL
• Nome: glutSolidSphere, glutWireSphere – renderiza uma esfera sólida ou
wireframe
• SYNTAX: void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
• ARGUMENTOS: radius -> raio da esfera; slices -> número de subdivisões
em torno do eixo Z (similar a linhas de longiture); stacks -> númeero de
subdivisões no eixo Z (similar a linhas de latitude).
• DESCRIÇÃO: renderiza uma esfera no centro do sistema de coordenadas.
Objetos Pré-definidos no OpenGL
• NOME: glutSolidCube, glutWireCube – renderiza um cubo sólido ou
wireframe
• SYNTAX void glutSolidCube(GLdouble size); void glutWireCube(GLdouble
size);
• ARGUMENTS size largura do lado do cubo.
Objetos Pré-definidos no OpenGL
• NOME: glutSolidTorus, glutWireTorus – renderiza um sólido ou wireframe
em forma de torus;
• SYNTAX void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); void glutWireTorus(GLdouble innerRadius,
GLdouble outerRadius, GLint nsides, GLint rings);
• ARGUMENTS innerRadius -> raio interno; outerRadius -> raio externo;
nsides -> número de lados para cada raio; rings -> número de aneis
Objetos Pré-definidos no OpenGL
• NOME: glutSolidTorus, glutWireTorus – renderiza um sólido ou wireframe
em forma de torus;
• SYNTAX void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings); void glutWireTorus(GLdouble innerRadius,
GLdouble outerRadius, GLint nsides, GLint rings);
• ARGUMENTS innerRadius -> raio interno; outerRadius -> raio externo;
nsides -> número de lados para cada raio; rings -> número de aneis
Escopo das Transformações
• glPushMatrix (void): Função utilizada para
empilhar a matriz de transformação corrente;
• glPopMatrix (void): Função utilizada para
desempilhar a matriz de transformação
corrente.
Exercício 1
• Fazer um programa em OpenGL usando as funções de
Transformações de Escopo. O programa deve conter o
seguinte (Veja o Demo Na página da Disciplina):
….
void Desenha()
{
//limpa a janela de visualização com cor de fundo definida previamente
glClear(GL_COLOR_BUFFER_BIT);
// empilha a matriz de tranformação corrente
// translada e rotaciona
// desenha um Torus, Cubo ou qualquer outro Objeto Geométrico Pré-definido na OpenGL
// Desempilha a Matriz de Tranformação Corrente
}
Desenha (continuação..)
// empilha a matriz de tranformação corrente
// translada e rotaciona
// desenha um Torus, Cubo ou qualquer outro Objeto Geométrico Pré-definido na OpenGL
// Desempilha a Matriz de Tranformação Corrente
// empilha a matriz de tranformação corrente
// translada e rotaciona
// desenha um Torus, Cubo ou qualquer outro Objeto Geométrico Pré-definido na OpenGL
// Desempilha a Matriz de Tranformação Corrente
// executa os comando OpenGL
glFlush();
}
Exercício 1
• Fazer um programa em OpenGL usando as funções de
Transformações de Escopo. O programa deve conter o
seguinte:
void EspecificaParametrosVisualizacao(void)
{
// especifica sistema de coordenadas de projeção
// inicializa sistema de coordenadas de projeção
// Espeficica a Projeção perspectiva
gluPerspective(45,fAspect,0.5,500);
// Especifica sistema de coordenadas do modelo
// Iniciaiza sistema de coordenadas no modelo
gluLookAt(0,60,150,0,0,0,0,1,0);
}
Exercício 1 (continuação …)
void AlteraTamanhoJanela (Glsizei w, GLSizei h)
{
if (h == 0) h = 1;
// Especifica as dimensoes da ViewPort
glViewPort(0, 0, w, h);
// Calcula a correção do aspecto
fAspect = (GLfloat) w/ (GLfloat) h;
// Chama a funcao para definir parâmetros de Visualização
EspecificaParametrosVisualizacao();
}
void Teclado(unsigned char key, int x, int y)
{
// permite encerrar o programa caso seja apertada a tecla ESC
if (key == 27) exit(0);
}
void Inicializa(void)
{
// define a cor corrente como preta
glClearColor(1.0f, 1.0f, 1.0f,1.0f);
}
Exercício 1 (continuação …)
void main (void)
{
Aqui é feita a programação padrão …
}
Exercício 2
• Fazer um programa que dê a idéia de um Sistema Solar, só
que com apenas 1 Sol e 1 Planeta pelo menos (Veja o Demo
na Página da Disciplina):
// Funções que devem ter
Desenha() // Para desenhas os sistema solar usando funções de Escopo de Transformações
glPushMatrix e glPopMatrix para cada objeto que desenhar. Lembre-se que o Sol e os
Planetas podem ser desenhados com objetos pré-definidos glutSolidSphere
No final da função deve chamar a função glutSwapBuffers();
Exercício 2
void Reshape(int w, int h)
{
glViewPort(…
glMatrixMode(…
glLoadIdentity(…
gluPerspective(60.0, (GLfloat) w/ (GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODEVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
KeyBoard() para rotacionar o planeta em torno do Sol e o Planeta em Torno dele mesmo
Main()