COMPUTAO GRFICA E INTERFACES Visualizao e Transformaes Geomtricas

  • Slides: 40
Download presentation
COMPUTAÇÃO GRÁFICA E INTERFACES Visualização e Transformações Geométricas em 3 D Curso de Engenharia

COMPUTAÇÃO GRÁFICA E INTERFACES Visualização e Transformações Geométricas em 3 D Curso de Engenharia Informática Ano lectivo 2004/2005 Escola Superior de Tecnologia e Gestão da Guarda

Pipeline de visualização da Open. GL v e r t i c e Matriz

Pipeline de visualização da Open. GL v e r t i c e Matriz de Modelização e Visualização objet o Matriz de Projeção olho Divisão Perspectiva recorte Transformação “viewport” normalizadas de dispositivo janela

Estado inicial do pipeline Inicialmente: • As matrizes modelview e projection são matrizes-identidade; •

Estado inicial do pipeline Inicialmente: • As matrizes modelview e projection são matrizes-identidade; • Vértices não são transformados e a projecção é paralela sobre o plano x-y; • O mundo visível é restrito ao cubo -1 ≤ x, y, z ≤ 1; A transformação viewport mapeia o quadrado -1 ≤ x, y ≤ 1 (em coordenadas normalizadas de dispositivo) na superfície total da janela.

Viewport A viewport é a área rectangular onde a imagem será visualizada. Em Open.

Viewport A viewport é a área rectangular onde a imagem será visualizada. Em Open. GL a viewport é definida com a função: void gl. Viewport( GLint x, GLint y, GLsizei width, GLsizei height ) gl. Viewport(0, 0, (GLint)width, (GLint)height); gl. Viewport(-100, (GLint)width, (GLint)height);

Primitivas gráficas gl. Begin(TIPO_PRIMITIVA); gl. Vertex 3 f(x, y, z); . . . gl.

Primitivas gráficas gl. Begin(TIPO_PRIMITIVA); gl. Vertex 3 f(x, y, z); . . . gl. End()

Primitivas gráficas Propriedades de linhas e pontos Tamanho (default = 1): gl. Point. Size(

Primitivas gráficas Propriedades de linhas e pontos Tamanho (default = 1): gl. Point. Size( GLfloat size ) gl. Line. Width( GLfloat width ) Suavização (default = desligado): gl. Enable(GL_POINT_SMOOTH) gl. Enable(GL_LINE_SMOOTH) gl. Disable(GL_POINT_SMOOTH) gl. Disable(GL_LINE_SMOOTH)

Primitivas gráficas Propriedades de polígonos A ordenação dos vértices define a face frontal; O

Primitivas gráficas Propriedades de polígonos A ordenação dos vértices define a face frontal; O default é o sentido anti-horário; É possível alterar a ordem: gl. Front. Face(GL_CW) Sentido horário gl. Front. Face(GL_CCW) Sentido anti-horário

Primitivas gráficas Modos de renderização Wireframe: gl. Polygon. Mode(GL_FRONT, GL_LINE); Sólido: gl. Polygon. Mode(GL_FRONT,

Primitivas gráficas Modos de renderização Wireframe: gl. Polygon. Mode(GL_FRONT, GL_LINE); Sólido: gl. Polygon. Mode(GL_FRONT, GL_FILL); Pontos: gl. Polygon. Mode(GL_FRONT, GL_POINT); Backface Culling: gl. Enable(GL_CULL_FACE); Z-Buffer: gl. Enable(GL_DEPTH_TEST);

Primitivas gráficas Objectos sólidos da biblioteca GLUT glut. Solid. Teapot(GLdouble size); glut. Solid. Cube(GLdouble

Primitivas gráficas Objectos sólidos da biblioteca GLUT glut. Solid. Teapot(GLdouble size); glut. Solid. Cube(GLdouble size); glut. Solid. Sphere(GLdouble radius, GLint slices, GLint stacks); glut. Solid. Cone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); glut. Solid. Torus(GLdouble inner. Radius, GLdouble outer. Radious, GLint nsides, GLint rings); glut. Solid. Icosahedron(void); glut. Solid. Octahedron(void); glut. Solid. Tetrahedron(void); glut. Solid. Dodecahedron(GLdouble radious); Todas estas funções também podem ser usadas para desenhar objectos em wire-frame Para isto, basta substituir a substring Solid por Wire no nome da função.

Transformações geométricas 3 D Translação y x z

Transformações geométricas 3 D Translação y x z

Transformações geométricas 3 D Rotação em torno do eixo Z • Sabemos que y

Transformações geométricas 3 D Rotação em torno do eixo Z • Sabemos que y x z • Então • Ou, finalmente,

Transformações geométricas 3 D Matrizes de rotação • Rotação em torno de Z •

Transformações geométricas 3 D Matrizes de rotação • Rotação em torno de Z • Rotação em torno de X • Rotação em torno de Y

Transformações geométricas 3 D Variação de escala y y x z

Transformações geométricas 3 D Variação de escala y y x z

Transformações geométricas 3 D em Open. GL As trnasformações geométricas são aplicadas nas matrizes

Transformações geométricas 3 D em Open. GL As trnasformações geométricas são aplicadas nas matrizes modelview e projection do pipeline : A matriz é escolhida através da função gl. Matrix. Mode(GL_MODELVIEW); ou gl. Matrix. Mode(GL_PROJECTION); As transformações geométricas Translação, Rotação e Variação de escala são implementadas respectivamente pelas funções: gl. Translated( GLdouble x, GLdouble y, GLdouble z ); gl. Translatef( GLfloat x, GLfloat y, GLfloat z ); gl. Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ); gl. Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z ); gl. Scaled( GLdouble x, GLdouble y, GLdouble z ); gl. Scalef( GLfloat x, GLfloat y, GLfloat z ); Existem outras funções para manipular as matrizes das transformações: gl. Load. Identity() gl. Mult. Matrix () gl. Load. Matrix() gl. Push. Matrix () gl. Pop. Matrix()

