O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Constructive Solid Geometry

1.040 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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.

×