• Nenhum resultado encontrado

5 Sistema de Generalizac¸˜ ao 3D

Codigo 6 Algoritmo para classificac¸˜ao dos objetos

5.3.1 Operador de Simplificac¸˜ ao

O operador de simplificac¸˜ao compreende dois algoritmos, os quais s˜ao exe-

cutados de acordo com a preferˆencia do usu ´ario: o algoritmo de simplificac¸˜ao

de primitivas VRML e o algoritmo de simplificac¸˜ao de objetos constru´ıdos com

IndexedFaceSet, explicados a seguir.

5.3.1.1 Simplificac¸˜ao de Primitivas VRML

Este algoritmo faz a simplificac¸˜ao das primitivas VRML que comp˜oem os objetos da categoria (prim ´aria, secund ´aria ou indeterminada) selecionada pelo usu ´ario para a simplificac¸˜ao das primitivas. O algoritmo consiste na identi- ficac¸˜ao da primitiva para a gerac¸˜ao de um objeto semelhante (ou face) cons-

tru´ıdo com IndexedFaceSet. Uma primitiva VRML, por mais simples que

possa parecer, pode estar constru´ıda por muitas faces, tal como foi apresen- tado na sec¸˜ao 3.5.3. Este algoritmo constr ´oi um objeto de uma ´unica face, de forma que quando o usu ´ario estiver distante do objeto original, ele/ela ver ´a apenas a face simplificada. Vˆe-se, assim, que o uso deste algoritmo redunda

na reduc¸˜ao do custo computacional na renderizac¸˜ao dos objetos e, conseq ¨uen-

temente, do mundo virtual.

O objeto resultante da simplificac¸˜ao de cada primitiva ´e constru´ıdo levando em considerac¸˜ao a primitiva a ser simplificada e seus atributos; para a esfera ´e gerado o c´ırculo, para o cone um triˆangulo, para o cilindro um retˆangulo e para o cubo um retˆangulo. Esses objetos s˜ao resultantes da projec¸˜ao das primitivas sobre um plano perpendicular ao eixo z, como pode ser observado

construir representac¸˜oes planas simplificadas preservando as texturas e cores dos objetos originais.

A Tabela 5.9 mostra como ´e realizado o c ´alculo para a gerac¸˜ao da face

retangular obtida a partir dos valores presentes no campo size da primitiva

Box. A Tabela 5.10 mostra como ´e realizado o c ´alculo para a gerac¸˜ao da face

triangular obtida a partir dos valores presentes nos campos bottomRadius e

height da primitiva Cone. A Tabela 5.11 mostra como ´e realizado o c ´alculo

para a gerac¸˜ao da face retangular obtida a partir dos valores presentes nos

camposradius e heightda primitiva Cylinder. A Tabela 5.12 mostra como

´e realizado o c ´alculo para a gerac¸˜ao de uma face que se assemelhe ao m ´aximo

de um c´ırculo. Esta face ´e obtida a partir do valor presente no camporadius

da primitivaSphere. Um exemplo de c ´odigo gerado por este algoritmo ´e apre-

sentado no C ´odigo 7, p ´agina 75: a entrada ´e um paralelep´ıpedo de dimens˜oes (1, 4, 1) e a sa´ıda um quadril ´atero.

Tabela 5.9: C ´alculo da gerac¸˜ao dos pontos da face da primitiva Box

Campos Pontos Gerados

sizex y z −x/2 −y/2 0.0,

x/2 −y/2 0.0,

x/2 y/2 0.0,

−x/2 y/2 0.0,

−x/2 −y/2 0.0

Tabela 5.10: C ´alculo da gerac¸˜ao dos pontos da face da primitiva Cone

Campos Pontos Gerados

bottomRadius br −br −h/2 0.0,

heighth br −h/2 0.0,

0.0 h/2 0.0,

−br −h/2 0.0

5.3.1.2 Simplificac¸˜ao de objetos constru´ıdos com IndexedFaceSet

Os objetos constru´ıdos por IndexedFaceSet s˜ao definidos atrav´es de fa-

ces, como j ´a explicado anteriormente. Estas faces podem ser definidas ma- nualmente ou algum programa espec´ıfico pode construir estas faces automa- ticamente, de forma que o usu ´ario cria o objeto interativamente e o programa

radiusr −r −h/2 0.0,

heighth r −h/2 0.0,

r h/2 0.0,

−r h/2 0.0,

−r −h/2 0.0

Tabela 5.12: C ´alculo da gerac¸˜ao da face da primitiva Sphere

Campos Pontos Gerados

radiusr −r 0.0 0.0, −(r − 0.2) −r/2 0.0, −r/2 −(r − 0.2) 0.0, 0.0 −r 0.0, r/2 −(r − 0.2) 0.0, (r − 0.2) −r/2 0.0, r 0.0 0.0, (r − 0.2) r/2 0.0, r/2 (r − 0.2) 0.0, 0.0 r 0.0, −r/2 (r − 0.2) 0.0, −(r − 0.2) r/2 0.0, −r 0.0 0.0