Projecções Geométricas As projecções permitem a visualização planar de objectos tridimensionais. Para gerar a

Projecções Geométricas As projecções permitem a visualização planar de objectos tridimensionais. Para gerar a imagem de um objecto 3 D, precisamos converter as coordenadas 3 D em coordenadas 2 D que correspondem a uma visão específica do objecto. Esse processo é chamado de projecção.

Projecções Geométricas Elementos básicos das projecções Sendo a projecção de um objecto a sua

Projecções Geométricas Elementos básicos das projecções Sendo a projecção de um objecto a sua representação gráfica num plano, e tendo os objectos três dimensões, para a sua representação num plano bidimensional devem ser considerados os seguintes elementos básicos da projecção: • Plano de Projecção; • Projectante, ou raio de projecção; • Centro de projecção. A projectante é a recta que passa pelos pontos do objecto na direcção do centro de projecção e intercepta o plano de projecção. Ela pode ser oblíqua ou ortogonal ao plano de projecção, definindo assim o tipo de projecção. Plano de Projeção Centro de Projeção Projectante ou Raio de projecção

Projecções Geométricas Tipos de projecções geométricas Existem dois tipos de projecção: a perspectiva e

Projecções Geométricas Tipos de projecções geométricas Existem dois tipos de projecção: a perspectiva e a ortográfica (paralela). Na projecção perspectiva as projectantes convergem para o centro de projecção fazendo com que a projecção resultante tenha em conta a distância a que se encontra o objecto, do plano de projecção. A projecção perspectiva é aquela que acontece no processo de formação de imagens nossos olhos ou numa câmara fotográfica, por isso é a que gera imagens mais realistas e mais familiares ao observador humano.

Projecções Geométricas Tipos de projecções geométricas Na projecção ortográfica ou paralela, o centro de

Projecções Geométricas Tipos de projecções geométricas Na projecção ortográfica ou paralela, o centro de projecção está no infinito e as projectantes são paralelas entre si. Na projecção paralela, as linhas que unem os pontos A e B às suas projecções A’ e B’ são paralelas, isto faz com que o segmento projectado tenha o mesmo tamanho para qualquer distância entre o plano de projecção e o objecto. Este tipo de projecção é utilizada em projectos de arquitectura e engenharia onde não há preocupação com a distância aparente dos objectos e o que realmente interessa é que a escala e os ângulos dos objectos seja preservada

