• Nenhum resultado encontrado

Viewing 2D

N/A
N/A
Protected

Academic year: 2022

Share "Viewing 2D"

Copied!
73
0
0

Texto

(1)

Viewing 2D

SCC0250 - Computação Gráca

Prof. Fernando V. Paulovich

http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br

Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP)

11 de abril de 2013

(2)

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(3)

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(4)

Processo para criar a visão 2D de uma cena, determinando quais partes serão mostradas e suas localizações na tela

A imagem é determinada no sistema de coordenadas do mundo (world coordinates) cujas partes especicadas (selecionadas) são mapeadas para o sistema de coordenadas do dispositivo (device coordinates)

Esse mapeamento envolve uma série de translações, rotações e escalas

Assim como operações para eliminar as partes da imagem que estão fora da área de visão

(5)

Introdução

Janela de Recorte ou Clipping Window

Uma seção de uma cena 2D que é selecionada para ser mostrada Tudo o que estiver fora dessa seção será cortado fora

Viewport

A Janela de Recorte pode ser posicionada dentro de uma janela do sistema usando outra janela chamada de Viewport

Objetos dentro da Janela de Recorte (o que será visto) são

mapeados para a Viewport, que por sua vez é posicionada dentro da janela do sistema (onde serão vistos)

Múltiplas Viewports podem ser usadas para mostra diferentes seções da imagem em diferentes posições

(6)
(7)

Introdução

Transformação 2D da Visão

Mapeamento de uma descrição da cena no sistema de coordenadas do mundo para o sistema de coordenadas do dispositivo

Para acelerar o processo de recorte, sistemas grácos convertem a descrição dos objetos para coordenadas normalizadas (entre 0e1 ou entre−1e1)

(8)

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(9)

A Janela de Recorte

Embora seja possível criar Janelas de Recorte de qualquer formato, a maioria as APIs grácas somente suporta janelas retangulares alinhadas aos eixos xey devido o custo computacional

Normalmente a Janela de Recorte é especicadas no sistema de coordenadas do mundo

(10)

coordenadas de visão dentro do sistema de coordenadas de mundo Isso permite especicar uma Janela de Recorte retangular em qualquer posição

Uma visão das coordenadas do mundo é obtida transferindo a cena para as coordenadas de visão

(11)

Sistema de Coordenadas de Visão da Janela de Recorte

Escolhe-se uma origem P0= (x0, y0)no sistema de coordenadas de visão e uma orientação usando um vetor Vque dá a direçãoyview

Vé chamado de view-up vector 2D

Outra abordagem é denir um ângulo de rotação relativa a xouy e a partir desse obter o view-up vector

(12)

transformar a descrição dos objetos em uma cena usando translações e rotações para sobrepor os diferentes sistemas de coordenadas

Translado a origemP0 para a origem do sistema de coordenadas de mundo

Rotaciono o sistema de visão para alinhá-lo com o sistema de coordenadas de mundo

Essa conversão, entre coordenadas do mundo em coordenadas de visão é dada por

MW C,V C =R·T

(13)

Sistema de Coordenadas de Visão da Janela de Recorte

(14)

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(15)

Normalização e Transformações de Viewport

Em alguns sistemas, a normalização e a transformação window-viewport são combinadas em uma única operação

Nesse caso as coordenadas da viewport são denidas entre0e1 Após o recorte, o quadrado unitário contendo a viewport é mapeado para o dispositivo de saída

Em outros sistemas a normalização e as rotinas de recorte são aplicadas antes das transformações de viewport

Nesse caso as coordenadas do viewport são as coordenadas da tela

(16)

Considerando uma viewport com as coordenadas entre 0e1, temos que mapear a descrição dos objetos para esse espaço normalizado usando transformações que mantenham a posição relativa de um ponto como foi denida na Janela de Recorte

O ponto é mapeado para

(17)

Mapeando a Janela de Recorte em uma Viewport Normalizada

Para transformar um ponto no sistema de coordenadas do mundo para um ponto na viewport, temos que fazer

xv−xvmin

xvmax−xvmin = xw−xwmin

xwmax−xwmin yv−yvmin

yvmax−yvmin

= yw−ywmin

ywmax−ywmin

Resolvendo para o posição(xv, yv)na viewport temos xv=Sx·xw+tx

yv=Sy·yw+ty

