computação gráfica i - mat.ufc.bresdras/ck090_2007/notasdeaula/capitulo03.pdf · uma plaqueta...

100
Computação Gráfica I Computação Gráfica I CRAb – Grupo de Computação Gráfica Departamento de Computação UFC

Upload: duongdang

Post on 04-Oct-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

Computação Gráfica IComputação Gráfica I

CRAb – Grupo de Computação Gráfica

Departamento de ComputaçãoUFC

Page 2: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

Objetivos

• Estudar – equipamentos, técnicas de programação e conceitos matemáticos

• Para

2

• Para– representação, manipulação e projeção de objetos bi- e tridimensionais– aplicar a problemas específicos

Page 3: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

Sumário do Curso

• Sistemas Gráficos e Modelos• Programação Gráfica• Input e Interação• Objetos Geométricos e Transformações

3

• Objetos Geométricos e Transformações• Visualização• Pintura• Técnicas Discretas• Implementação de um Renderizador

Page 4: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3. Input e Interação3. Input e Interação

Page 5: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.1 Interação

• Era da computação gráfica interativa– Paradigma• Usuário vê imagem na tela• Reage à imagem através de um dispositivo de interação

5

interação• A imagem muda em resposta ao input

– OpenGL não dá suporte a interação • Razões de portabilidade• Utilizar um toolkit como o GLUT

Page 6: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

• 3.2.0 Introdução– Dispositivos físicos• Teclado• Mouse

6

• Space ball• Light pen•…

– Dispositivos lógicos• Propriedades são especificadas por funcionalidade para o programa de aplicação

Page 7: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

3.2.1 Dispositivos físicos– Dois tipos principais• Pointing devices (Apontadores)• Keyboard devices (Teclados)

7

– Apontadores• Permite ao usuário indicar uma posição na

tela• Têm um ou mais botões para enviar sinais ao

computador

Page 8: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Keaboard• Geralmente é o teclado físico• Pode ser generalizado para qualquer

dispositivo que retorne códigos de caracteres ao programa

8

ao programa

Page 9: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Mouse e Trackball• Semelhantes em uso e em construção• Mecânico– Codificadores dentro do dispositivo– Codificadores giram quando a bola se move

9

– Codificadores giram quando a bola se move– Movimento da bola é convertido em sinais – Sinais enviados ao computador por pares de

codificadores– Codificadores medem movimentos em duas direções

ortogonais

Page 10: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Mouse e Trackball• Detectores Ópticos– Medem distância percorrida, contando linhas em

uma plaqueta especial (pad)

• Dois valores retornados podem ser vistos

10

• Dois valores retornados podem ser vistos como duas posições independentes– Convertidos em uma posição 2D em » Coordenadas do mundo ou» Coordenadas da tela

– Conversão é feita » Pelo sistema gráfico ou» Pelo programa de aplicação

Page 11: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Mouse e Trackball• Dois valores retornados podem ser vistos

também como duas velocidades independentes– Computador integra esses valores para obter

11

– Computador integra esses valores para obter posições

– Mudanças lentas ���� pequenas distâncias– Mudanças rápidas ���� grandes distâncias

vx

vy

x

y

Page 12: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Mouse e Trackball

• São dispositivos de posicionamento relativo

– Se a bola não girar, a coordenada não muda

12

– Posição absoluta da bola (ou do mouse) não é

utilizada

– Não são adequados para traçados de diagramas

Page 13: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Tablets• Fornecem posicionamento absoluto• Matriz de linhas e colunas de fios é embutida sob a superfícies do tablet • Posição da caneta é detectada pela interação

13

• Posição da caneta é detectada pela interação de sinais eletromagnéticos percorrendo os fios do tablet com os sensores da caneta

Page 14: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Telas sensíveis ao toque

• Funcionamento parecido com o tablet

– Touchpads

14

• podem ser configurados como

– Posicionador absoluto ou

– Posicionador relativo

