You are on page 1of 10

UNIVERSIDADE ESTADUAL DO MARANHO UEMA CENTRO DE CINCIAS TECNOLGICAS CCT CURSO DE ENGENHARIA DA COMPUTAO

SELMO EDUARDO RODRIGUES JNIOR - 0993205

COMPUTAO GRFICA

So Lus MA 2012

Sumrio
Introduo..................................................................................................................... 3 1. 2. 3. 4. 5. 6. Primeiro Cdigo em OpenGL ................................................................................. 4 Sistemas de Referncia no OpenGL...................................................................... 5 Projees............................................................................................................... 6 Primitivas Grficas ................................................................................................. 7 Curvas Paramtricas ............................................................................................. 8 Translao, Rotao e Escala ............................................................................... 8

Concluso................................................................................................................... 10

Introduo
Neste trabalho, sero abordados assuntos que foram estudados na disciplina de Computao Grfica, relacionando-os s funes da OpenGL. Primeiramente um cdigo em usando a biblioteca glut.h ser analisado. Em seguida, os sistemas de referncia no universo e da tela sero caracterizados. As funes da OpenGL que realizam projees, primitivas grficas e curvas paramtricas sero descritas nesse trabalho. Por ltimo, as translaes, rotaes e escalas sero definidas e suas funes da OpenGL sero especificadas.

1. Primeiro Cdigo em OpenGL


O primeiro cdigo em C que ser analisado, desenha um tringulo vermelho em uma tela. Segue abaixo, seu cdigo e anlise de cada funo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include<GL/glut.h> #include<stdio.h> #include<conio.h> void Desenha() { glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT ); glColor3f(1,0,0); glBegin(GL_TRIANGLES); glVertex2f(-0.5,-0.5); glVertex2f(0.0,0.5); glVertex2f(0.5,-0.5); glEnd(); glFlush(); } void Teclado(unsigned char key, int x, int y) { if (key == 27) exit(0); } void Inicializa() { glMatrixMode(GL_PROJECTION); gluOrtho2D(-1.0,1.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); } int main() { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(350,200); glutInitWindowSize(600,400); glutCreateWindow("Tringulo"); glutDisplayFunc(Desenha); glutKeyboardFunc(Teclado); Inicializa(); glutMainLoop(); return 0; }

As trs primeiras linhas so comandos da linguagem C que importam arquivos contendo um conjunto de funes. Nesse cdigo, foi usado trs a glut.h, stdio.h e a conio.h, sendo a primeira de maior importncia nesse trabalho. Na quinta linha uma funo desenha criada. Na linha 7 temos a funo glClearColor(), que especifica a cor de fundo da tela (no caso, branca). Nesse cdigo, o sistema RGB de cores est sendo utilizado. Em seguida, a funo glClear() preenche a tela com a cor escolhida pela funo anterior. A linha 9 escolhe uma cor que ser utilizada para fazer o desenho. No exemplo, a cor ser vermelha. Da linha 10 a 14, um tringulo foi especificado pela primitiva GL_TRIANGLES e pelas funes glVertex(x,y), cuja funo determinar as coordenadas x e y do tringulo no plano bidimensional, ou seja, os seus vrtices. Na ltima linha da funo Desenha() (linha 15) est a funo glFlush(), que, efetivamente executa as funes citadas anteriormente. Na linha 18, uma segunda funo foi declarada: Teclado(). Essa funo simplesmente encerra o programa caso a tecla Esc seja digitada. Na funo Inicializa(), tem-se as funes da biblioteca glut.h que vo determinar o s tipos de parmetros da projeo a ser utilizada. A funo gluOrtho2D() define uma projeo ortogrfica paralela ortogonal, isto , para duas dimenses. Nesse tipo de projeo, as linhas de projeo so paralelas entre si e perpendiculares ao plano de projeo. Por ltimo, temos a funo principal. O comando da linha 33 inicializa a GLUT e define o sistema de cores como RGB. Na linha 34, a posio da janela definida e na linha seguinte, seu tamanho declarado. O comando glCreateWindow() na linha 36 cria a tela com as caractersticas descritas pelas funes anteriores e, como parmetro da funo, definido o ttulo da tela. As duas prximas funes de cada linha realizam o que foi descrito pelas funes Desenha() e Teclado(). Finalmente, as funes da linha 39 e 40 se responsabilizam pelo processamento do programa e o tringulo vermelho pode ser agora desenhado na tela.

