Funes para serem usadas no exerccio de Lab
Funções para serem usadas no exercício de Lab Explicação mais Detalhada // Especifica a projeção perspectiva(angulo, aspecto, z. Min, z. Max) GLvoid glu. Perspective( GLdouble fovy, GLdouble aspect, GLdouble near. Clip, GLdouble far. Clip ) • 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 glu. Look. At — define a viewing transformation • Especificação em C • void glu. Look. At ( GLdouble eye. X , GLdouble eye. Y , GLdouble eye. Z , GLdouble center. X , GLdouble center. Y , GLdouble center. Z , GLdouble up. X , GLdouble up. Y , GLdouble up. Z ); • • Parametros eye. X, eye. Y, eye. Z especificam a posição do observador Center. X, Center. Y, Center. Z especificam a posição do alvo up. X, up. Y, up. Z especificam a direção da câmera • Description • glu. Look. At 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 Open. GL • Nome: glut. Solid. Sphere, glut. Wire. Sphere – renderiza uma esfera sólida ou wireframe • SYNTAX: void glut. Solid. Sphere(GLdouble radius, GLint slices, GLint stacks); void glut. Wire. Sphere(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 Open. GL • NOME: glut. Solid. Cube, glut. Wire. Cube – renderiza um cubo sólido ou wireframe • SYNTAX void glut. Solid. Cube(GLdouble size); void glut. Wire. Cube(GLdouble size); • ARGUMENTS size largura do lado do cubo.
Objetos Pré-definidos no Open. GL • NOME: glut. Solid. Torus, glut. Wire. Torus – renderiza um sólido ou wireframe em forma de torus; • SYNTAX void glut. Solid. Torus(GLdouble inner. Radius, GLdouble outer. Radius, GLint nsides, GLint rings); void glut. Wire. Torus(GLdouble inner. Radius, GLdouble outer. Radius, GLint nsides, GLint rings); • ARGUMENTS inner. Radius -> raio interno; outer. Radius -> raio externo; nsides -> número de lados para cada raio; rings -> número de aneis
Objetos Pré-definidos no Open. GL • NOME: glut. Solid. Torus, glut. Wire. Torus – renderiza um sólido ou wireframe em forma de torus; • SYNTAX void glut. Solid. Torus(GLdouble inner. Radius, GLdouble outer. Radius, GLint nsides, GLint rings); void glut. Wire. Torus(GLdouble inner. Radius, GLdouble outer. Radius, GLint nsides, GLint rings); • ARGUMENTS inner. Radius -> raio interno; outer. Radius -> raio externo; nsides -> número de lados para cada raio; rings -> número de aneis
Escopo das Transformações • gl. Push. Matrix (void): Função utilizada para empilhar a matriz de transformação corrente; • gl. Pop. Matrix (void): Função utilizada para desempilhar a matriz de transformação corrente.
Exercício 1 • Fazer um programa em Open. GL 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 gl. Clear(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 Open. GL // 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 Open. GL // Desempilha a Matriz de Tranformação Corrente // executa os comando Open. GL gl. Flush(); }
Exercício 1 • Fazer um programa em Open. GL usando as funções de Transformações de Escopo. O programa deve conter o seguinte: void Especifica. Parametros. Visualizacao(void) { // especifica sistema de coordenadas de projeção // inicializa sistema de coordenadas de projeção // Espeficica a Projeção perspectiva glu. Perspective(45, f. Aspect, 0. 5, 500); // Especifica sistema de coordenadas do modelo // Iniciaiza sistema de coordenadas no modelo glu. Look. At(0, 60, 150, 0, 0, 1, 0); }
Exercício 1 (continuação …) void Altera. Tamanho. Janela (Glsizei w, GLSizei h) { if (h == 0) h = 1; // Especifica as dimensoes da View. Port gl. View. Port(0, 0, w, h); // Calcula a correção do aspecto f. Aspect = (GLfloat) w/ (GLfloat) h; // Chama a funcao para definir parâmetros de Visualização Especifica. Parametros. Visualizacao(); } 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 corrente como preta gl. Clear. Color(1. 0 f, 1. 0 f); }
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 gl. Push. Matrix e gl. Pop. Matrix para cada objeto que desenhar. Lembre-se que o Sol e os Planetas podem ser desenhados com objetos pré-definidos glut. Solid. Sphere No final da função deve chamar a função glut. Swap. Buffers();
Exercício 2 void Reshape(int w, int h) { gl. View. Port(… gl. Matrix. Mode(… gl. Load. Identity(… glu. Perspective(60. 0, (GLfloat) w/ (GLfloat) h, 1. 0, 20. 0); gl. Matrix. Mode(GL_MODEVIEW); gl. Load. Identity(); glu. Look. At(0. 0, 5. 0, 0. 0, 1. 0, 0. 0); } Key. Board() para rotacionar o planeta em torno do Sol e o Planeta em Torno dele mesmo Main()
- Slides: 14