Page 15: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Lightpen• Contem um sensor luminoso (Célula fotoelétrica)• Quando a luz emitida pelo fósforo excede um limiar, – Sensor detecta a luz

15

– Sensor detecta a luz– Caneta emite sinal ao computador– Como o ciclo de retraçarmento do Frame buffer inicia em um tempo determinado, t0 , calcula-se ∆∆∆∆t=ts-to e pode-se determinar a posição na tela.

• Dispositivo de posicionamento direto• Dificuldade de obter posição de regiões escuras

Page 16: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Joystick

• Movimentos em 2 direções ortogonais são codificados (potenciômetro + capacitor)

16

codificados (potenciômetro + capacitor)

Page 17: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

3.2.2 Dispositivos lógicos– Dispositivos de entrada classificados pela

ótica do programa aplicativo

– Duas características comportamentais dos

17

– Duas características comportamentais dos

dispositivos de entrada

• A medida que o dispositivo retorna ao

programa

• O tempo em que o dispositivo retorna a medida

Page 18: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Classes de dispositivos lógicos (PHIGS e GKS)• String• Locator• Pick

18

• Pick• Choice• Dial• Stroke

– OpenGL não adota essa classificação

Page 19: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– String• Fornece ASCII strings ao programa aplicativo• Implementado pelo– Teclado físico ou– Teclado virtual

19

– Teclado virtual

Page 20: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Locator• Fornece posição em coordenadas do mundo ao programa de aplicação

• Implementado por dispositivos apontadores como

20

como– Mouse

– Trackball

• No OpenGL conversão de coordenadas do dispositivo para coordenadas do mundo é feita pelo programa aplicativo

Page 21: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Pick• Retorna o identificador de um objeto ao programa aplicativo

• Implementado pelos mesmos dispositivos físicos que implementam locator

21

físicos que implementam locator– Mouse

– Trackball

• Interface de software é diferente da do locator

• No OpenGL pode-se usar um processo chamado selection para o picking

Page 22: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Choice• Permite que o usuário selecione uma dentre um número discreto de opções

• No OpenGL podem ser usadas widgets fornecidas pelo sistema de janelas

22

fornecidas pelo sistema de janelas– Widgets são dispositivos de interface gráfica

– Menus

– Scrollbars

– Botões gráficos

– Teclas de funções

Page 23: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Dial ou valuators• Provê entrada analógica ao programa aplicativo– Usar widgets– Slidebars– Limitados: controle de volume em rádio

23

– Limitados: controle de volume em rádio

Page 24: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Stroke• Retorna um array de posições• Pressionar um botão do mouse– Inicia transferência de posições ao array

• Liberar o botão do mouse

24

• Liberar o botão do mouse– Encerra a transferência

Page 25: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

3.2.3 Medida e disparo– Entidades que descrevem a maneira como

um dispositivo de entrada (físico ou lógico) fornece input para o programa aplicativo

25

aplicativo– Medida• O que o dispositivo retorna ao programa

– Disparo• É um input físico no dispositivo com o qual o

usuário pode enviar sinal ao computador

Page 26: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Exemplos:• Teclado– Medida: string– Disparo: Tecla de “return” ou “Enter”

• Locator

26

• Locator– Medida: posição– Disparo: Botão do mouse ou da trackball

– Medida pode incluir informação de status• Ajuda a identificar quando houve um disparo

indevido

Page 27: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

3.2.4 Modos de entrada– Pode-se obter a medida em 3 modos– Cada modo é definido pela relação entre• Processo de medida e

27

• Processo de medida e• Disparo

– Inicialização de um dispositivo de entrada• Inicia o processo de medida• Pode necessitar uma chamada explícita a uma função da API• Medidas são colocadas em um buffer

Page 28: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Request Mode (Solicitação)• Medida só retorna ao programa após um disparo

28

Request

Medida

DisparoProcesso de

disparoPrograma

Processo de

medida

Page 29: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Request Mode• Exemplo 1: comando scanf

– Programa pára nesse comando

– Usuário pressiona as teclas, escrevendo a string

29

– Pode demorar o tempo que quiser