gera as faces que definem este objeto. Estes programas, em geral, definem faces triangulares. Dependendo do objeto e do n´ıvel de precis˜ao desejado, mi- lhares de faces podem ser criadas. Quanto maior o n ´umero de faces, mais mem ´oria ´e consumida e mais tempo ´e gasto para renderizar o objeto.

O usu ´ario, estando distante do objeto definido por IndexedFaceSet, n˜ao

precisa visualiz ´a-lo com a m ´axima precis˜ao permitida, ou seja, com todos os triˆangulos que o definem, mas pode visualizar um objeto semelhante ao original com um n ´umero menor de faces.

V ´arios trabalhos tˆem sido publicados a respeito de simplificac¸˜ao de ma-

lhas triangulares (ou mechas triangulares)2. Entre estes trabalhos encontram-

se Vieira et al. (2003), Hoppe (1996) e Gu´eziec et al. (1999).

O algoritmo utilizado pelo sistema para a simplificac¸˜ao de objetos defini-

dos por IndexedFaceSet foi definido atrav´es de uma adaptac¸˜ao de um al-

goritmo de simplificac¸˜ao de linhas utilizado em Cartografia: o Algoritmo de

Lang (McMaster & Shea 1992). Este algoritmo requer duas tolerˆancias defi-

nidas pelo usu ´ario: a primeira ´e o n ´umero de pontos (ou v´ertices) a serem 2Malhas triangulares s˜ao o conjunto de triˆangulos que definem um objeto.

-0.5 -2.0 0.0, 0.5 -2.0 0.0, 0.5 2.0 0.0, -0.5 2.0 0.0, -0.5 -2.0 0.0 ] } coordIndex[0, 1, 2, 3, 4, -1]} } }

avaliados (n) e a segunda o valor da distˆancia (d). Para, por exemplo, n = 7,

um vetor conectando o ponto P1 e o ponto Pn+1 da polilinha ´e constru´ıdo, e

todas as distˆancias dos pontos intermedi ´arios ao vetor s˜ao calculadas. Se existirem pontos cujas distˆancias sejam maiores que d, um novo vetor ´e cons-

tru´ıdo, agora entre os pontos P1 e Pn. Este procedimento ´e executado at´e que

haja apenas dois pontos (neste caso um vetor ´e constru´ıdo por´em sem pon- tos intermedi ´arios) ou que todos os pontos intermedi ´arios possuam distˆancias maiores que d; se isto acontecer os pontos intermedi ´arios s˜ao descartados e os pontos finais (o primeiro e ´ultimo ponto que fazem parte do vetor s˜ao salvos). Para uma polilinha com n+1 pontos, o processo acabaria at´e que as condic¸˜oes fossem satisfeitas (haja apenas dois pontos ou que todas as distˆancias calcu- ladas sejam maiores que d); para uma polilinha com um n ´umero maior de

pontos, o processo continuaria agora entre os pontos Pn+1 e Pn+8.

Realizada a apresentac¸˜ao do Algoritmo de Lang, as adaptac¸˜oes feitas para

a simplificac¸˜aoIndexedFaceSets foram:

• Que o usu ´ario n˜ao precisa especificar o n ´umero de pontos a serem ava-

liados na construc¸˜ao do vetor (o sistema faz esta verificac¸˜ao automatica- mente);

• O usu ´ario deve especificar uma taxa de amostragem;

• O sistema verifica se as distˆancias dos pontos intermedi ´arios s˜ao meno-

res e n˜ao maiores que d.

pontos intermedi ´arios ao vetor, agora 3D, podem ser encontradas em livros de ´Algebra Linear que trate do espac¸o 3D, como Lima (2001). A distˆancia ´e calculada da seguinte forma: dado um ponto A(x, y, z) qualquer e um ponto P(a, b, c) pertencente `a reta, a equac¸˜ao da distˆancia de um ponto a uma reta ´e definida pela f ´ormula:

d = |v × PA|

|v| ,

sendo que

PA = A − P = (x − a, y − b, z − c) e v ´e o vetor definidos por dois pontos obtidos da polilinha.

Um parˆametro, optativo, que pode ser definido pelo usu ´ario ´e o n ´umero m´ınimo de faces que o objeto deve ter para que a simplificac¸˜ao ocorra, pois para objetos com poucas faces, por exemplo uma ou duas, simplificac¸˜oes n˜ao se fazem necess ´arias, pois o ganho obtido de tempo seria m´ınimo e o resul- tado visual muitas vezes inadequado. Valores padr˜oes s˜ao definidos para a amostragem, n ´umero m´ınimo de faces e distˆancia, estes valores s˜ao: 5, 7 e 5, respectivamente. Entretanto, vale ressaltar que estes valores s˜ao adimen- sionais e devem ser modificados para cada mundo, pois cada mundo possui dimens˜oes pr ´oprias e por isto os valores podem ser inadequados.

A Figura 5.37, p ´agina 88, apresenta um exemplo da aplicac¸˜ao deste al-

goritmo a um objeto constru´ıdo com IndexedFaceSet; a imagem `a esquerda

apresenta o objeto original e a imagem `a direita apresenta o objeto simplifi- cado.

Documentos relacionados