Projecções Geométricas As projecções geométricas são classificadas conforme o organograma seguinte. Esta classificação depende

Projecções Geométricas As projecções geométricas são classificadas conforme o organograma seguinte. Esta classificação depende das relações entre o centro de projecção, o plano de projecção e as projectantes.

Projecções Geométricas Projecções paralelas ortográficas Usadas em desenhos técnicos – Engenharias Civil e Mecânica

Projecções Geométricas Projecções paralelas ortográficas Usadas em desenhos técnicos – Engenharias Civil e Mecânica – Arquitectura Vantagens – Medidas precisas; – Todas as vistas na mesma escala; Limitações – Não é possível “visualizar” objectos 3 D; – Múltiplas vistas para definir peça;

Projecções Geométricas Projecções paralelas axonométricas Mesmo método das vistas ortogonais • Isométricas: – ângulos

Projecções Geométricas Projecções paralelas axonométricas Mesmo método das vistas ortogonais • Isométricas: – ângulos de 120º entre eixos (1 escala) • Dimétricas: – dois ângulos iguais (2 escalas) • Trimétrica: – três ângulos diferentes (3 escalas)

Projecções Geométricas Projecções paralelas obliquas Raios projectores formam ângulo oblíquo com o plano de

Projecções Geométricas Projecções paralelas obliquas Raios projectores formam ângulo oblíquo com o plano de projecção. Plano de projecção normal a um dos eixos principais. Vantagens – Mostra forma exacta de uma face; – Comparação de dimensões possível; – Ideia da aparência 3 D de um objecto; Desvantagens – aparência distorcida dependendo do plano de projecção; – falta de “realismo”;

Projecções Geométricas Projecções paralelas obliquas (dois casos especiais) Cavaleira – ngulo entre projectores e

Projecções Geométricas Projecções paralelas obliquas (dois casos especiais) Cavaleira – ngulo entre projectores e normal = 45º; – Faces perpendiculares à escala. Gabinete – ngulo entre projectores e normal arctg(2) = 63. 4º; – Faces perpendiculares à escala de 50%.

Projecções Geométricas Projecções perspectivas Usadas mais em publicidade e artes gráficas mas também em

Projecções Geométricas Projecções perspectivas Usadas mais em publicidade e artes gráficas mas também em arquitectura, desenho industrial, engenharia. Garantem maior “realismo” mas alteram a geometria dos objectos As linhas paralelas dos objectos (não ao plano de projecção), convergem em pontos de fuga. As linhas paralelas aos eixos definem pontos de fuga axiais (máximo de 3). Não mantém proporcionalidade entre distâncias. O tamanho dos objectos diminui com a distância. Só mantém a amplitude dos ângulos em faces paralelas ao plano de projecção.

Projecções Geométricas Projecções perspectivas

Projecções Geométricas Projecções perspectivas

Projecções Geométricas Definição matemática da projecção genérica Qualquer projecção pode ser definida matematicamente por

Projecções Geométricas Definição matemática da projecção genérica Qualquer projecção pode ser definida matematicamente por uma matriz 4 x 4. Considere-se a projecção de um ponto P ilustrada na figura ao lado. O plano de projecção é perpendicular ao eixo z na distância zp da origem. O centro de projecção está a uma distância D do ponto (0, 0, zp). O vector normalizado (dx, dy, dz) dá a direcção de projecção e é a direcção de (0, 0, zp) para o centro de projecção.

Projecções Geométricas Definição matemática da projecção genérica Para construir a matriz geral de projecção,

Projecções Geométricas Definição matemática da projecção genérica Para construir a matriz geral de projecção, a qual chamaremos de Mgeral, basta sabermos apenas os valores de zp, (dx, dy, dz) e D. A partir desta matriz geral é possível definir qualquer tipo de projecção. Deve -se apenas ter em conta as características gerais das projecções paralelas e perspectivas, e as características específicas dos casos especiais dessas projecções. A direcção do vector unitário (dx, dy, dz) e o valor de D (distância do ponto (0, 0, zp) ao centro de projecção) pode ser calculada da seguinte forma:

Projecções Geométricas Matriz geral de projecção em Open. GL void __fastcall Form 1: :

