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.