A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Computação Gráfica Pipeline Gráfico."— Transcrição da apresentação:

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 texturas Leituras 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 Iluminação View Frustrum & Back face culling Raster Texturização Alpha & Z Test 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 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) * nearDist Wnear = Hnear * ratio Hfar = 2 * tan(fov / 2) * farDist Wfar = 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 view frustrum 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 int pointInFrustum(Vec3 &p) { int result = 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) DI-UM Computação Gráfica 08/09


Carregar ppt "Computação Gráfica Pipeline Gráfico."

Apresentações semelhantes


Anúncios Google