– Os caracteres são colocados em um keyboard buffer

– Conteúdo do buffer retorna ao programa após a tecla

“return” ou “enter” é pressionada

Page 30: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Request Mode• Exemplo 2: Locator

– Mover o dispositivo apontador para a posição

desejada

30

– Disparar pressionando um botão do dispositivo

– Posição retorna ao programa aplicativo

Page 31: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Sample Mode (amostragem)• Medida retorna imediatamente após a chamada da função• Não necessita disparo • Usuário deve posicionar o dispositivo apontador

31

• Usuário deve posicionar o dispositivo apontador antes da chamada da função

Sample

Medida

ProgramaProcesso

de medida

Page 32: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Request Mode e Sample Mode em APIs• Usuário deve identificar qual o dispositivo que fornece o input• Interfaces do tipo– request_locator(device_id, &measure);– sample_locator(device_id, &measure);

32

– sample_locator(device_id, &measure);» device_id identifica o dispositivo» measure guarda a medida do dispositivo

• Esses modos são úteis em situações em que o programa guia o usuário• Não são adequados para simuladores de vôo– Vários dispositivos de entrada podem ser usados pelo piloto em um dado instante sem ordem predefinida

Page 33: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Event Mode (Evento)Possibilidade 1• Cada vez que um dispositivo é disparado um evento é gerado• A medida e o identificador do dispositivo que

33

• A medida e o identificador do dispositivo que gerou o evento são colocados na fila de evento• Programa examina evento na frente da fila– Se a fila estiver vazia, espera por um evento– Se houver um evento, programa decide o que fazer

MedidaDisparo

Processo de disparo Programa

Processo de medida

Fila de Evento

Evento

Espera

Page 34: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.2 Dispositivos de Entrada (A9)

– Event Mode (Evento)Possibilidade 2

• Cada vez que um dispositivo é disparado um

evento é gerado

34

• Cada tipo de evento é associado a uma função

chamada callback

– Fução é chamada quando seu evento ocorre

Page 35: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.3 Cliente-Servidor (A9)

• Computação gráfica deve funcionar em– Ambiente de computação distribuída e redes• Servidores executam tarefas para Clientes

35

• Cliente e servidores podem estar– Distribuídos em uma rede ou– Contidos na mesma unidade computacional

• Exemplos– Servidores de impressão– Servidores de arquivos– Servidores gráficos

Page 36: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.3 Cliente-Servidor (A9)

Servidorde impressão Estação Estação Laptop

36

iMac

ServidorGráfico

Servidorde arquivos

Page 37: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.3 Cliente-Servidor (A9)

– Servidor Gráfico• Estação de trabalho com – monitor raster– Keyboard– Dispositivo apontador (mouse, trackball, etc.)

37

– Dispositivo apontador (mouse, trackball, etc.)– …

– Programa OpenGL é um cliente que usa o servidor gráfico

Page 38: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

3.4.0 Introdução– Idéia herdada

do “display processor” dos anos 1960

Host Display Processor

Display File

38

dos anos 1960• Programa processado no host• Lista compilada de instruções enviada ao DPU• Lista armazenada como display file (display

list) na display memory• Host liberado• Display processor executa, repetidamente, a

display list

Page 39: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Hoje• O antigo display processor tornou-se um

servidor gráfico

• O programa do usuário tornou-se um cliente• O gargalo é a quantidade de dados que

39

• O gargalo é a quantidade de dados que trafega entre o cliente e o servidor gráfico

– Modos de enviar uma entidade gráfica do

cliente para o servidor gráfico• Immediate mode• Retained mode

Page 40: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Immediate mode• Envia a descrição completa dos objetos– Vertices

– Atributos

– Tipos de primitivas

40

– Tipos de primitivas

– Transformações de visualização

• Envia assim que o programa executa um comando que define a primitiva

• Primitiva deve ser enviada toda vez que a tela for limpa ou quando a entidade mudar de posição

Page 41: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Retained mode• Define o objeto uma vez