(18)

Onde os fatores de escala são

sx= xvmax−xvmin

xwmax−xwmin sy= yvmax−yvmin

ywmax−ywmin

E os fatores de translação são

tx= xwmax·xvmin−xwmin·xvmax xwmax−xwmin

ty =ywmax·yvmin−ywmin·yvmax ywmax−ywmin

(19)

Mapeando a Janela de Recorte em uma Viewport Normalizada

Como simplesmente mapeamos o sistema de coordenadas de mundo para uma viewport, é possível obter o mesmo resultado usando uma sequencia de transformações

Converter o retângulo da Janela de Recorte no retângulo da viewport

Isso pode ser obtido fazendo

1 Escala a Janela de Recorte para ter o tamanho da viewport usando o ponto xo(xwmin, ywmin)

2 Translada(xwmin, ywmin)para(xvmin, yvmin)

(20)

Onde a matriz de escala é S=

sx 0 xwmin(1−sx) 0 sy ywmin(1−sy)

0 0 1

E a matriz de translação é T=

1 0 xvmin−xwmin

0 1 yvmin−ywmin

0 0 1

(21)

Mapeando a Janela de Recorte em uma Viewport Normalizada

Sendo a matriz composta

Mwindow,normviewport=T·S

Igual a

Mwindow,normviewport=

sx 0 tx 0 sy ty 0 0 1

Comsx,sy,txety dados anteriormente

(22)

Nesse mapeamento, as posições relativas dos objetos são mantidas Um objeto dentro da Janela de Recorte estará dentro da viewport As proporções relativas dos objetos só serão mantidas se a razão de aspecto da viewport for igual a da Janela de Recorte

Em outras palavrassx tem de ser igual asy

(23)

Mapeando a Janela de Recorte em um Quadrado Normalizado

Uma outra abordagem para a transformação de visão é transformar a Janela de Recorte em um quadrado normalizado, fazer o recorte em coordenadas normalizadas e então transferir a descrição da cena para a viewport especicada no sistema de coordenadas da tela

Nessa representação, (parte dos) objetos fora dos limites x=±1e y=±1são facilmente detectados e removidos da cena

(24)

Para se mapear o conteúdo da Janela de Recorte para o quadrado normalizado procedemos similarmente a transformação

window-viewport fazendo xvmin =yvmin =−1e xvmax=yvmax= +1

Mwindow,normsquare=

2

xwmax−xwmin 0 −xwxwmax+xwmin

max−xwmin

0 yw 2

max−ywminywywmax+ywmin

max−ywmin

0 0 1

(25)

Mapeando a Janela de Recorte em um Quadrado Normalizado

Similarmente, após os algoritmos de recorte serem aplicados, a quadrado normalizado de tamanho2é transformado na viewport fazendoxwmin =ywmin=−1 exwmax=ywmax=−1

Mnormsquare,viewport=

xvmax−xvmin

2 0 xvmax+xv2 min

0 yvmax−yv2 min yvmax+yv2 min

0 0 1

(26)

O último passo consiste em posicionar a área da viewport na janela da tela

(27)

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(28)

denir que a matriz em uso é a matriz de projeção

1 glMatrixMode(GL.GL_PROJECTION);

Não esqueça que as transformações são cumulativas, então quando necessário carregar a matriz identidade

1 glLoadIdentity();

(29)

Denindo a Janela de Recorte

A Janela de Recorte é denida por

1 glOrtho2D(GLfloat xwmin, GLfloat xwmax, GLfloat ywmin, GLfloat ywmax);

Se a Janela de Recorte não for especicada, as coordenadas padrão serão xwmin=yw=min=−1 exwmax=ywmax= +1

O processo de recorte ocorre em um quadrado normalizado entre−1 e1

(30)

1 glViewport(GLint xvmin, Glint yvmin, GLsizei vpWidth, GLsizei vpHeight);

Todos os parâmetros são dados no sistema de coordenadas da tela, relativas a janela de visão

(xvmin, yvmin): canto inferior esquerdo

vpW idthevpHeight: largura e altura da viewport

(31)

Múltiplas Viewports

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(32)

