1 / 24

Computação Gráfica

Computação Gráfica. Pipeline Gráfico. Pipeline Gráfico. A ordem das operações no OpenGL pode ser vista como seguindo a ordem representada pelo pipeline abaixo:. Display Lists. Os comandos (geometria ou pixels) podem ser compilados numa display list

rhona
Download Presentation

Computação Gráfica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computação Gráfica Pipeline Gráfico

  2. Pipeline Gráfico • A ordem das operações no OpenGL pode ser vista como seguindo a ordem representada pelo pipeline abaixo: DI-UM Computação Gráfica 08/09

  3. Display Lists Os comandos (geometria ou pixels) podem ser compilados numa display list Estes comandos são armazenados de forma eficiente e enviados para o pipeline sempre que a display list é executada. DI-UM Computação Gráfica 08/09

  4. Evaluators Toda a geometria deve ser descrita usando vértices. Curvas e superfícies paramétricas, que são inicialmente descritas usando pontos de controlo e funções base, são convertidas em representações baseadas em vértices pelos evaluators. DI-UM Computação Gráfica 08/09

  5. Operações por vértice Transformações geométricas e projecção no espaço do êcran.Iluminação (cálculo da cor do vértice)Coordenadas de textura DI-UM Computação Gráfica 08/09

  6. Montagem das primitivas View Frustrum clipping.Back face culling, depth evaluation and perspective division Output: Primitivas geométricas transformadas com info sobre cor e coordenadas de texturas para cada vértice DI-UM Computação Gráfica 08/09

  7. Operações por pixel Transformação de formatos, transformações aplicadas às texturasLeituras do frame buffer. DI-UM Computação Gráfica 08/09

  8. Montagem de texturas Texture objects.Muti-texturing.Essencialmente, optimizações ao armazenamento e acesso (read/write) a texturas DI-UM Computação Gráfica 08/09

  9. Rasterização Conversão das primitivas geométricas em fragmentos.Cada fragmento corresponde a um pixel no frame buffer. Cálculo dos fragmentos correspondentes ao interior de um polígono.Cálculo cor, profundidade e coord. de textura por fragmento (interpolação) DI-UM Computação Gráfica 08/09

  10. Operações por fragmento Aplicação de um texel a cada fragmento. Cálculo de nevoeiro (fog).Alpha-test e depth-buffer test (remoção de superfícies ocludidas)Blending, dithering and masking. Escrita final no frame buffer. DI-UM Computação Gráfica 08/09

  11. Redundância • Todos os vértices são iluminados, antes de ser feito qualquer tipo de culling • Todas as primitivas que passam o teste de culling dão origem a fragmentos e todos os fragmentos recebem uma cor, coordenadas de textura e um texel antes do teste do Z-buffer Corolário: • São processados muitos vértices e fragmentos que acabarão por não ser visíveis Iluminação View Frustrum & Back face culling Raster Texturização Alpha & Z Test DI-UM Computação Gráfica 08/09

  12. View Frustrum Culling • Detectar, por software (i.e., no CPU), quais as primitivas geométricas que não são visíveis por não pertencerem ao campo de visão da câmara DI-UM Computação Gráfica 08/09

  13. View Frustrum Culling • Determinar a forma do frustrum Definição do frustrum gluPerspective(fov, ratio, nearDist, farDist); gluLookAt(px,py,pz, lx,ly,lz, ux,uy,uz) Hnear = 2 * tan(fov / 2) * nearDistWnear = Hnear * ratio Hfar = 2 * tan(fov / 2) * farDistWfar = Hfar * ratio DI-UM Computação Gráfica 08/09

  14. View Frustrum Culling • Determinar os 6 planos que definem o frustrum: • Determinar os 8 pontos que constituem os cantos do frustrum • Extrair as 6 equações do plano(Nota: as normais devem apontar para dentro do frustrum) DI-UM Computação Gráfica 08/09

  15. View Frustrum Culling fc = p + d * farDist nc = p + d * nearDist uHf2 = up * Hfar/2 uHn2 = up * Hnear/2 rHf2 = right * Wfar/2 rHn2 = right * Wnear/2 ftl = fc + (uHf2) - (rHf2) ntl = nc + (uHn2) - (rHn2) ftr = fc + (uHf2) + (rHf2) ntr = nc + (uHn2) + (rHn2) fbl = fc - (uHf2) - (rHf2) nbl = nc - (uHn2) - (rHn2) fbr = fc - (uHf2) + (rHf2) nbr = nc - (uHn2) + (rHn2) DI-UM Computação Gráfica 08/09

  16. View Frustrum Culling • Uma vez determinados os planos podemos testar se as primitivas geométricas estão dentro ou fora do frustrum • Utilizamos a distância com sinal para determinar de que lado do plano está um ponto: • Se a distância é positiva encontra-se do lado para o qual a normal aponta • Se é negativa então encontra-se do outro lado • No caso do viewfrustrum extraímos as equações dos 6 planos de forma a que a normal aponte para dentro do frustrum Distância negativa Distância positiva DI-UM Computação Gráfica 08/09

  17. View Frustrum Culling • Pontos: • Um ponto está dentro do frustrum se a sua distância for positiva a todos os 6 planos intpointInFrustum(Vec3 &p) { intresult = INSIDE; for(int i=0; i < 6; i++) { if (pl[i].distance(p) < 0) return OUTSIDE; } return(result); } DI-UM Computação Gráfica 08/09

  18. View Frustrum Culling • Objectos • Testar se TODOS os vértices de TODOS os polígonos que constituem um objecto estão fora do frustrum não é suficiente para garantir que o objecto está totalmente fora do frustrum • De qualquer forma, testar todos os vértices poderia levar mais tempo do que deixar ser o sistema gráfico a fazer o clipping DI-UM Computação Gráfica 08/09

  19. View Frustrum Culling • Objectos • Uma alternativa é calcular um volume elementar que contenha toda a geometria do objecto e testar se este volume está dentro do frustrum • Volumes elementares: esferas e Axis Aligned Boxes (AAB) Dependendo da forma do objecto o volume pode ser mais ou menos eficaz, isto é, ser considerado dentro do frustrum sem que nenhum triângulo aí contido esteja efectivamente dentro do frustrum DI-UM Computação Gráfica 08/09

  20. View Frustrum Culling • Esferas • A esfera está fora do frustrum se o seu centro está do lado errado de pelo menos um dos planos e o raio é menor que a distância do centro ao plano int sphereInFrustum(Vec3 &p, float radius) { float distance; int result = INSIDE; for(int i=0; i < 6; i++) { distance = pl[i].distance(p); if (distance < -radius) return OUTSIDE; } return(result); } DI-UM Computação Gráfica 08/09

  21. View Frustrum Culling • AAB • Uma AAB pode ter todos os vértices fora do frustrum e ainda assim pertencer ao frustrum DI-UM Computação Gráfica 08/09

  22. View Frustrum Culling • AAB • Solução: Rejeitar uma AAB apenas se todos os seus vértices estão do lado errado do mesmo plano! • Esta abordagem leva a aceitar algumas AAB que não pertencem ao frustrum DI-UM Computação Gráfica 08/09

  23. View Frustrum Culling • Hierarquia de Volumes • Para cenas complexas pode-se justificar utilizar hierarquias: se uma AAB de nível mais elevado não pertence ao frustrum, então não se justifica testar as interiores DI-UM Computação Gráfica 08/09

  24. Referências • OpenGL Reference Manual, OpenGL Architecture Review Board. • OpenGL Programming Guide (The Red Book) • www.lighthouse3d.com DI-UM Computação Gráfica 08/09

More Related