Sumário COMPUTAÇÃO GRÁFICA E INTERFACES Transformações Geométricas e Visualização 2D ◊ Modelos e modelagem ◊ Transformações geométricas ◊ Pipeline de visualização 2D ◊ Transformação de coordenadas Window-Viewport ◊ Recorte (Clipping) Carlos Carreto Curso de Engenharia Informática Ano lectivo 2003/2004 Escola Superior de Tecnologia e Gestão da Guarda Modelos e modelagem Modelos e modelagem Modelo É uma representação de uma entidade física ou abstracta. Modelos em computação gráfica Representam os objectos e as cenas que se pretendem desenhar. Modelagem É o processo de representar algo através de modelos. Modelagem em computação gráfica É o processo pelo qual se descreve um modelo (objecto ou cena), de forma a que seja possível desenha-los. 1 Modelos e modelagem Modelos e modelagem Estruturas de dadas Os modelos são armazenados em estruturas de dados que armazenam a informação sobre os objectos e cenas. Existem várias técnicas de representação e armazenamento que dependem da natureza dos modelos e das operações que queremos fazer com eles. Técnicas de representação Modelos e modelagem Modelos e modelagem Técnicas de representação Técnicas de representação Por amostragem de pontos: • armazenamento dos pontos e identificação do método para a aproximação da curva ou superfície amostrada. Por enumeração de pontos • imagem constituída por uma matriz de pontos (bitmap). Por entidades matemáticas com representação analítica conhecida: • círculos, linhas, curvas, etc • representação por parâmetros ou coeficientes que permitem a reconstrução dos objectos através de um procedimento. 2 Modelos e modelagem Modelos e modelagem Técnicas de representação Técnicas de representação Por decomposição planar • representação de áreas de uma superfície por subdivisão sucessiva e hierárquica do plano onde está definida. Por vértices e arestas • é a técnica de representação mais comum. • são armazenados os vértices e as arestas que aproximam os contornos dos objectos. Modelos e modelagem Modelos e modelagem Representação por vértices e arestas Representação por procedimentos Quando o armazenamento numa única estrutura de dados é muito custoso, podemos usar a modelagem baseada em procedimentos onde apenas armazenamos um conjunto mínimo de parâmetros e a identificação de um procedimento capaz de reconstruir o modelo a partir desses parâmetros. É ocaso dos Lsystems e dos fractais. 2 3 4 1 Vértices Arestas X1, y1 1, 2 X2, y2 1, 3 X3, y3 2, 3 X4, y4 3, 4 ... ... 3 Pipeline de Visualização 2D Transformações geométricas 2D Visão preliminar Na maioria das aplicações os objectos que formam uma cena podem sofrear manipulações que alteram o seu aspecto. Estas manipulações são realizadas através de transformações geométricas. Modelo Processo de Visualização 2D Imagem Os objectos são formados por primitivas gráficas tais como pontos, linhas, curvas, etc. Estas primitivas são definidas por coordenadas cartesianos de pontos no espaço. As transformações geométricas são aplicadas a estas coordenada cartesianos alterando uniformemente o aspecto dos objectos, mas não a sua topologia. Isto é, o modelo do objecto não é alterado, pois as transformações geométricas são aplicadas apenas no momento em que o objecto é desenhado. Transformações geométricas 2D Transformações geométricas 2D As transformações geométricas básicas são: Translação Translação A translação troca um objecto de lugar adicionando uma constante de deslocamento às coordenadas de cada ponto do objecto. Variação de Escala X'= X + TX Y'= Y + TY Na forma matricial: Rotação [X' Y'] = [X Y ] + [TX TY ] 4 Transformações geométricas 2D Transformações geométricas 2D Translação Exemplo com Tx = 2 e Ty = -1 Variação de escala A variação de escala altera o tamanho e/ou as proporções do objecto multiplicando as coordenada de cada ponto por factores de escala. X'= X * EX Y'= Y * EY Na forma matricial: [X' Y'] = [X E Y]* X 0 0 EY Transformações geométricas 2D Transformações geométricas 2D Variação de escala Exemplo com Ex = 2 e Ey = 1 Variação de escala em relação a um ponto fixo 1º Translação de modo a fazer coincidir o ponto com a origem; 2º Variação de escala; 3º Translação inversa da primeira. 5 Transformações geométricas 2D Transformações geométricas 2D Variação de escala em relação a um ponto fixo Exemplo: P(2, 2), EX = 2 e EY = 2 Rotação X = cos φ Y = sen φ (X’, Y’) (X, Y) θ φ X’ = cos (φ + θ) = cos φ cos θ – sen φ sen θ y’ = sen (φ + θ) = sen φ cos θ + cos φ sen θ X’ = X . cos θ – Y . sen θ Y’ = Y . cos θ + X . sen θ Transformações geométricas 2D Transformações geométricas 2D Rotação A rotação roda todos os pontos do objecto, segundo um ângulo θ em relação à origem. Rotação Exemplo com θ = 90º X'= X * cos θ - Y * sen θ Y'= X * sen θ + Y * cos θ Na forma matricial: [X' Y'] = [X cosθ senθ Y] * - senθ cosθ 6 Transformações geométricas 2D Transformações geométricas 2D Rotação em relação a um ponto arbitrário Coordenadas homogéneas Verificamos que a representação matricial das transformações não é sempre igual. A translação é tratada como uma soma, enquanto que a variação de escala e a rotação são tratadas como multiplicações. 1º Translação de modo a fazer coincidir o ponto com a origem; 2º Rotação; 3º Translação inversa da primeira. Unindo tudo numa única formula: As transformações devem ser tratadas da mesma maneira para que possam ser facilmente combinadas. X'= (X - Xr ) * cos θ - (Y - Yr ) * sen θ Y'= (Y - Yr ) * cos θ + (X − Xr ) * sen θ Onde (Xr, Yr) é o ponto de referencia, em torno do qual será feita a rotação Para uniformizar a representação matricial das transformações usamos coordenadas homogéneas. Transformações geométricas 2D Transformações geométricas 2D Coordenadas homogéneas P(X, Y) -> P(WX, WY, W), para W≠0 Na computação gráfica consideramos W = 1 Composição das transformações Uma vez que ao usar coordenadas homogéneas, todas as transformações são tratadas como multiplicações, podemos criar uma transformação composta, combinando várias matrizes numa só, multiplicando-as. Depois multiplicamos os vários pontos do objecto pela matriz resultante. Translação: Variação de escala: Rotação [X' [X' [X' Y' 1] = [X Y' 1] = [X Y' 1] = [X 1 Y 1] * 0 TX EX Y 1] * 0 0 0 1 TY 0 EY 0 0 0 1 0 0 1 cosθ senθ 0 Y 1] * - senθ cosθ 0 0 0 1 Exemplo: Ponto P(3, 1, 1) Transformações E(2, 2) e T(2, 1) P’ = (P * E) * T ou P’ = P * (T * E) 7 Transformações geométricas 2D Pipeline de visualização 2D Composição das transformações P’ = (P * E) * T Sistema de Referência do Objecto (SRO) O SRO é o espaço de coordenadas mais adequado à criação do objecto. [X' 2 0 0 1 0 0 Y' 1] = [3 1 1] * 0 2 0 = [6 2 1] * 0 1 0 = [8 3 1] 0 0 1 2 1 1 P’ = P * (T * E) 2 0 0 1 0 2 0 * 0 0 0 1 2 [X' 0 1 1 0 2 0 0 0 = 0 2 0 1 2 1 1 2 0 0 Y' 1] = [3 1 1] * 0 2 0 = [8 3 1] 2 1 1 Pipeline de visualização 2D Pipeline de Visualização 2D Sistema de Referência do Universo (SRU) Depois de modelados, os objectos são posicionados no universo. O SRU é o espaço de coordenadas do universo. Revisitado Modelo (SRO) Transformações geométricas Processo de Visualização 2D (SRU) Imagem 8 Processo de visualização Instanciação Por vezes os objectos de uma cena são derivados de um mesmo modelo, isto é, são instâncias do mesmo modelo. Processo de visualização Instanciação O uso de instâncias torna o universo menor pois para representar instâncias diferentes basta armazenar o nome do modelo e os parâmetros de instanciação. O armazenamento das instâncias pode ser realizado usando tabelas ou listas com o nome do modelo e os valores dos parâmetros de instanciação Modelo Cor TX TY EX EY θ Casa As instâncias possuem a mesma estrutura básica, mas diferem num conjunto de parâmetros como a cor, o tamanho, a posição, etc. Árvore1 Árvore2 ... Processo de visualização Processo de visualização Mapeamento Notemos que os modelos são criados no SRO para posterior instanciação no SRU. Mapeamento O mapeamento converte as coordenadas do sistema de referência do universo (SRU) para o sistema de referência do dispositivo (SRD). As informação do modelo, bem como das instâncias referem-se à aplicação e não ao dispositivo. Isto é, os modelos são criados independentemente do dispositivo. PSRU (XU, YU) PSRD (XD, YD) Para visualizar as instâncias é então necessário converter as coordenadas do modelo para coordenadas do dispositivo. 9 Processo de visualização Processo de visualização Mapeamento Para determinar a coordenada XD Mapeamento Para determinar a coordenada YD (Invertemos a relação dos eixos YY porque crescem em sentidos opostos ) XDmax XUmax X D − X Dmin X U − X Umin = X Dmax − X Dmin X Umax − X Umin XD XU (XDmax − XDmin ) * (XU − XUmin ) + XDmin XUmax − XUmin XDmin YD − YDmax YU − YUmin = YDmin − YDmax YUmax − YUmin YD YU XD = XUmin YDmin YUmax YD = (YDmin − YDmax ) * (YU − YUmin ) + YDmax YUmax − YUmin YDmax YUmin Processo de visualização Processo de visualização Mapeamento Notar que o mapeamento pode ser visto como uma transformação composta que inclui uma translação, uma variação de escala e outra translação. Window e Viewport A Window é a área do universo que interessa visualizar e tem coordenadas no SRU. A Viewport é a área do dispositivo onde o conteúdo da Window vai ser mapeado e tem coordenadas do SRD. Window XD = (XDmax − XDmin ) * (XU − XUmin ) + XDmin XUmax − XUmin Viewport 10 Processo de visualização Pipeline de Visualização 2D Recorte (Clipping) Modelo (Descrição geométrica No SRO) É necessário haver uma etapa de recorte que elimine os objectos que ficam total ou parcialmente fora do Window. Transformações Geométricas Instanciação dos objectos (SRU) Especificação da Window Recorte (SRU) Especificação da Viewport Mapeamento SRU -> SRD Rasterização (SRD) Imagem (Matriz de pontos) 11