• Põe objeto em uma display list– Há um overhead para isso

• Armazena a display list no servidor

41

• Armazena a display list no servidor– Servidor precisa de memória para isso

• Cliente envia uma chamada ao servidor solicitando que a display list seja desenhada– Diminui o tráfego na rede

– Cliente tira vantagem de hardware gráfico especializado disponível no servidor

Page 42: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

3.4.1 Definição e execução de display lists – Análise de um exemplo em OpenGL#define BOX 1 /* qualquer inteiro não utilizado */glNewList(BOX, GL_COMPILE);

42

glNewList(BOX, GL_COMPILE);glBegin(GL_POLYGON);

glColor3f(1.0, 0.0, 0.0);glVertex2f(-1.0, -1.0);glVertex2f( 1.0, -1.0);glVertex2f( 1.0, 1.0);glVertex2f(-1.0, 1.0);

glEnd();glEndList();

ComentárioBOX: Identificador único

da display listGL_COMPILE: indica que o

sistema deve enviar alista ao servidor mas não deve mostrar o conteúdo

GL_COMPILE_AND_EXECUTE

Page 43: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Quando quiser desenhar a box (caixa) chame a funçãoglCallList(BOX); – Exemplo

ComentárioCuidado com mudanças de estado causadas pela display list

43

glMatrixMode(GL_PROJECTION);for (i=1; i < 5; i++){

glLoadIdentity();gluOrtho2D(-2.0*i, 2.0*i, -2.0*i, 2.0*i);glCallList(BOX);

}

listPor exemplo: dentro da display list BOX, a cor é alterada para vermelho

Page 44: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

3.4.2 Texto e display lists– Ponha cada letra e símbolo do fonte

(raster ou stroke) em uma display list

– Armazene os fontes no servidor usando

44

– Armazene os fontes no servidor usando

as display lists

– Exemplo de como criar seu próprio fonte

com 256 caracteres

• Usar a função OurFont()

Page 45: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

base = glGenLists(256);for (i=0; i < 256; i++){

glNewList(base+i, GL_COMPILE);OurFont(i);

45

OurFont(i);glEndList();

}…

ComentárioglGenLists(number): retorna o primeiro inteiro de uma seqüência de números inteiros consecutivos não utilizados como label.

Page 46: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

void OurFont(char c){ switch(c)

{case ‘a’:…

ComentárioCada case deve conter os comando OpenGL para desenhar a letra

46

…break;case ‘A’:…break;…

}}

OpenGL para desenhar a letra correspondente.

Page 47: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Desenhar letra O dentro de um quadrado unitáriocase ‘O’:

glTranslatef(0.5, 0.5, 0.0); glBegin(GL_QUAD_STRIP);

47

glBegin(GL_QUAD_STRIP);for(i=0; i<=12; i++){ angle = 3.14/6.0 * I;

glVertex2f(0.4*cos(angle), 0.4*sin(angle));glVertex2f(0.5*cos(angle), 0.5*sin(angle));

}glEnd();glTranslatef(0.5, -0.5, 0.0);

break;

Page 48: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Como escrever as letras do font armazenado• Recuperar o identificador base das display lists do font

glListBase(base);

48

glListBase(base);

• Desenhar a string

char *text_string;

glCallLists((Glint) strlen(text_string), GL_BYTE,

text_string);

Page 49: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

• 3.4.3 Fonts na GLUT– Alguns fonts • Raster e• Stroke

49

– Não fazem uso de display lists– Acesso a um caracter ou a um conjunto de carecteres uniformemente espaçadosglutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,

int character)

Page 50: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– ExemploglPushMatrix();

glTranslatef(150.0, 190.0, 0.0);glScalef(0.38, 0.4, 1.0);glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'C');glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'r');

50

glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'r');glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'e');glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 't');glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN, 'o');

glPopMatrix();

Page 51: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– Acesso a caracteres rasterglutBitmapCharacter( GLUT_BITMAP_8_BY_13,

int character);• São copiados diretamente no frame buffer• Não são afetados por transformações