3 voiddesenha_objeto(GL gl) {

4 gl.glBegin(GL.GL_TRIANGLES);//desenha um triangulo 5 gl.glVertex2i(50, -50);

6 gl.glVertex2i(0, 50);

7 gl.glVertex2i(-50, -50);

8 gl.glEnd();

9

10 gl.glBegin(GL.GL_LINE_LOOP);//desenha um quadrado 11 gl.glVertex2i(-99, -99);

12 gl.glVertex2i(99, -99);

13 gl.glVertex2i(99, 99);

14 gl.glVertex2i(-99, 99);

15 gl.glEnd();

16 }

17

18 public voidinit(GLAutoDrawable drawable) { 19 GL gl = drawable.getGL();

20 gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);//dene cor de fundo 21 gl.glMatrixMode(GL.GL_PROJECTION);//carrega a matriz de projeção 22 gl.glLoadIdentity();//lê a matriz identidade

23

24 GLU glu =newGLU();

25 glu.gluOrtho2D(-100.0, 100.0, -100.0, 100.0);//dene janela de recorte

26 }

27

(33)

Múltiplas Viewports

Codicando

1 public voiddisplay(GLAutoDrawable drawable) {

2 GL gl = drawable.getGL();

3 gl.glClear(GL.GL_COLOR_BUFFER_BIT); //desenha o fundo (limpa a janela)

4

5 gl.glMatrixMode(GL.GL_MODELVIEW);//matrix em uso: modelview

6 gl.glLoadIdentity();

7

8 gl.glViewport(10, 10, 200, 200);//dene a viewport

9 gl.glColor3f(1.0f, 0.0f, 0.0f);//altera o atributo de cor

10 desenha_objeto(gl);//desenha o objeto

11

12 gl.glViewport(310, 10, 100, 100);//dene a viewport

13 gl.glColor3f(0.0f, 1.0f, 0.0f);//altera o atributo de cor

14 gl.glRotatef(90, 0, 0, 1);

15 desenha_objeto(gl);//desenha o objeto

16

17 gl.glFlush();//processa as rotinas OpenGL o mais rápido possível

18 }

(34)

2 //acelera o rendering

3 GLCapabilities caps =newGLCapabilities();

4 caps.setDoubleBuffered(true);

5 caps.setHardwareAccelerated(true);

6

7 //cria o painel e adiciona um ouvinte GLEventListener

8 GLCanvas canvas = newGLCanvas(caps);

9 canvas.addGLEventListener(newRenderer());

10

11 //cria uma janela e adiciona o painel

12 JFrame frame =newJFrame("Aplicação JOGL Simples");

13 frame.getContentPane().add(canvas);

14 frame.setSize(500, 275);

15 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

16

17 //inicializa o sistema e chama display() a 60 fps

18 Animator animator =newFPSAnimator(canvas, 60);

19 frame.setLocationRelativeTo(null);

20 frame.setVisible(true);

21 animator.start();

22 }

(35)

Mantendo Razão de Aspecto

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(36)

4 GL gl = drawable.getGL();

5 gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);//dene cor de fundo

6 }

7

8 voiddesenha_objeto(GL gl) {

9 gl.glBegin(GL.GL_TRIANGLES);//desenha um triangulo 10 gl.glVertex2i(50, -50);

11 gl.glVertex2i(0, 50);

12 gl.glVertex2i(-50, -50);

13 gl.glEnd();

14

15 gl.glBegin(GL.GL_LINE_LOOP);//desenha um quadrado 16 gl.glVertex2i(-55, -55);

17 gl.glVertex2i(55, -55);

18 gl.glVertex2i(55, 55);

19 gl.glVertex2i(-55, 55);

20 gl.glEnd();

21 }

22

23 public voiddisplay(GLAutoDrawable drawable) { 24 GL gl = drawable.getGL();

25 gl.glClear(GL.GL_COLOR_BUFFER_BIT);//desenha o fundo (limpa a janela) 26

27 gl.glMatrixMode(GL.GL_MODELVIEW);//matrix em uso: modelview 28 gl.glLoadIdentity();

29

30 gl.glColor3f(1.0f, 0.0f, 0.0f);//altera o atributo de cor 31 desenha_objeto(gl);//desenha o objeto

32

33 gl.glFlush();//processa as rotinas OpenGL o mais rápido possível

34 }

(37)

Mantendo Razão de Aspecto

Mantendo Razão de Aspecto

