Operações em uma subdivisão planar 2D Rodrigo de Toledo (CG1, UFRJ, 2011.1)
Viewport 2D Exemplo: (em pixels) Umin = 0 Vmin = 0 Umax = 300 Vmax = 200 Exemplo: (em coordenadas de mundo) Xmin = -500 Ymin = 300 Xmax = 400 Ymax = 800 Como transformar? Manter aspect ratio?
Viewport 2D
Viewport 2D
Ponto Percorrer sequencialmente os pontos comparando a localização. ? Percorrer sequencialmente os pontos comparando a localização. Como tratar precisão? Margem (threshold) Distância euclidiana
Aresta V2 P ? V1 P pertence a reta? P está entre V1 e V2?
Triângulo (v1xv2) = {x1y2 – y1x2} ? ? Produto Vetorial de 2 v1xv2 > 0, se e só se v2 está “a esquerda” de v1
Ponto no interior de um triângulo (CW ou CCW) V3 a31 a23 P é interior se t1, t2 e t3 tem o mesmo sentido, ou seja: N Pi V1 a12 V2 Pe
Polígono convexo ? V5 V4 V1 P V3 V2 Pergunta se P está do mesmo lado de todas as arestas...
Polígono côncavo ? V1 V3 P V4 V6 V2 V5
Polígono côncavo Achar fecho convexo Verificar se OK para fecho convexo senão está fora Considerar área que não pertence ao fecho convexo como polígono CW (sentido horário). Verificar se dentro deste polígono senão está dentro Atenção: pode ser mais de um polígono... pode ser que o polígono também seja côncavo, tendo de usar recursão nesse caso
Regra da paridade (even-odd parity rule) B Um ponto é considerado dentro de um polígono se uma raio vindo do infinito cruzar um número par de bordas! Cuidado!
Como descobrir qual triângulo? Existe alguma outra maneira do que percorrer todos os triângulos?
Rasterização de cor Truque usado em 3D Chamar a função que renderiza com cores no “back-buffer” Leia o pixel do back-buffer correspondente a posição do mouse-click. Processe a cor para descobrir qual o item que foi clicado. Obs: Cuidado para que não apareça ao usuário o esquema de cores. http://www.lighthouse3d.com/opengl/picking/index.php3?color1
Subdivisão do espaço Em 2D, o mais comum é quadtree dos vértices? das arestas? dos triângulos? Em 3D se chama octree Existem outras subdivisões mais inteligentes...
kD-tree Em 3D
BSP (Binary Space Partition)