51

• Não são afetados por transformações geométricas• Usa a variável de estado “raster position”• Cada vez que o comando é executado OpenGL move “raster position” um caracter para a direita

Page 52: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.4 Display Lists (A9)

– ExemploglRasterPos2(rx, ry);glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'C');glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'r');glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'e');

52

glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'e');glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 't');glutBitmapCharacter(GLUT_BITMAP_8_BY_13, 'o');

Page 53: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos (A10)

3.5.1 Usando o dispositivo apontador– Dois tipos de eventos• move event: mouse movido com um botão pressionado– medida (posição do mouse) enviada ao programa

53

– medida (posição do mouse) enviada ao programa

• mouse event: botão pressionado ou liberado– medida retornada inclui» botão que gerou o evento» estado do botão após o evento (up ou down)» Posição do cursor que acompanha o mouse, em coordenadas de tela

Page 54: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos (A10)

– Usar função GLUTglutMouseFunc(mouse)

– Função Callback void mouse (int button, int state, int x, int y){

54

{if (button == GLUT_LEFT_BUTTON &&

state == GLUT_DOWN) exit();}

Código Fonte

Código Exec

Page 55: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos (A10)

– Desenhando quadrados em uma janela

Código Fonte

Código Exec

55

Page 56: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

3.5.2 Eventos de janelas– Redimensionamento da janela • reshape event

– Se a janela mudar de dimensões

56

– Se a janela mudar de dimensões• Desenhar objetos que estavam na janela?– Precisa de uma função display

• O que fazer se o aspect ratio mudar?– Para evitar distorção corrigir a viewport

• Os atributos e tamanhos dos objetos devem ser mudados?– Depende da aplicação

Código Fonte

Código Exec

Page 57: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

3.5.3 Eventos de teclado– Ocorrem quando o • mouse está dentro de uma janela e • uma tecla é pressionada

57

Page 58: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

3.5.3 Eventos de teclado– Função GLUT

glutKeyboardFunc(keyboard);• Medidas

Código Fonte

Código Exec

58

– Código ASCII tha tecla pressionada– Posição do mouse

– Função callbackvoid keyboard(unsigned char key, int x, int y){

if (key == ‘q’ || key == ‘Q’) exit(0);}

Page 59: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

3.5.4 Os Callbacks Display e Idle– Usar glutDisplayFunc(display);• Quando GLUT determina que a window deve

ser redesenhada– Janela aberta pela primeira vez

59

– Janela aberta pela primeira vez– Janela muda de posição– Nova cena em uma animação

– Usar glutPostRedisplay();• Função display vai ser executada no máximo

uma vez cada vez que o programa entrar no main loop

Page 60: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

– Idle Callback é chamado quando não acontecer nenhum evento

60

Page 61: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.5 Programando Input Dirigido a Eventos

3.5.5 Gerenciamento de janelas– GLUT suporta• Múltiplas janelas• Subjanela de uma dada janela

61

– Exemplo de uma janela do primeiro nível• Id = glutCreateWindow(“Second window”);

Código Fonte

Código Exec

Page 62: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.6 Menus (A11)

• Utilizar widgets de window toolkits – Rapidez de desenvolvimento– Estética da interface gráfica

• GLUT oferece pop-up menus

62

• Passos para definição de um menu– Definir as entradas– Associar o menu a um determinado botão do mouse– Definir uma função callback associada a cada entrada do menu

Page 63: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.6 Menus (A11)

// Defining the callback functionsglutDisplayFunc(display);

// Creating a pop-up menuglutCreateMenu(demo_menu);

63

glutCreateMenu(demo_menu);glutAddMenuEntry("quit",1);glutAddMenuEntry("increase square size",2);glutAddMenuEntry("decrease square size",3);glutAttachMenu(GLUT_RIGHT_BUTTON);

// Entering the main event loopglutMainLoop();

Page 64: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.6 Menus (A11)

void demo_menu(int id){if (id == 1) exit(0);else if (id == 2) size = size*2;else if (id == 3) size = size/2;

64

else if (id == 3) size = size/2;glutPostRedisplay();

}

Código Fonte

Código Exec

Page 65: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

• Operação lógica de entrada – Permite identificar um objeto desenhado

• Três modos

65

Verificar qual o objeto que intercepta o

quadrado em torno do cursor

Verificar qual o objeto cujo retângulo limite

contém a posição do cursor

Consulta a cor do pixel e uma tabela

de cor ×××× objeto

Page 66: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

• Picking com retângulo limite (bounding box)– Definir um ponto de picking na tela– Obter as coordenadas do mundo desse ponto

66

ponto– Determinar qual o retângulo limite que contém o ponto– Retornar o identificador do objeto associado àquele retângulo limite

• Útil para selecionar itens de menu

Page 67: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

• Picking com back buffer– Imagem renderizada no back buffer não é exibida– Desenhar objetos com as cores de picking

3.7 Picking (A11)

67

– Desenhar objetos com as cores de picking – Obter posição com o mouse callback– Usar glReadPixels() para obter cor do pixel apontado pelo mouse– Procurar na tabela objetos ×××× cores o identificador do objeto cuja cor é igual à do pixel selecionado

Page 68: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

3.7.1 Modo de picking e de seleção– Como identificar primitivas cujas

projeções estão próximas a um ponto selecionado na tela

68

– OpenGL provê um modo de renderização chamado selection mode• Objetos não são renderizados no buffer de

cores (frame buffer)• GLint glRenderMode(GLenum mode);

Page 69: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– GLint glRenderMode(GLenum mode);• mode: GL_RENDER (default) • mode: GL_SELECT• mode: GL_FEEDBACK

– Modo GL_SELECT

69

– Modo GL_SELECT• Antes de chamar glRenderMode(GL_SELECT);• Chamar glSelectBuffer(GLsizei size, GLuint

*buffer)– Especifica o array de seleção buffer[size]

• Valor de retorno de glRenderMode usado para indicar o número de hits (número de objetos selecionados)

Page 70: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Entrar modo de seleção– Renderizar a cena– Cada primitiva renderizada dentro do

volume de clipping gera uma mensagem (hit)

70

(hit)– Cada hit é armazenado em um buffer

(name stack)• Funções relacionadas ao name stack– Inicialização – Pushing informação na pilha– Poping informação da pilha– Manipulação dos dados no topo da pilha

Page 71: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Informações geradas na name stackchamada de hit list

– hit list é examinada após a renderização• Para obter informação de picking

71

Page 72: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Funções utilizadas• void glSelectBuffer(GLsizei n, GLunint *buff)– Define buff[size] para armazenar dados

selecionados

• void glInitNames()

72

• void glInitNames()– Inicializa a pilha de nomes (name stack)

• void glPushName(GLunint name)– Push name na pilha de nomes

• void glPopName()– Pop o name do topo da pilha de nomes

• void glLoadName(GLuint name)– Troca o nome do topo da pilha de nomes por name

Page 73: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Observações• Cada objeto a ser identificado é um conjunto

de primitivas ao qual atribui-se um identificador (name)

• Antes de renderizar o objeto, coloca-se seu identificador na pilha de nomes

73

identificador na pilha de nomes• Não se pode carregar um identificador em

uma pilha vazia– glInitNames();– glPushName(0); // 0 é um nome não utilizado

• Geralmente usa-se o mouse callback para – entrar no modo de seleção– Sair do modo de seleção antes do fim do callback

Page 74: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– ... Observações• Quando retorna-se ao modo GL_RENDER– glRenderMode(GL_RENDER) retorna o número de

hits processados• Dentro do mouse callback– Muda-se o volume de clipping para se obter hits na

74

– Muda-se o volume de clipping para se obter hits na região desejada (próxima à posição do mouse)

– Usar gluPickMatrix(x, y, w, h, *vp)» (x, y): posição do cursor em coordenadas da

OpenGL window (origem no canto inferior esquerdo)

» w x h: retângulo de picking centrado em (x, y)» vp: vp[0] = vp_xmin, vp[1] = vp_xmax,

vp[2] = vp_ymin, vp[3] = vp_ymax

Page 75: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Objetos que são renderizados dentro do

75

Page 76: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.7 Picking (A11)

– Objetos que são renderizados dentro do

Código Fonte

Código Exec

76

Page 77: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.8 Um Programa Simples de Pintura (A11)

• Ilustra o uso de– Callbacks– Display lists– Projeto de um programa interativo

• Características

Código Fonte

Código Exec

77

• Características– Trabalhar com objetos geométricos–Manipular pixels– Oferecer atributos de controle– Incluir menus– Permitir mover e redimensionar janela

Page 78: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.8 Um Programa Simples de Pintura (A11)

• Esse programa tem uma área de menu que é parte do canvas.– Coordenadas do

78

– Coordenadas do mouse são testadas para identificar qual o menu selecionado

• Botão direito do mouse ativa pull-down menu “quit” ou “clear”

Page 79: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

• Rotacionar um quadrado com single buffer

• Modificar o programa para double buffering

79

buffering• Analisar outros tipos de buffers

Page 80: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

3.9.1 O quadrado giratório– Função display: • limpa frame buffer e • Desenha quadrado

(cos θθθθ, sin θθθθ)

(-cos θθθθ, -sin θθθθ)(sin θθθθ, -cos θθθθ)

(-sin θθθθ, cos θθθθ)

80

– vértices no círculo trigonométrico

– Usar a função idle que incrementa o ângulo θθθθ

– Usar a função mouse que chama a função idle com um click no botão esquerdo

(-cos θθθθ, -sin θθθθ)

Código Fonte Código Exec

Page 81: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

– Função displayvoid display(){

glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON);

thetar = theta/((2*3.14)/360.);

81

thetar = theta/((2*3.14)/360.);glVertex2f( cos(thetar), sin(thetar));glVertex2f( -sin(thetar), cos (thetar));glVertex2f( -cos(thetar), -sin(thetar));glVertex2f( sin(thetar), -cos(thetar));

glEnd();}

