introdução a opengl - uspwiki.icmc.usp.br/images/3/36/rosane_cg_pos_introducao_opengl.pdf · //...
TRANSCRIPT
![Page 1: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/1.jpg)
Introdução a OpenGL
Renato Rodrigues Oliveira da SilvaDanilo Medeiros Eler
Adaptado do material de
Marcela X. Ribeiro
Maria Cristina F. de Oliveira
Rosane Minghim
![Page 2: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/2.jpg)
2
Sumário
IntroduçãoNúcleo OpenGL, GLU, GLUTAmbiente 2DAmbiente 3DTratamento de Eventos
![Page 3: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/3.jpg)
3
Introdução – O que é OpenGL?
OpenGL – Open Graphics LibraryÉ uma API (Application Program Interface) para o aplicações gráficasAbstrai a complexidade do hardware
![Page 4: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/4.jpg)
4
Introdução - Histórico
Especificação gerenciada por um consórcio independente formado em 1992
Constituído por empresas líderes na área: NVIDIA, 3Dlabs, Apple Computer...Responsável pela aprovação de novas funcionalidades, versões e extensões da OpenGLhttp://www.opengl.org
![Page 5: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/5.jpg)
5
Núcleo OpenGL
Pipeline
Armazenamentoem memória dos
comandos OpenGL
Processamento dedados geométricos
e imagens
RasterizationOperações de
fragmento
Chamadas a funções da API OpenGL
Frame Buffer
![Page 6: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/6.jpg)
6
Exemplo – Primitivas Geométricas
Triângulos
glBegin(GL_TRIANGLES);
glVertex2f(x1, y1, z1);
glVertex3f(x2, y2, z2);
glVertex3f(x3, y3, z3);
glEnd();
![Page 7: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/7.jpg)
7
Exemplo – Primitivas Geométricas
Quadriláteros
glBegin(GL_QUADS);
glVertex3f(x1, y1, z1);
glVertex3f(x2, y2, z2);
glVertex3f(x3, y3, z3);
glVertex3f(x4, y4, z4);
glEnd();
![Page 8: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/8.jpg)
8
Exemplo – Primitivas Geométricas
exemploPrimitivasGeometricas.c
![Page 9: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/9.jpg)
9
OpenGL: Máquina de Estados
OpenGL rastreia diversas variáveis de estado
Tamanho atual de um ponto, cor de fundo da janela, cor do desenhoO valor corrente permanece ativo até que seja alterado
Tamanho de ponto: glPointSize(3.0)Cor de traçado: glColor3f(red, green, blue)Cor de fundo: glClearColor(r, g, b, alpha)...
![Page 10: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/10.jpg)
10
Exemplo OpenGL
exemploEstadosOpenGL.c
![Page 11: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/11.jpg)
11
Padronização dos nomes das funções
Convenção:<Prefixo Biblioteca> <Comando Raiz>
<Contador de Argumentos> <Tipo Argumentos>
Visa padronizar e facilitar a utilizaçãoPossibilita identificar a qual biblioteca a função pertence, quantos argumentos possui e quais são os tipos dos argumentos.
![Page 12: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/12.jpg)
12
Exemplo
void glColor3f(GLfloat red, GLfloat green,
GLfloat blue)
//gl – É o prefixo da biblioteca GL
//Color – comando objetivo da função
//3 – contador para o número de argumentos
//f – indica o tipo dos argumentos
Padronização dos nomes das funções
![Page 13: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/13.jpg)
13
Tipos de Dados
Tipos de dados próprios para OpenGLTornam o programa-fonte portável
............
GLfloatfloatfloat 32 bitsf
GLintint/longinteiro 32 bitsi
GLshortshortinteiro 16 bitss
GLbytesigned charinteiro 8 bitsb
nometipo CTiposufixo
![Page 14: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/14.jpg)
14
Tipos de Dados
//Perigo!!: sistema passa int...void drawDot(int x, int y) { glBegin(GL_POINTS); glVertex2i(x, y); // função “espera” inteiro 32 bits glEnd();}
// código seguro. void drawDot(GLint x, GLint y) { glBegin(GL_POINTS); glVertex2i(x, y); glEnd();}
![Page 15: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/15.jpg)
15
GLU – OpenGL Utility Library
Instalada junto com a OpenGLContém uma série de funções que encapsulam comandos OpenGL de mais baixo nível
Definição de matrizes para projeçãoDesenho de superfícies quádricasCurvas e superfícies NURBS
![Page 16: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/16.jpg)
16
GLUT – OpenGL Utility Toolkit
Por ser portável, a OpenGL não possui funções para gerenciamento de janelas, tratamento de eventos ou manipulação de arquivos
Podem ser utilizadas as funções específicas de cada plataformaOu usar uma biblioteca independente (GLUT, FLTK, wxWidgets, por exemplo)
![Page 17: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/17.jpg)
17
GLUT – OpenGL Utility Toolkit
Biblioteca que inclui alguns elementos de interface gráfica com o usuário
Criação de janelas e menus pop-upGerenciamento de eventos de mouse e teclado
Independente de plataforma
![Page 18: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/18.jpg)
18
GLUT - Inicialização
void glutInitDisplayMode(parâmetros)GLUT_DOUBLE: Define que a GLUT usará dois buffers de corGLUT_SINGLE: Define apenas um buffer de corGLUT_DEPTH: Define o uso de um buffer de profundidade (z-buffer), para remoção de superfícies escondidasGLUT_RGB: Define que as cores são especificadas por componentes RGB
![Page 19: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/19.jpg)
19
GLUT - Inicialização
void glutInitWindowPosition(int x, int y)Define a posição inicial da janela. Os parâmetros representam o canto superior esquerdo
void glutInitWindowSize(int width, int height)Define a largura e altura da janela
int glutCreateWindow(char *string)Cria a janela e define o seu título
![Page 20: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/20.jpg)
20
GLUT - Inicialização
Exemploint main(int argc, char *argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow(“Primeiro
Programa”);
glutMainLoop();
}
![Page 21: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/21.jpg)
21
GLUT - Exemplo
exemploEstadosOpenGL.c
![Page 22: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/22.jpg)
22
Ambiente de Trabalho
![Page 23: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/23.jpg)
23
Ambiente de Trabalho
Em OpenGL os objetos são representados no Sistema de Referência do Universo (SRU)
Plano cartesiano bi ou tridimensional, com eixos se interceptando na origem
Todos os comandos e modelos são definidos em relação a este sistema de referência
![Page 24: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/24.jpg)
24
Ambiente de Trabalho
No monitor do computador é adotado o SRT (Sistema de Referência da Tela)
No SRT a origem fica no canto superior esquerdo do monitor
![Page 25: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/25.jpg)
25
Ambiente de Trabalho - 2D
No caso 2D, é necessário definir a porção o universo que desejamos mapear na tela.
Essa área é chamada de janela de seleção, ou window
void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
![Page 26: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/26.jpg)
26
Ambiente de Trabalho - 2D
exemploPrimitivasGeometricas.c
![Page 27: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/27.jpg)
27
Ambiente de Trabalho - 3D
observador ou câmera
projeção
![Page 28: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/28.jpg)
28
Ambiente de Trabalho - 3D
A GLU oferece a seguinte função para posicionar e orientar a câmera
void gluLookAt(GLdouble obsx, obsy, obsz,
alvox, alvoy, alvoz,
upx, upy, upz)//obs*: define a posição da câmera
//alvo*: ponto para onde o observador está olhando
//up*: vetor que indica a 'vertical' da câmera
![Page 29: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/29.jpg)
29
Projeção Perspectiva
As projetantes emanam de um único ponto, a uma distância finita do plano de projeção
![Page 30: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/30.jpg)
30
Projeção Perspectiva
void gluPerspective(GLdouble fovy, aspect,
zNear, zFar)
//fovy: ângulo de abertura da câmera em y
//aspect: área de visualização em x
//zNear: distância do observador ao plano de corte frontal
//zFar: distância do observador ao plano de corte traseiro
![Page 31: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/31.jpg)
31
Projeção Perspectiva
Exemplovoid Desenha(){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, 1.0f, 0.5, 500); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(40, 60, 100, 0, 0, 0, 0, 1, 0); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f, 0.0f, 1.0f); glutWireCube(50); glFlush(); }
![Page 32: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/32.jpg)
32
Projeção Paralela
As projetantes são paralelas entre siNão há alteração nas medidas do objeto
![Page 33: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/33.jpg)
33
Projeção Paralela
void gluOrtho(GLdouble left, right,
bottom, top, near, far)/*Os parâmetros definem os limites mínimo e
máximo da janela de projeção em x, y e z.*/
![Page 34: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/34.jpg)
34
Projeção Paralela
Exemplovoid Desenha(){ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-65.0, 65.0, -65.0, 65.0, -400.0, 400.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(40,60,100, 0,0,0, 0,1,0); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f, 0.0f, 0.0f); glutWireCube(50); glFlush(); }
![Page 35: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/35.jpg)
35
GLUTTratamento de Eventos
![Page 36: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/36.jpg)
36
GLUT – Tratamento de eventos
Gerenciamento de eventos por meio de funções “callback”Quem chama a função para o tratamento de um evento não é o programador e sim a GLUTO programador define apenas a função a ser chamada, respeitando os parâmetros definidos pela GLUT
![Page 37: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/37.jpg)
37
GLUT – Tratamento de eventos
void glutDisplayFunc( Desenha)Define que a função Desenha será a responsável por redesenhar a janela, sempre que necessárioA função deve ter o seguinte protótipo
void <nomeFunção> (void)
![Page 38: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/38.jpg)
38
GLUT – Tratamento de eventos
void glutReshapeFunc (AlteraTamanhoJanela)Define a função que será responsável por tratar o evento referente ao redimensionamento da janelaDeve ter o protótipo
void <nomeFunção> (int largura, int altura)
![Page 39: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/39.jpg)
39
GLUT – Tratamento de eventos
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow(“Primeiro Programa”);
glutDisplayFunc(Desenha);
glutReshapeFunc(AlteraTamanhoJanela);
...
}
![Page 40: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/40.jpg)
40
GLUT – Interação com o teclado
void glutKeyboardFunc(Teclado)Trata o pressionamento de teclas comuns
void <nomeFunção> (unsigned char tecla, int x, int y)
Tecla representa o código ASCII da tecla pressionadaOs parâmetros x e y representam as coordenadas do mouse quando o evento ocorreu
![Page 41: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/41.jpg)
41
GLUT – Interação com o teclado
Exemplo
exemploTecladoOpenGL.c
![Page 42: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/42.jpg)
42
GLUT – Interação com o mouse
void glutMouseFunc(GerenciaMouse)Trata eventos de pressionamento e liberação de botões do mouse
void <nomeFunção> (int botao, int estado, int x, int y)
botão: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON
estado: GLUT_UP, GLUT_DOWN
![Page 43: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/43.jpg)
43
GLUT – Interação com o mouse
Ex. posicionar pontos com o mouse
exemploMouseOpenGL.c
![Page 44: Introdução a OpenGL - USPwiki.icmc.usp.br/images/3/36/Rosane_CG_Pos_Introducao_OpenGL.pdf · // código seguro. void drawDot(GLint x, GLint y) {glBegin(GL_POINTS); glVertex2i(x,](https://reader030.vdocuments.net/reader030/viewer/2022040607/5ec0e0ac81486f7cb812e276/html5/thumbnails/44.jpg)
44
Bibliografia
Cohen, M. , Manssour, I. H, OpenGL – Uma Abordagem Prática e Objetiva