1 public voidreshape(GLAutoDrawable drawable, intx,int y,int width,int height- ) {

2 GL gl = drawable.getGL();

3

4 // Evita a divisão por zero

5 if(height == 0) {

6 height = 1;

7 }

8

9 // Inicializa o sistema de coordenadas

10 gl.glMatrixMode(GL.GL_PROJECTION);

11 gl.glLoadIdentity();

12

13 // Estabelece a janela de recorte

14 GLU glu =newGLU();

15 if(width <= height) {

16 glu.gluOrtho2D(-100.0f, 100.0f, (-100.0f * height) / width, (100.0f * height- ) / width);

17 }else{

18 glu.gluOrtho2D((-100.0f * width) / height, (100.0f * width) / height, -100.0- f, 100.0f);

19 }

20 }

(38)

2 //acelera o rendering

3 GLCapabilities caps =newGLCapabilities();

4 caps.setDoubleBuffered(true);

5 caps.setHardwareAccelerated(true);

6

7 //cria o painel e adiciona um ouvinte GLEventListener

8 GLCanvas canvas = newGLCanvas(caps);

9 canvas.addGLEventListener(newRenderer());

10

11 //cria uma janela e adiciona o painel

12 JFrame frame =newJFrame("Aplicação JOGL Simples");

13 frame.getContentPane().add(canvas);

14 frame.setSize(500, 500);

15 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

16

17 //inicializa o sistema e chama display() a 60 fps

18 Animator animator =newFPSAnimator(canvas, 60);

19 frame.setLocationRelativeTo(null);

20 frame.setVisible(true);

21 animator.start();

22 }

(39)

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(40)

No Viewing Pipeline serve para extrair uma porção designada de uma cena para ser apresentada em um dispositivo de saída Identica as partes de uma imagem que estão fora da Janela de Recorte, eliminando essas da descrição da cena que é passada para o dispositivo de saída

Por eciência, o recorte é aplicado sobre Janelas de Recorte normalizadas

Isso reduz cálculos porque todas as matrizes de transformação de geometria e visão podem ser concatenadas para serem aplicadas a uma cena antes do recorte acontecer

(41)

Algoritmos de Recorte

Existem diversos algoritmos para o recorte de Pontos

Linhas (segmentos de linhas retos) Áreas-preenchidas (polígonos) Curvas

Texto

Os três primeiros são componentes padrão dos pacotes grácos Maior rapidez de processamento se as fronteiras dos objetos forem segmentos de reta

(42)

retangular na posição padrão, com arestas de fronteira em xwmin, xwmax,ywmin eywmax

Tipicamente correspondendo ao quadrado normalizado entre0e1 ou−1e1

(43)

Recorte de Ponto 2D

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(44)

saída se e somente se

xwmin≤x≤xwmax

ywmin ≤y≤ywmax

Esse processo é especialmente útil para cortes em sistemas de partículas, como nuvens, fumaça, explosões, etc.

(45)

Recorte de Linha 2D

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(46)

Processa cada linha em uma cena por meio de uma série de testes e cálculos de intersecção para determinar se uma linha ou parte dela precisa ser desenhada

A tarefa mais cara computacionalmente do recorte é calcular as intersecções das linhas com a Janela de Recorte

(47)

Recorte de Linha 2D

Recorte de Linha 2D

É fácil determinar se uma linha está completamente dentro da janela, mas é mais difícil determinar se essa está completamente fora

Quando os dois pontos limitantes de uma linha estão dentro da janela (linhaP1P2), a linha está completamente dentro

Quando os dois pontos limitantes estão fora de qualquer uma das quatro fronteiras (linhaP3P4), a linha está completamente fora Se ambos testes falham, o segmento de linha intersecta ao menos uma das fronteiras da janela, e pode ou não cruzar o interior da mesma

(48)

(x0, y0)e(xend, yend)temos que

x=x0+u(xend−x0) y=y0+u(yend−y0)

0 ≤ u ≤ 1

Podemos determinar a posição de interseção da reta com cada fronteira da janela substituindo o valor da coordenada da fronteira paraxouy e resolvendo parau

Se0> u >1, então não há cruzamento

Caso contrário, parte da reta está dentro da fronteira, e podemos processar essa parte contra as outras fronteiras até determinar se a reta será eliminada ou encontrar a seção que está dentro da janela

(49)

Recorte de Linha 2D