Projecções Geométricas Matriz geral de projecção em Open. GL void __fastcall Form 1: : Form. Resize() { GLfloat mprojecao[16]; gl. Viewport(0, 0, width, height); gl. Matrix. Mode( GL_PROJECTION ); gl. Load. Identity(); mprojecao [0]=1; mprojecao [1]= 0; mprojecao [2]= 0; mprojecao [3]= 0; [4]= 0; mprojecao [5]= 1; mprojecao [6]= 0; mprojecao [7]= 0; [8]= 0; mprojecao [9]= 0; mprojecao [10]= 0; mprojecao [11]= 1/7; [12]= 0; mprojecao [13]= 0; mprojecao [14]= 0; mprojecao [15]= 1; gl. Load. Matrixf (mprojecao); gl. Clear. Color(0. 0 f, 0. 0 f); gl. Clear( GL_COLOR_BUFFER_BIT ); gl. Clear(GL_DEPTH_BUFFER_BIT); gl. Enable(GL_DEPTH_TEST); } gl. Matrix. Mode( GL_MODELVIEW ); gl. Load. Identity(); Formato da matriz em Open. GL

Projecções Geométricas Definição da matriz de projecção perspectiva – 1º exemplo Para simplificar, considere-se

Projecções Geométricas Definição da matriz de projecção perspectiva – 1º exemplo Para simplificar, considere-se a projecção perspectiva representada na figura ao lado com o centro de projecção em (0, 0, 0) e direcção de projecção ortogonal. Os parâmetros para definir a matriz de projecção perspectiva Mper para este exemplo, são respectivamente: Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz de projecção perspectiva: Notar que neste exemplo basta conhecer a distância D para que a matriz de projecção possa ser definida.

Projecções Geométricas Definição da matriz de projecção perspectiva – 2º exemplo Considere-se uma nova

Projecções Geométricas Definição da matriz de projecção perspectiva – 2º exemplo Considere-se uma nova projecção perspectiva ortogonal representada na figura ao lado, agora com o plano de projecção em zp = 0 e o centro de projecção em (0, 0, -D). Os parâmetros para definir a matriz de projecção perspectiva M’per, são respectivamente: Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz de projecção perspectiva: Notar que mais uma vez, basta conhecer a distância D para que a matriz de projecção possa ser definida.

Projecções Geométricas Projecção perspectiva em Open. GL Em Open. GL existe uma matriz de

Projecções Geométricas Projecção perspectiva em Open. GL Em Open. GL existe uma matriz de projecção perspectiva default com direcção ortogonal. Para configuração de uma projecção perspectiva em Open. GL (utilizando a matriz default), é apenas necessário definir o volume visível representado na figura ao lado. O volume visível é definido pelo tronco de uma pirâmide. São especificados os valores de X máximo e mínimo assim como os valores de Y máximo e mínimo. O valor de Near é igual a -Z min e o valor de Far é igual a -Z max. Somente será visualizado o que estiver dentro deste volume visível. A projecção é definida pelos seguintes comandos: gl. Matrix. Mode( GL_PROJECTION ); gl. Load. Identity(); gl. Frustum(Xmin, Xmax, Ymin, Ymax, Near, Far);