2. Sistemas de Referncia no OpenGL


Como referncia de descrio dos diversos objetos, o universo utilizado em termos das coordenadas utilizadas pelo usurio. Com isso, cada usurio define seu chamado universo de trabalho. Denominamos esse tipo de referncia como Sistema de Referncia do Universo (SRU). A OpenGL utiliza esse sistema de referncia. Entretanto, o monitor do computador adota outro tipo de sistema de referncia, o SRT 5

(Sistema de Referncia da Tela). Essa diferena perceptvel quando comparamos as origens de ambos os sistemas de origem. No SRT a origem fica no canto superior esquerdo do monitor, enquanto o SRU semelhante ao plano cartesiano, com a origem geralmente no centro. Portanto, para o objeto ser desenhado na tela, precisase fazer um mapeamento. Essa tcnica consiste em uma transformao de um sistema de referncia de coordenadas para outro sistema de referncia. Com o mapeamento, os modelos so criados independentes do dispositivo, com as coordenadas definidas em relao ao sistema de referncia adotado. Como o universo infinito, precisa-se selecionar uma rea que delimite a regio de trabalho do usurio. Denominamos essa rea de window. Da mesma forma, preciso definir em que parte do monitor deseja-se exibir o contedo da window. Essa rea a chamada viewport. Na OpenGL, utiliza-se duas funes principais para determinar a window e a viewport: void glViewport(GLint x, GLint y, GLint widht, GLint height): definio do viewport. Os dois primeiros parmetros servem para identificar as coordenadas do canto inferior esquerdo da janela, enquanto os ltimos definem, respectivamente, a largura e altura da tela; void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top): definio da window. Essa funo j foi citada anteriormente. Seus parmetros definem as coordenadas das bordas da janela.

3. Projees
Quando necessrio trabalhar com objetos em 3D, necessrio fazer um mapeamento para duas dimenses, representando o objeto na tela. Este operao para obteno de representaes bidimensionais de representaes tridimensionais denominada de projeo. Para realizar a projeo, necessrio considerar trs elementos bsicos: Plano de Projeo: a superfcie onde ser projetado o objeto; Raios de Projeo: so as retas que passam pelos pontos do objeto e pelo centro de projeo; Centro de Projeo: o ponto fixo de onde os raios de projeo partem.

H duas classificaes principais de projees:

Projeo Paralela Ortogrfica: as projetantes so paralelas entre si e passam pelos pontos que definem os objetos e interseccionam plano com um ngulo de 90 ;
o

Projeo Perspectiva: as projetantes emanam de um nico ponto que est a uma definio finita do plano de projeo e passam pelos pontos que definem objetos;

Abaixo, algumas funes do OpenGL que realizam as projees: void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar): esta funo emprega a projeo pespectiva. O primeiro parmetro utilizado para determinar o ngulo de visualizao na direo y. O parmetro aspect a razo de aspecto que determina a rea de visualizao na direo x. O terceiro, zNear, corresponde a distncia do observador at o plano frontal. E, por ltimo, o zFar, que corresponde a distncia do observador at o plano de corte em z. void gluOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far): funo que trabalha com projeo

ortogrfica. Os parmetros left e right especificam os limites mximo e mnimo no eixo x. Analogamente, bottom e top determinam os limites mximo e mnimo no eixo y. Os dois ltimos parmetros correspondem aos valores mximo e mnimo no eixo z.

4. Primitivas Grficas
As primitivas grficas consistem em elementos bsicos que compem o desenho. No cdigo da primeira seo, na linha 10, a funo glBegin(GL_TRIANGLES) possui a primitiva de um tringulo, que ter seus vrtices especificados pelas funes glVertex2f() nas linhas de 11 a 13. Abaixo, algumas das principais primitivas grficas do OpenGL: GL_LINES: para desenhar linhas; GL_POLYGON: para desenhar polgonos; GL_TRIANGLES: para desenhar tringulos; GL_QUADS: para desenhar quadrilteros; GL_POINTS: para desenhar points.