Recorte de Linha 2D

Essa abordagem apesar de simples, não é muito eciente

É possível reformular o teste inicial e os cálculos de interseções para reduzir o tempo de processamento

(50)

Um dos primeiros algoritmos para acelerar o processo de recorte O tempo de recorte é reduzido executando mais testes antes dos cálculos das intersecções

Inicialmente a cada ponto nal das linhas é assinalado um valor binário de 4 dígitos, o código da região

(51)

Recorte de Linha 2D

Recorte de Linha de Cohen-Sutherland

Os valores binários indicam se o ponto está fora de uma fronteira 0 (false): dentro ou sobre a fronteira

1 (true): fora da fronteira

(52)

Um ponto abaixo e a esquerda a janela de recorte recebe valor0101,

(53)

Recorte de Linha 2D

Recorte de Linha de Cohen-Sutherland

Os valores dos bits são determinados comparando suas coordenadas (x, y)com as fronteiras de recorte

O bit 1 é denido como1sex < xwmin

Os outros são obtidos de forma similar

É possível executar esse teste de forma mais eciente usando operações binárias seguindo dois passos

1 Calcular a diferença entre as coordenadas dos pontos e as fronteiras da janela

2 Usar o sinal resultante para denir o valor do código (−vira1,+ vira0)

bit 1 é o sinal dexxwmin

bit 2 é o sinal dexwmaxx bit 3 é o sinal deyywmin

bit 4 é o sinal deywmaxy

(54)

linha está completamente fora ou dentro da janela

Linhas completamente dentro tem seus pontos denidos como0000 Linhas que tenham1nas mesmas posições dos pontos nais está completamente fora da janela de recorte

Uma linha com pontos nais identicados por1001e0101está completamente a esquerda da janela de recorte

(55)

Recorte de Linha 2D

Recorte de Linha de Cohen-Sutherland

Esses testes podem ser executados ecientemente usando operações lógicas

1 Quando a operação ou entre dois pontos for falsa (0000) a linha está dentro

2 Quando a operação e entre dois pontos for verdadeira (não0000) a linha está completamente fora

(56)

ou dentro da janela de recorte são então processadas para vericar intersecções

(57)

Recorte de Linha 2D

Recorte de Linha de Cohen-Sutherland

Conforme cada intersecção com as fronteiras da janela de recorte são calculadas, a linha é recortada até restar apenas o que está dentro da janela, ou nenhuma parte esteja dentro da mesma Para determinar se uma linha cruza alguma fronteira, é somente necessário vericar os bits correspondentes da fronteira dos pontos nais

Se um dos bits for1e outro0, a linha cruza a fronteira

(58)

P1= 0100→está dentro da fronteira esquerda P2= 1001→está fora da fronteira esquerda

Calcula a intersecçãoP02e recorta a seçãoP2P02

(59)

Recorte de Linha 2D

Recorte de Linha de Cohen-Sutherland

Para se determinar as intersecções da reta denida pelos pontos (x0, y0)e(xend, yend)podemos usar a equação explicita

y=y0+m(x−x0)

O valor de xseráxwmin ouxwmax e a inclinação será m= (yend−y0)/(xend−x0)

Os valores de xda intersecção podem ser calculados usando x=x0+y−y0

m O valor de yseráywminou ywmax

(60)

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(61)

Recorte de Polígonos 2D

Recorte de Polígonos 2D

Para fazer o corte de polígonos, os algoritmo de recorte de linhas não podem ser aplicados porque em geral esses não produziriam polígonos fechados

Produziriam linhas desconexas sem informação de como uni-las para formar o polígono recortado

(62)

É possível processar o polígono contra as fronteiras da janela de recorte de forma semelhante ao algoritmo de recorte de linhas

Isso é feito determinando o novo formato do polígono cada vez que uma fronteira de recorte é processada

(63)

Recorte de Polígonos 2D

Recorte de Polígonos 2D

É possível vericar se um polígono está completamente dentro ou fora da janela de recorte vericando suas coordenadas máximas e mínimas

Quando uma área não puder ser identicada como completamente dentro ou fora, as intersecções são calculadas

(64)

criar uma nova lista de vértices a cada recorte realizado contra uma fronteira, e então passar essa lista para o próximo recorte, contra outra fronteira

