antónio ramires fernandes & luís paulo santos - computação gráfica 08/09 computação...
TRANSCRIPT
![Page 1: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/1.jpg)
António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09
Computação Gráfica
Pipeline Gráfico
![Page 2: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/2.jpg)
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 2
![Page 3: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/3.jpg)
Display Lists
DI-UM Computação Gráfica 08/09 3
Os comandos (geometria ou pixels) podem ser compilados numa display listEstes comandos são armazenados de forma eficiente e enviados para o pipeline sempre que a display list é executada.
![Page 4: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/4.jpg)
Evaluators
DI-UM Computação Gráfica 08/09 4
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.
![Page 5: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/5.jpg)
Operações por vértice
DI-UM Computação Gráfica 08/09 5
Transformações geométricas e projecção no espaço do êcran.Iluminação (cálculo da cor do vértice)Coordenadas de textura
![Page 6: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/6.jpg)
Montagem das primitivas
DI-UM Computação Gráfica 08/09 6
View Frustrum clipping.Back face culling, depth evaluation and perspective divisionOutput: Primitivas geométricas transformadas com info sobre cor e coordenadas de texturas para cada vértice
![Page 7: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/7.jpg)
Operações por pixel
DI-UM Computação Gráfica 08/09 7
Transformação de formatos, transformações aplicadas às texturasLeituras do frame buffer.
![Page 8: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/8.jpg)
Montagem de texturas
DI-UM Computação Gráfica 08/09 8
Texture objects.Muti-texturing.Essencialmente, optimizações ao armazenamento e acesso (read/write) a texturas
![Page 9: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/9.jpg)
Rasterização
DI-UM Computação Gráfica 08/09 9
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)
![Page 10: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/10.jpg)
Operações por fragmento
DI-UM Computação Gráfica 08/09 10
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.
![Page 11: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/11.jpg)
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
DI-UM Computação Gráfica 08/09 11
Iluminação RasterView Frustrum
&Back face culling
Texturização Alpha & ZTest
![Page 12: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/12.jpg)
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 12
![Page 13: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/13.jpg)
View Frustrum Culling
• Determinar a forma do frustrum
DI-UM Computação Gráfica 08/09 13
Definição do frustrumgluPerspective(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
![Page 14: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/14.jpg)
View Frustrum Culling
• Determinar os 6 planos que definem o frustrum:1. Determinar os 8 pontos que constituem os cantos do frustrum2. Extrair as 6 equações do plano
(Nota: as normais devem apontar para dentro do frustrum)
DI-UM Computação Gráfica 08/09 14
![Page 15: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/15.jpg)
View Frustrum Culling
DI-UM Computação Gráfica 08/09 15
fc = p + d * farDist nc = p + d * nearDist uHf2 = up * Hfar/2 uHn2 = up * Hnear/2 rHf2 = right * Wfar/2 rHn2 = right * Wnear/2ftl = 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)
![Page 16: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/16.jpg)
• 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
View Frustrum Culling
DI-UM Computação Gráfica 08/09 16
Distância positiva
Distância negativa
![Page 17: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/17.jpg)
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 17
![Page 18: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/18.jpg)
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 18
![Page 19: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/19.jpg)
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)
DI-UM Computação Gráfica 08/09 19
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
![Page 20: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/20.jpg)
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 20
![Page 21: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/21.jpg)
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 21
![Page 22: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/22.jpg)
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 22
![Page 23: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/23.jpg)
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 23
![Page 24: António Ramires Fernandes & Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Pipeline Gráfico](https://reader036.vdocuments.mx/reader036/viewer/2022062512/552fc11a497959413d8c9805/html5/thumbnails/24.jpg)
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