5. Curvas Paramtricas
A forma mais comum de representao de curvas aquela em que uma das coordenadas obtida em funo da outra. Ou seja, y = F(x) ou x = F(y) Esta forma de representao, porm possui alguns inconvenientes quando estamos trabalhando com modelagem geomtrica. Entre estes inconvenientes esto:

difcil definir a equao de uma curva atravs de seus pontos e de suas derivadas neste pontos (o que bastante til em modelagem geomtrica);

impossvel criar curvas com laos; bastante difcil obter uma curva suave que passe por um conjunto de pontos.

A OpenGL implementa diretamente as curvas de Bzier, que uma curva polinomial expressa como a interpolao linear entre alguns pontos representativos, chamados de pontos de controle. Para utilizar um avaliador Bzier, emprega-se a seguinte funo da API: void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points): uma funo que define os pontos de controle. Os parmetros u1 e u2 definem o intervalo para varivel de controle u. O stride indica a quantidade de valores que float que existem entre cada elemento do vetor. O parmetro order contm a quantidade de elementos do vetor. Por ltimo, tem-se um ponteiro points, que armazena o endereo da primeira coordenada do primeiro ponto de controle.

6. Translao, Rotao e Escala


Translao, rotao e escala so os trs tipos de fundamentais de transformaes geomtricas que permitem a manipulao de um objeto ou cenrio, onde a ordem em que essas transformaes so aplicadas influencia o resultado.

6.1.

Translao

A translao usada para definir a posio de um objeto ou cenrio. Matematicamente, essa operao consiste em adicionar constantes de deslocamento a todas as coordenadas das primitivas grfica do objeto. A seguir, sero abordadas as funes utilizadas para aplicar uma translao:

void glTranslatef(GLfloat tx, GLfloat ty, GLfloat tz): essa funo usada para aplicar uma translao em um ou mais objetos de uma cena. Os parmetros tx,ty e tz armazenam os valores de translao que devem ser aplicados aos eixos x, y e z;

void glTranslated(GLdouble tx, GLdouble ty, GLfdouble tz): essa funo faz o mesmo que a anterior. A diferena que esta lida com parmetros do tipo double.

6.2.

Rotao

A transformao geomtrica de rotao usada para definir o valor ngulo que ser utilizado como referncia para girar o objeto. De acordo com a matemtica, esta operao consiste em aplicar uma composio de clculos empregando o seno e cosseno do ngulo de rotao a todas as coordenadas das primitivas grficas que compem um objeto ou cena. As funes do OpenGL utilizadas para realizar a rotao so: void glRotatef(GLfloat angulo, GLfloat x, GLfloat y, GLfloat z): funo que aplica a rotao em ou mais objetos. Os parmetros indicam o ngulo de rotao e a coordenada do eixo de rotao; void glRotated(GLdouble angulo, GLdouble x, GLdouble y, GLdouble z): essa funo faz o mesmo que a anterior, sendo a nica diferena que esta lida com parmetros do tipo double.

6.3.

Escala

A transformao geomtrica de escala serve para definir aquela que deve ser usada para exibir um objeto ou cena. Esta operao consiste em multiplicar um valor de escala por todas as coordenadas das primitivas grficas que compem o objeto ou cenrio no qual ser aplicada a escala. As funes OpenGL que aplicam as escalas so: void glScalef(GLfloat ex, GLfloat ey, GLfloat ez): funo que utilizada para aplicar uma escala em um ou mais objetos. Os parmetros indicam os valores de escala que devem ser aplicados nos eixos x, y e z; void glScaled(GLdouble ex, GLdouble ey, GLdouble ez): faz o mesmo que a anterior, porm esta lida com parmetros do tipo double.

Concluso
Este trabalho serviu para associarmos os conceitos aprendidos na disciplina de Computao Grfica e relacion-los com a API OpenGL, servindo como prtica e desenvolvimento desses conceitos. Essa API permite uma visualizao que permite que nossas ideias sejam analisadas e estudadas, obtendo melhores resultados no aprendizado.

10

You might also like