Pràctica d'MGC

Documentació tècnica


Funcionalitats

El sistema presentat te com a finalitat la generació d'un objcte amb aparença de planeta de forma fractal. Per a fer això es parteix d'unes primitives bàsiques i es sotmeten a una serie de tractaments que mica a mica li van donant forma.

A més de la generació de la superficie del planeta, també hem afegit la funcionalitat de afegir-li un mar a aquest planeta, afegir anells al seu voltant, posar-hi satel·lits... i tot això amb una interficie gràfica prou senzilla d'utilitzar.

Els resultats es poden exportar en diversos formats grafics. Els dos implementats son el VRML i el BDG, però no seria gens dificil estendre aquesta funcionalitat per afegir nous formats. De fet el sistema es molt facilment extensible, gracies a la filosofia que segueix per a implementar totes les seves funcionalitats.


Arquitectura de l'aplicació

L'aplicació està dividida en dos parts:

La interficie gràfica es la que s'encarrega de permetre la interacció amb l'usuari. Està formada per la finestra principal, una llista de filtres i una botonera. Mitjançant la botonera es manipulen els filtres, i quan es selecciona un filtre apareixen els seus paràmetres a la banda dreta de la finestra. Cadacun d'aquests filtres es correspon amb un paquet format per tres classes Java: el filtre en si, la classe que representa els parametres per aquest filtre i la classe grafica que permet introduïr aquests paràmetres.

Quan l'usuari decideix regenerar l'objecte representat, la interficie gràfica activa el motor de processament gràfic. Aquest motor s'encarrega d'anar aplicant els filtres seleccionats per l'usuari, l'un darrera l'altre, fins acabar amb la generació de l'objecte.

Per a fer això, el sistema recupera els filtres que l'usuari havia definit a la llista de filtres amb els seus paràmetres corresponents i els executa seqüencialment. Cada filtre és independent dels altres i es poden aplicar tots en qualsevol ordre, obtenint, això si, resultats diferents en funció de l'ordre usat.


Model de dades

El model de dades utilitzat en l'aplicació es bastant similar a l'utilitzat al laboratori, però mantenint únicament les relacions estrictament necessaries.

Tenim classes que representen un punt a l'espai, un vertex, una aresta, un triangle i un objecte:

Amb totes aquestes dades i relacions som capaços de fer els calculs que necessitem. En alguna d'aquestes classes hi podem trobat variables auxiliars que ens ajuden a fer alguns calculs, però que realment no formen part de la representació.


Procés de fractalització

El procés de fractalització és un bucle molt senzill:

  1. Si hi ha arestes més llargues del que desitja l'usuari les recuperem
  2. Per cadascuna d'aquestes arestes seleccionem un punt intermig i creem un nou vertex desplaçat una distancia aleatoria de la seva posicio inicial en sentit radial.
  3. Es parteix l'aresta en dos noves arestes i els triangles adjacents i s'en creen de nous per a formar un objecte vàlid.
  4. Tornem al primer punt

Quan el procés arriba a la fi, totes les arestes són més petites d'un determinat valor.

En el calcul de les noves arestes i triangles les textures s'interpolen per a que les transicions de color entre els diversos vertexs siguin suaus.