BCC327 - Computação Gráfica - 05 - Introdução ao OpenGL ...€¦ · 05 - Introdução ao...
Transcript of BCC327 - Computação Gráfica - 05 - Introdução ao OpenGL ...€¦ · 05 - Introdução ao...
BCC327 - Computação Gráfica05 - Introdução ao OpenGL - Aula Prática
Rodolfo Ayala Lopes Costa
Departamento de ComputaçãoInstituto de Ciências Exatas e Biológicas
Universidade Federal de Ouro Preto
4 de Abril de 2018
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 1 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro ProgramaExemplo: Gráfico de DispersãoExemplo: Variação de Cores dos ObjetosExemplo: CasaExercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro Programa
Exemplo: Gráfico de DispersãoExemplo: Variação de Cores dos ObjetosExemplo: CasaExercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro ProgramaExemplo: Gráfico de Dispersão
Exemplo: Variação de Cores dos ObjetosExemplo: CasaExercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro ProgramaExemplo: Gráfico de DispersãoExemplo: Variação de Cores dos Objetos
Exemplo: CasaExercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro ProgramaExemplo: Gráfico de DispersãoExemplo: Variação de Cores dos ObjetosExemplo: Casa
Exercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Cronograma da Aula
Introdução ao OpenGL
Primeiro ProgramaExemplo: Gráfico de DispersãoExemplo: Variação de Cores dos ObjetosExemplo: CasaExercícios Propostos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 2 / 18
Introdução ao OpenGL
Primeiro Programa usando OpenGL
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 3 / 18
Introdução ao OpenGL
Primeiro Programa com OpenGL
Código:
#i n c l u d e <GL/ g l u t . h>
i n t main ( i n t argc , cha r∗∗ a rgv ){// I n i c i a l i z a c a o da Telag l u t I n i t (&argc , a rgv ) ;// De f i n i c a o do formato de co rg l u t I n i tD i s p l a yMod e (GLUT_SINGLE | GLUT_RGB) ;// De f i n e o tamanho da j a n e l ag l u t I n i tW indowS i z e ( 640 , 640 ) ;// De f i n e a po s i c a o da j a n e l ag l u t I n i tW i n dowPo s i t i o n (100 , 100 ) ;// C r i a cao da j a n e l a e c o n f i g u r a c a o do t i t u l og lutCreateWindow ( " P r ime i r o ␣Programa" ) ;// R e a l i z a as c o n f i g u r a c o e s i n i c i a i si n i t ( ) ;// De f i n i c a o da funcao de c a l l b a c kg l u tD i s p l a yFun c ( d i s p l a y ) ;
// De f i n e um loop e t e r nog lutMainLoop ( ) ;r e t u r n 0 ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 4 / 18
Introdução ao OpenGL
Primeiro Programa com OpenGL
Código (Cont...):
vo i d i n i t ( v o i d ){
/∗ d e f i n e a co r de background da j a n e l a ∗/g l C l e a r C o l o r ( 1 . 0 , 1 . 0 , 1 . 0 , 0 . 0 ) ;
/∗ d e f i n e o s i s t ema de v i s u a l i z a c a o − t i p o de p r o j e c a o ∗/glMatr ixMode (GL_PROJECTION) ;g l L o a d I d e n t i t y ( ) ;g lOr tho ( 0 . 0 , 1 . 0 , 0 . 0 , 1 . 0 , −1.0 , 1 . 0 ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 5 / 18
Introdução ao OpenGL
Primeiro Programa com OpenGL
Código (Cont...):
vo i d d i s p l a y ( vo i d ){
/∗ l impa a j a n e l a ∗/g l C l e a r (GL_COLOR_BUFFER_BIT) ;
/∗ desenha um r e t a n gu l o amare lo ∗/g l C o l o r 3 f ( 1 . 0 , 1 . 0 , 0 . 0 ) ;g lBeg i n (GL_POLYGON) ;
g l V e r t e x 3 f ( 0 . 3 , 0 . 3 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 7 , 0 . 3 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 7 , 0 . 7 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 3 , 0 . 7 , 0 . 0 ) ;
g lEnd ( ) ;
/∗ i n i c i a o proces samento imed ia tamente ∗/g l F l u s h ( ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 6 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 7 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Código:
#i n c l u d e <GL/ g l u t . h>
i n t main ( i n t argc , cha r∗∗ a rgv ){// I n i c i a l i z a c a o da Telag l u t I n i t (&argc , a rgv ) ;// De f i n i c a o do formato de co rg l u t I n i tD i s p l a yMod e (GLUT_SINGLE | GLUT_RGB) ;// De f i n e o tamanho da j a n e l ag l u t I n i tW indowS i z e ( 640 , 640 ) ;// De f i n e a po s i c a o da j a n e l ag l u t I n i tW i n dowPo s i t i o n (100 , 100 ) ;// C r i a cao da j a n e l a e c o n f i g u r a c a o do t i t u l og lutCreateWindow ( " G r a f i c o ␣de␣ D i s p e r s ao " ) ;// R e a l i z a as c o n f i g u r a c o e s i n i c i a i si n i t ( ) ;// De f i n i c a o da funcao de c a l l b a c kg l u tD i s p l a yFun c ( d i s p l a y ) ;
// De f i n e um loop e t e r nog lutMainLoop ( ) ;r e t u r n 0 ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 8 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Código (Cont...):
vo i d i n i t ( v o i d ){
/∗ d e f i n e a co r de background da j a n e l a ∗/g l C l e a r C o l o r ( 1 . 0 , 1 . 0 , 1 . 0 , 0 . 0 ) ;
/∗ d e f i n e o s i s t ema de v i s u a l i z a c a o − t i p o de p r o j e c a o ∗/glMatr ixMode (GL_PROJECTION) ;g l L o a d I d e n t i t y ( ) ;g lOr tho ( 0 . 0 , 1 . 0 , 0 . 0 , 1 . 0 , −1.0 , 1 . 0 ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 9 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Código (Cont...):
vo i d d i s p l a y ( vo i d ){
/∗ l impa a j a n e l a ∗/g l C l e a r (GL_COLOR_BUFFER_BIT) ;
// De f i n e a co r p r e t o para os e i x o s do g r a f i c og l C o l o r 3 f ( 0 . 0 , 0 . 0 , 0 . 0 ) ;
/∗ Desenhando os e i x o s ∗/// d e f i n i n f o a e s p e s s u r a da l i n h ag lL ineWid th ( 2 . 0 ) ;g lBeg i n (GL_LINES ) ;
// d e f i n i n d o a r e t a do e i x o Yg lV e r t e x 3 f ( 0 . 1 , 0 . 1 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 1 , 0 . 9 , 0 . 0 ) ;// d e f i n i n d o a r e t a do e i x o Xg lV e r t e x 3 f ( 0 . 1 , 0 . 1 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 9 , 0 . 1 , 0 . 0 ) ;
g lEnd ( ) ;
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 10 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Código (Cont...):
/∗ Desenhando as pontas dos e i x o s ∗/g lBeg i n (GL_TRIANGLES ) ;
// Tr i angu l o do e i x o Yg lV e r t e x 3 f ( 0 . 0 8 , 0 . 90 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 1 2 , 0 . 90 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 1 , 0 . 92 , 0 . 0 ) ;// T r i angu l o do e i x o Xg lV e r t e x 3 f ( 0 . 9 0 , 0 . 08 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 9 0 , 0 . 12 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 9 2 , 0 . 10 , 0 . 0 ) ;
g lEnd ( ) ;
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 11 / 18
Introdução ao OpenGL
Exemplo: Gráfico de Dispersão
Código (Cont...):
/∗ Desenhando os pontos ( co r : ve rme lha ) ∗/g l C o l o r 3 f ( 1 . 0 , 0 . 0 , 0 . 0 ) ;g l P o i n t S i z e ( 6 . 0 ) ;g lBeg i n (GL_POINTS ) ;
g l V e r t e x 3 f ( 0 . 2 , 0 . 2 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 2 5 , 0 . 3 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 5 , 0 . 15 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 6 , 0 . 4 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 2 2 , 0 . 25 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 7 , 0 . 7 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 8 , 0 . 56 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 3 , 0 . 4 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 5 , 0 . 68 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 6 4 , 0 . 3 , 0 . 0 ) ;
g lEnd ( ) ;
/∗ i n i c i a o proces samento imed ia tamente ∗/g l F l u s h ( ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 12 / 18
Introdução ao OpenGL
Exemplo: Variação de Cores dos Objetos
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 13 / 18
Introdução ao OpenGL
Exemplo: Variação de Cores dos Objetos
Código:
vo i d d i s p l a y ( vo i d ){
/∗ l impa a j a n e l a ∗/g l C l e a r (GL_COLOR_BUFFER_BIT) ;
/∗ desenha um r e t a n gu l o ∗/g lBeg i n (GL_POLYGON) ;
g l C o l o r 3 f ( 1 . 0 , 1 . 0 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 3 , 0 . 3 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 7 , 0 . 3 , 0 . 0 ) ;g l C o l o r 3 f ( 1 . 0 , 0 . 0 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 7 , 0 . 7 , 0 . 0 ) ;g l V e r t e x 3 f ( 0 . 3 , 0 . 7 , 0 . 0 ) ;
g lEnd ( ) ;
/∗ i n i c i a o proces samento imed ia tamente ∗/g l F l u s h ( ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 14 / 18
Introdução ao OpenGL
Exemplo: Casa
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 15 / 18
Introdução ao OpenGL
Exemplo: Casa
Código:
vo i d d i s p l a y ( vo i d ){
/∗ l impa a j a n e l a ∗/g l C l e a r (GL_COLOR_BUFFER_BIT) ;
/∗ desenha a e s t r u t u r a da casa ∗/g l C o l o r 3 f ( 0 . 0 , 0 . 0 , 0 . 0 ) ;g lBeg i n (GL_LINE_LOOP) ;
g l V e r t e x 2 f ( 0 . 1 7 , 0 . 0 7 ) ;g l V e r t e x 2 f ( 0 . 1 7 , 0 . 5 7 ) ;g l V e r t e x 2 f ( 0 . 4 7 , 0 . 8 7 ) ;g l V e r t e x 2 f ( 0 . 7 7 , 0 . 5 7 ) ;g l V e r t e x 2 f ( 0 . 7 7 , 0 . 0 7 ) ;
g lEnd ( ) ;
/∗ desenha a chamine da casa ∗/g l C o l o r 3 f ( 0 . 0 , 0 . 0 , 0 . 0 ) ;g lBeg i n (GL_LINE_STRIP ) ;
g l V e r t e x 2 f ( 0 . 2 , 0 . 6 ) ;g l V e r t e x 2 f ( 0 . 2 , 0 . 9 0 ) ;g l V e r t e x 2 f ( 0 . 3 5 , 0 . 9 0 ) ;g l V e r t e x 2 f ( 0 . 3 5 , 0 . 7 5 ) ;
g lEnd ( ) ;
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 16 / 18
Introdução ao OpenGL
Exemplo: Casa
Código (Cont...):
/∗ desenha a po r t a da casa ∗/g l C o l o r 3 f ( 1 . 0 , 0 . 0 , 0 . 0 ) ;g lBeg i n (GL_LINE_STRIP ) ;
g l V e r t e x 2 f ( 0 . 2 3 , 0 . 0 7 ) ;g l V e r t e x 2 f ( 0 . 2 3 , 0 . 3 ) ;g l V e r t e x 2 f ( 0 . 3 5 , 0 . 3 ) ;g l V e r t e x 2 f ( 0 . 3 5 , 0 . 0 7 ) ;
g lEnd ( ) ;
/∗ desenha a po r t a da j a n e l a ∗/g lBeg i n (GL_LINE_LOOP) ;
g l V e r t e x 2 f ( 0 . 5 , 0 . 4 ) ;g l V e r t e x 2 f ( 0 . 5 , 0 . 5 5 ) ;g l V e r t e x 2 f ( 0 . 6 5 , 0 . 5 5 ) ;g l V e r t e x 2 f ( 0 . 6 5 , 0 . 4 ) ;
g lEnd ( ) ;
/∗ i n i c i a o proces samento imed ia tamente ∗/g l F l u s h ( ) ;
}
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 17 / 18
Introdução ao OpenGL
Exercícios Propostos:
Desenvolva o código que gere as seguintes imagens:
Rodolfo Ayala Lopes Costa (UFOP) BCC327 - Computação Gráfica 4 de Abril de 2018 18 / 18