Page 82: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

– Função idlevoid idle(){

theta+= 2;if(theta >= 360.) theta -= 360;

82

if(theta >= 360.) theta -= 360;glutPostRedisplay();

}– Chamada pela glutIdleFunc(idle);

Page 83: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

– Função mousevoid mouse(int button, int state, int x, int y){

if(button==GLUT_LEFT&&state==GLUT_DOWN)glutIdleFunc(idle);

83

glutIdleFunc(idle);if(button==GLUT_MIDDLE_BUTTON&&state==GLUT_DOWN)glutIdleFunc(NULL);

}– Chamada pela glutMouseFunc(mouse);

Page 84: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.9 Animando Programas Interativos (A12)

3.9.2 Double Buffering– Usa dois frame buffers para desenhar e

mostrar a cena • Front buffer é mostrado

84

• Back buffer é usado para desenhar a próxima seqüência

– Trocar os dois buffers usando o comando glutSwapBuffers();• Gera um display callback

Código Fonte Código Exec

Page 85: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.10 Projeto de Programas Interativos (A12)

• Características de um bom programa interativo– Imagem sem cintilação ou artefatos– Variedade de dispositivos de interação – Variedade de métodos para entrada e saída

85

– Variedade de métodos para entrada e saída de informações– Interface com o usuário intuitiva– Feedback para o usuário– Tolerância aos erros do usuário– Projeto que leve em conta ergonomia