Para polígonos côncavos o processo é mais complexo podendo resultar em múltiplas listas de vértices

(65)

Recorte de Polígonos 2D

Recorte de Polígonos de Sutherland-Hodgman

Algoritmo de Sutherland-Hodgman

Uma forma eciente de realizar esse recorte é mandar os vértices dos polígonos para cada estágio de recorte de forma que os vértices recortados possa ser passado imediatamente para o próximo estágio

Elimina a necessidade de uma lista de novos vértices para cada estágio de recorte

Permite implementação paralela do recorte

(66)

cada linha sucessiva do polígono para uma série de recortadores (esquerda, direita, inferior e superior)

Conforme o recorte é executado para um par de vértices, as coordenadas recortadas são enviadas para o próximo recortador Existem 4 diferentes casos que precisam ser considerados quando uma aresta do polígono é processada

1 O primeiro ponto nal da aresta está fora da janela de recorte e o segundo dentro

2 Ambos pontos nais estão dentro da janela de recorte

3 O primeiro ponto nal da aresta está dentro da janela de recorte e o segundo fora

4 Ambos pontos nais estão fora da janela de recorte

(67)

Recorte de Polígonos 2D

Recorte de Polígonos de Sutherland-Hodgman

Para facilitar a passagem dos vértices de um recortador para outro, a saída de cada recortador pode ser da seguinte forma

(68)

recortadores, a saída é gerada para o próximo recortador de acordo com os seguintes testes

1 Se o primeiro vértice está fora da janela e o segundo dentro, é mandado para o próximo recortador a intersecção obtida e o segundo vértice

2 Se ambos vértices estão dentro, somente o segundo vértice é enviado

3 Se o primeiro vértice está dentro da janela e o segundo fora, é mandado para o próximo recortador somente a intersecção

4 Se ambos vértices estão fora, nada é enviado

(69)

Recorte de Polígonos 2D

Recorte de Polígonos de Sutherland-Hodgman

(70)

Para polígonos côncavos, problemas podem ocorrer já que esse algoritmo apenas dene como saída uma única lista de vértices

(71)

Recorte de Outras Primitivas 2D

Sumário

1 Introdução

2 A Janela de Recorte

3 Normalização e Transformações de Viewport

4 Programação OpenGL Múltiplas Viewports

Mantendo Razão de Aspecto

5 Algoritmos de Recorte Recorte de Ponto 2D Recorte de Linha 2D Recorte de Polígonos 2D Recorte de Outras Primitivas 2D

(72)

Áreas curvas podem ser recortadas usando abordagens parecidas com as apresentadas

Se as curvas forem aproximações poligonais, então o recorte é o mesmo apresentado anteriormente

Caso contrário o procedimento de recorte irá envolver equações não-lineares

(73)

Recorte de Outras Primitivas 2D

Recorte de Texto

Existem diversas formar para se fazer o recorte de texto, a escolha dependendo do pacote gráco utilizado e como as letras são geradas

Referências

Documentos relacionados

Já o artigo de Noêmia Lazzareschi (“Novas competências profissionais e empregabilidade no limiar do século XXI”) intercala mapeamento conceitual com

Os resultados obtidos nos experimentos de filtração com dosagem ótima e super-dosagem de sulfato de alumínio e pH de coagulação próximo de 5 promoveram as melhores remoções

O 25º artigo do dossiê é assinado por Filipe Giuseppe Dal Bo Ribeiro onde em “Geopolítica do século XXI: a perspectiva chinesa do sistema internacional”

O presente artigo se propôs a estabelecer as bases fundamentais do Direito &amp; Literatura e, a partir delas, examinar relevantes aspectos da obra literária “1984” de

10,0 Maria Luisa Vilela Zeller Direito civil: a evolução social e jurídica da mulher Marco Aurélio

A redução da duração do tratamento em doentes infetados com genótipo 2 ou 3 com elevada carga viral (HVL) basal (&gt; 800.000 IU/ml) que se tornem VHC negativos à 4ª semana deve

Foram analisados 56 artigos, dos quais 18 foram selecionados por abordarem os efeitos biológicos causados pela radiação ionizante aos embriões ou fetos e exames

Nesse novo período de (re)afirmação da exclusão política pelo discurso da inclusão – só que agora em escala global –, mais uma vez a racionalidade ocidental torna-se evidente