Projecções Geométricas Projecção perspectiva em Open. GL Existe outra função da biblioteca GLU (utilitária

Projecções Geométricas Projecção perspectiva em Open. GL Existe outra função da biblioteca GLU (utilitária da Open. GL), que fornece uma outra maneira de se configurar uma projecção perspectiva em Open. GL. Ela permite que seja especificado o ângulo de visão (ou field of vision), da projecção: glu. Perspective (fovy, aspecto, near, far); Onde: fovy -> é o ângulo de visão aspect -> Largura (w na figura) / Altura (h na figura) da janela de visualização. near e far -> idênticos aos parâmetros do comando Frustum.

Projecções Geométricas Definição da matriz de projecção perspectiva – 3º exemplo Considere-se agora a

Projecções Geométricas Definição da matriz de projecção perspectiva – 3º exemplo Considere-se agora a projecção perspectiva da figura ao lado em que a direcção de projecção não é ortogonal ao plano de projecção. Os parâmetros para definir uma matriz de projecção perspectiva M 1, são respectivamente: Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz de projecção perspectiva:

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 1 Considere-se a projecção

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 1 Considere-se a projecção ortográfica da figura ao lado com direcção de projecção ortogonal. Como a projecção paralela pode ser vista como uma projecção perspectiva onde o centro de projecção está no infinito, o valor de D (distância do centro de projecção ao ponto (0, 0, zp), neste caso zp = 0) será infinito. Os parâmetros para definir uma matriz de projecção perspectiva Mpar, são respectivamente: Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz de projecção paralela: Notar que neste caso especial de projecção paralela não é necessário conhecer qualquer parâmetro da projecção e a matriz da mesma é constante.

Projecções Geométricas Projecção ortográfica em Open. GL Em Open. GL já vem definida também

Projecções Geométricas Projecção ortográfica em Open. GL Em Open. GL já vem definida também uma matriz de projecção com direcção ortogonal default para a projecção ortográfica. Como na projecção perspectiva, para realizar uma projecção deste tipo em Open. GL (utilizando esta matriz default), é necessário definir-se apenas o volume visível ilustrado na figura ao lado. O volume visível é definido por um paralelepípedo. São especificados os valores de X máximo e mínimo assim como os valores de Y máximo e mínimo. O valor de Near é igual a -Z min e o valor de Far é igual a - Z max. Como na projecção perspectiva, somente será visualizado o que estiver dentro deste volume visível. A projecção é definida pelos seguintes comandos: gl. Matrix. Mode( GL_PROJECTION ); gl. Load. Identity(); gl. Ortho(Xmin, Xmax, Ymin, Ymax, Near, Far);

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 2 A projecção isométrica

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 2 A projecção isométrica é uma projecção onde o plano de projecção (e consequentemente a direcção de projecção) faz o mesmo ângulo com cada eixo principal (x, y, e z). Existem apenas oito direcções (uma em cada octante), que satisfazem esta condição. Por exemplo: (1, 1, 1), (1, -1) e (-1, -1). Essa projecção é muito útil, pois as medidas junto aos eixos são feitas na mesma escala (iso: igual, metric: medida). A matriz Miso de uma projecção isométrica com direcção de projecção igual a (-1, -1) é definida pelos parâmetros: Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz de projecção paralela:

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 3 As projecções cabinet

Projecções Geométricas Definição da matriz de projecção ortográfica – Exemplo 3 As projecções cabinet e cavaleira são muito utilizadas em arquitectura e engenharia. Para a projecção cavaleira, a direcção de projecção faz um ângulo de 45º com o plano de projecção. Já a projecção cabinet, tem uma direcção de projecção fazendo um ângulo de arctan(2) = 63, 4º com o plano de projecção. Para estas projecções, considerando t o ângulo entre o eixo z e o eixo x (tipicamente 30º ou 45º), teremos como parâmetros das matrizes Mcav (cavaleira) e Mcab (cabinet) os valores mostrados na figura 4. 5. 11. Substituindo estes valores na matriz de projecção geral, obtemos a seguinte matriz resultantes das projecções cavaleira e cabinet para t = 45º. :

Modelo de câmara sintética A Open. GL utiliza uma analogia comparando a visualização 3

Modelo de câmara sintética A Open. GL utiliza uma analogia comparando a visualização 3 D com tirar fotografias com uma câmara. volume visível câmara tripé modelo

Modelo de câmara sintética Interpretação do modelo da câmara Duas interpretações possíveis: Levam a

Modelo de câmara sintética Interpretação do modelo da câmara Duas interpretações possíveis: Levam a câmara até a cena que se quer visualizar; Levam os objectos da cena até uma câmara estacionária; up y Em Open. GL a câmara pode ser posicionada com a função: glu. Look. At(eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz); eye = ponto onde a câmara será posicionada aim = ponto para onde a câmara será apontada up = vector que dá a direcção “para cima” da câmara aim eye x z

Modelo de câmara sintética Interpretação do modelo da câmara Modelação: Mover /deformar os objectos

Modelo de câmara sintética Interpretação do modelo da câmara Modelação: Mover /deformar os objectos up y Visualização: Mover e orientar a câmara aim eye x Projecção: Ajuste da lente / objectiva da câmara Viewport: Aumentar ou reduzir a fotografia z