Page 86: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.10 Projeto de Programas Interativos (A12)

• Área de pesquisa responsável por isso– IHC (Interação Humano-Computador)– HCI (Human-Computer Interaction)

86

Page 87: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.10 Projeto de Programas Interativos (A12)

• 3.10.1 Toolkits, Widgets e o Frame Buffer– Toolkits• GTK+/gtkmm (http://www.gtkmm.org/)

87

• Trolltech Qt (http://www.trolltech.com/)• FOX Toolkit (http://www.fox-toolkit.com) • FLTK (http://www.fltk.org/)• wxWindows (http://www.wxwindows.org/ )• Tcl/Tk (http://www.tcl.tk/software/tcltk/)

Page 88: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.10 Projeto de Programas Interativos (A12)

3.10.1 Toolkits, Widgets e o Frame Buffer• Widgets do wxWindows

88

Page 89: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.10 Projeto de Programas Interativos (A12)

3.10.1 Toolkits, Widgets e o Frame Buffer• Frame Buffer – Como menus e outros objetos podem

aparecer sobre o canvas sem danificar o conteúdo

89

conteúdo• Pop-up menus• Rubberbanding

– Duas soluções• Bit-block-transfer (bitblt)• XOR operation

Page 90: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Exemplo de imagem danificada pelo pop-up menu

Exit

90

Exit

Page 91: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Exemplo de imagem danificada por rubberbanding

91

Page 92: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Solução 1– Quando a scan conversion da área do

pop-up menu ou da primitiva desenhada com rubberband for feita• Salvar os bits do Frame-buffer que irão ser

92

• Salvar os bits do Frame-buffer que irão ser substituídos

• Copiá-los de volta quando o pop-up menu desaparecer ou quando uma nova primitiva temporária do rubberbanding for desenhada

Page 93: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Solução 2– Utilizar o XOR

Pixel Fonte: Pixel da primitiva a ser desenhadaPixel Lido: Pixel a ser substituídoPixel Destino: Valor de substituição depois da

93

Pixel Destino: Valor de substituição depois da operação lógica

Color Buffer

Pixel Fonte

Pixel Lido

Pixel Destino

Page 94: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Solução 2– Utilizar o XOR

Pixel Fonte: 10100110Pixel Lido: 10001011

Pixel Destino: 00101101

XOR

XOR

94

Pixel Destino: 00101101Pixel Fonte: 10100110

Pixel Destino:10001011

Color Buffer

Pixel Fonte

Pixel Lido

Pixel Destino

XOR

Pixel Lido

Page 95: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

• Solução 2 com OpenGL– Sair do default Copy Mode: GL_COPY• glEnable(GL_COLOR_LOGIC_OP);• glLogicOp(GL_XOR);

95

Page 96: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

3.11.1 Desenhando linhas deletáveis– Habilitar o modo de operações lógicas

glEnable(GL_COLOR_LOGIC_OP);

– Quando estiver desenhando objetos

96

– Quando estiver desenhando objetos temporários, mude para o modo XORglLogicOp(GL_XOR);

Page 97: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

3.11.1 Desenhando linhas deletáveis– No modo XOR• Desenhe o objeto com a cor fonte– A cor que aparece na tela é o resultado da operação XOR entre a cor fonte e a cor que estiver no frame

97

XOR entre a cor fonte e a cor que estiver no frame buffer

• Para apagar o objeto, desenhe-o novamente com a cor fonte– A cor que aparecerá na tela é a cor que estava no frame buffer antes do objeto ser desenhado a primeira vez Código Fonte

Código Exec

Page 98: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

3.11.2 XOR e Cor

11111111 00000000 00000000

00000000 11111111 00000000

98

11111111 00000000 00000000

11111111 11111111 00000000

XOR

Page 99: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

3.11.3 Cursor e planos sobrepostos (overlay)– Desenhar cursor nos planos overlay• Não interfere com a imagem RGB nos demais

planos

99

planos

Red bit planes

Green bit planes

Blue bit planes

Overlay bit planes

Page 100: Computação Gráfica I - mat.ufc.bresdras/ck090_2007/notasdeaula/Capitulo03.pdf · uma plaqueta especial (pad) ... – Não são adequados para traçados de diagramas. 3.2 Dispositivos

3.11 Operações Lógicas (A12)

100

RGB Planes RGB Overlay Planes

Display: Imagem Overlayparece copiada sobre of color buffer