Constructive Solid Geometry

1.018 visualizações

Publicada em

Uma apresentação que demonstra brevemente alguns conceitos utilizados na técnica de modelagem por CSG.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.018
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
12
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Constructive Solid Geometry

  1. 1. Trabalho de Modelagem 2 Constructive Solid Geometrics Rafael Siqueira Telles Vieira mat 0232360
  2. 2. Objetivos Construir uma composição CSG a partir da técnica de modelagem SMC. Objetivos Implementação Primitivas <ul><li>Hexaedro
  3. 3. Cone
  4. 4. Cilindro
  5. 5. Esfera </li></ul>Operações <ul><li>União
  6. 6. Intersecção
  7. 7. Diferença </li></ul>Transformações <ul><li>Rotação
  8. 8. Translação
  9. 9. Zoom </li></ul>Ray Casting
  10. 10. Construção do Hexaedro Normal PI P1 P1 P3 P2 P5 P6 P7 P4 P1 P2 P3 P4 PI=ponto de Interseção Ponto dentro do Cubo, se somente se Xmin<=X<=Xmax Ymin<=Y<=Ymax Zmin<=Z<=Zmax FACE CUBO OU PRISMA RETANGULAR RETO
  11. 11. Construção do Cilindro *********************************** * (yi-yc)^2 + (zi-zc)^2 = r^2 * * altura x y=yi-yc * *********************************** Cilindro deitado sobre o eixo X ((*ponto).x>x_min) && ((*ponto).x<x_max)) Para determinar se Y é válido, verifico delta: y=((*ponto).y - (*(*cilindro).centro).y); raio=((*cilindro).raio*(*cilindro).raio); z=(*(*cilindro).centro).z; delta=4.0*z*z-4.0*(y*y+z*z-raio); if (delta<0) return NULL; A profundidade Z de interceção do raio é determinada pela fórmula de Báskara: p1=copia(ponto); (*p1).z=(2.0*z+sqrt(delta))/2.0; p2=copia(ponto); (*p2).z=(2.0*z-sqrt(delta))/2.0;
  12. 12. Construção do Cone *********************************** * (x-xc)^2 + (z-zc)^2 = r^2 * * altura y x=xi-xc * *********************************** Cone sobre o eixo Y ((*raio).y>=(*(*cone).centro).y) && ((*raio).y<=(*(*cone).centro).y+(*cone).altura)) Como o raio da base é variável segundo y, determino ele através da regra de 3: ymax=(*(*cone).centro).y+(*cone).altura; raio=((ymax-(*raio).y)*(*cone).raio)/(*cone).altura; Para determinar se X é válido, verifico delta: z=(*(*cone).centro).z; delta=4.0*z*z-4.0*(x*x+z*z-raio); if (delta<0) return NULL; A profundidade Z de interceção do raio é determinada pela fórmula de Báskara: p1=copia(ponto); (*p1).z=(2.0*z+sqrt(delta))/2.0; p2=copia(ponto); (*p2).z=(2.0*z-sqrt(delta))/2.0; raio alturaR ------------- = ------------- coneRaio alturaCone
  13. 13. Construção da Esfera ******************************************* * (xi-xc)^2 + (yi-yc)^2 + (zi-zc)^2 = r^2 * * x=xi-xc y=yi-yc * ******************************************* Para determinar se X e Y são válidos, o valor de delta: x=((*ponto).x - (*(*esfera).centro).x); y=((*ponto).y - (*(*esfera).centro).y); raio=((*esfera).raio*(*esfera).raio); z=(*(*esfera).centro).z; delta=(4.0*z*z)-4.0*(x*x+y*y+z*z-raio); if (delta<0) return NULL; A profundidade Z de interceção do raio é determinada pela fórmula de Báskara: p1=copia(ponto); (*p1).z=(2.0*z+sqrt(delta))/2.0; p2=copia(ponto); (*p2).z=(2.0*z-sqrt(delta))/2.0;
  14. 14. Translação e Zoom (Origem).x*=zoom; (Origem).y*=zoom; (Origem).z*=zoom; , isto é , P*(zoom,zoom,zoom) (Destino).x*=zoom; caso Origem > 0 e (Destino).y*=zoom; Destino < 0 (Destino).z*=zoom; caso mova X: (Origem).x+=move; (Destino).x+=move; Y: (Origem).y+=move; , isto é, P+(1,0,0)*d ou (Destino).y+=move; P+(0,1,0)*d ou P+(0,0,1)*d Z: (Origem).z+=move; (Destino).z+=move;
  15. 15. Rotação caso gire X: | 1 0 0 | pRaio * | 0 cosA senA | | 0 -senA cosA | Y: | cosA 0 -senA | pRaio * | 0 1 0 | | senA 0 cosA | Z: | cosA senA 0 | pRaio * | -senA cosA 0 | | 0 0 1 | <ul><li>Translada -P
  16. 16. Rotaciona Eixo
  17. 17. Translada +P </li></ul>
  18. 18. Ponto Pertence ao segmento PO=ponto origem do segmento PD=ponto destino do segmento P=ponto analisado Equação Paramétrica da Reta Px = POx + (PDx-POx)*d1 Py = POy + (PDy-POy)*d2 Pz = POz + (PDz-POz)*d3 d1==d2==d3 para P, caso, POx!=PDx && POy!=PDy && POz!=PDz d1==d2 para P, caso, POz==PDz==Pz && POy!=PDy && POz!=PDz d1 pode assumir qualquer valor se, POy==PDy==Py && POz==PDz==Pz
  19. 19. União de Segmentos se ((dO>=0.0) && (dO<=1.0)) conta++; se ((dD>=0.0) && (dD<=1.0)) conta++; /* dois pontos dentro */ se (conta==2) /* um ponto dentro e outro ponto fora */ se (conta==1) /* dois pontos fora */ se (conta==0) <ul><li>Verifico se o ponto Pertence ao Segmento
  20. 20. Determino dO=d1 ou d2 ou d3 p/Origem
  21. 21. Determino dD=d1 ou d2 ou d3 p/Destino </li></ul>P1 P2 P3 P3 P4 P4
  22. 22. Intersecção de Segmentos se ((dO>=0.0) && (dO<=1.0)) conta++; se ((dD>=0.0) && (dD<=1.0)) conta++; /* dois pontos dentro */ se (conta==2) /* um ponto dentro e outro ponto fora */ se (conta==1) /* dois pontos fora */ se (conta==0) <ul><li>Verifico se o ponto Pertence ao Segmento
  23. 23. Determino dO=d1 ou d2 ou d3 p/Origem
  24. 24. Determino dD=d1 ou d2 ou d3 p/Destino </li></ul>P1 P2 P4 P2 P3 P3
  25. 25. Diferença de Segmentos se ((dO>=0.0) && (dO<=1.0)) conta++; se ((dD>=0.0) && (dD<=1.0)) conta++; /* dois pontos dentro */ se (conta==2) /* um ponto dentro e outro ponto fora */ se (conta==1) /* dois pontos fora */ se (conta==0) <ul><li>Verifico se o ponto Pertence ao Segmento
  26. 26. Determino dO=d1 ou d2 ou d3 p/Origem
  27. 27. Determino dD=d1 ou d2 ou d3 p/Destino </li></ul>P3 P3 P2 P4 P1 P1
  28. 28. Ray Casting grau=((*P).z-(*(*S).pd).z)/((*(*S).pd).z-(*(*S).po).z); if (grau<0.0) grau=0.0; if (grau>1.0) grau=1.0; r=(*c).r * grau; g=(*c).g * grau; b=(*c).b * grau; glColor3f(r,g,b); glVertex3f((*P).x,(*P).y,(*P).z); <ul><li>Uso da profundidade da Figura, Z </li></ul><ul><li>Iluminação Local usando proporção entre o ponto de encontro </li></ul>com a figura e o tamanho do segmento de Luz analisado. <ul><li>Equação Paramétrica da Reta: </li></ul>PontoIntersecao = Pobservador + Raio*grau <ul><li>Grau determina a Internsidade da cor vista </li></ul>
  29. 29. Conclusão <ul><li>O uso de SMC para construção de Figuras em CSG </li></ul>simplifica o processo de construção de Sólidos e as operações entre eles. <ul><li>O processo é complexo para superficies </li></ul>não planas ou primitivas curvas que não podem ser expressos por um equação facilmente. <ul><li>Embora as operações sejam simples o tamanho de </li></ul>nossa árvore CSG é proporcional ao custo do processo de construção do modelo.

×