27.01.2015 Views

Sistema de Modelado Tridimensional basado en Trazos Libres ...

Sistema de Modelado Tridimensional basado en Trazos Libres ...

Sistema de Modelado Tridimensional basado en Trazos Libres ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

UNIVERSIDAD DE CASTILLA-LA MANCHA<br />

ESCUELA SUPERIOR DE INFORMÁTICA<br />

Departam<strong>en</strong>to <strong>de</strong> Informática<br />

PROYECTO FIN DE CARRERA<br />

<strong>Sistema</strong> <strong>de</strong> Mo<strong>de</strong>lado <strong>Tridim<strong>en</strong>sional</strong> <strong>basado</strong> <strong>en</strong><br />

<strong>Trazos</strong> <strong>Libres</strong>: MOSKIS 3D<br />

Autor: Inmaculada Gijón Cardos<br />

Director: Carlos González Morcillo<br />

Julio, 2006.


TRIBUNAL:<br />

Presi<strong>de</strong>nte:<br />

Vocal:<br />

Secretario:<br />

FECHA DE DEFENSA:<br />

CALIFICACIÓN:<br />

PRESIDENTE VOCAL SECRETARIO<br />

Fdo.: Fdo.: Fdo.:


© Inmaculada Gijón Cardos. Se permite la copia, distribución y/o modificación <strong>de</strong> este docum<strong>en</strong>to<br />

bajo los términos <strong>de</strong> la lic<strong>en</strong>cia <strong>de</strong> docum<strong>en</strong>tación libre GNU, versión 1.1 o cualquier versión posterior<br />

publicada por la Free Software Foundation, sin secciones invariantes. Pue<strong>de</strong> consultar esta lic<strong>en</strong>cia <strong>en</strong><br />

http://www.gnu.org.<br />

Este docum<strong>en</strong>to fue compuesto con LATEX. Imág<strong>en</strong>es g<strong>en</strong>eradas con Op<strong>en</strong>Office.


Resum<strong>en</strong><br />

El proceso <strong>de</strong> síntesis 3D ha cobrado gran importancia <strong>en</strong> los últimos años. Su difusión<br />

ha sido muy amplia <strong>en</strong> distintos campos, como simulación <strong>de</strong> prototipos para su posterior<br />

construcción, proyectos artísticos y/o comerciales como producciones publicitarias y <strong>en</strong> áreas<br />

<strong>de</strong> <strong>en</strong>tret<strong>en</strong>imi<strong>en</strong>to como cine y vi<strong>de</strong>ojuegos.<br />

Una fase <strong>de</strong>terminante <strong>en</strong> este proceso es la fase <strong>de</strong> mo<strong>de</strong>lado, la cual es muy costosa,<br />

compleja y requiere un gran número <strong>de</strong> recursos.<br />

Con MOSKIS 3D se pret<strong>en</strong><strong>de</strong> reducir la complejidad <strong>de</strong> la fase <strong>de</strong> mo<strong>de</strong>lado, consigui<strong>en</strong>do<br />

rápidam<strong>en</strong>te un prototipado inicial, <strong>de</strong> forma que se obti<strong>en</strong>e un mo<strong>de</strong>lo 3D básico a partir<br />

<strong>de</strong> un trazo 2D que indica el contorno <strong>de</strong> la figura que se <strong>de</strong>sea obt<strong>en</strong>er.<br />

II


Este proyecto está <strong>de</strong>dicado a<br />

mi familia, por hacerlo posible<br />

gracias a su constante apoyo<br />

y confianza.<br />

Agra<strong>de</strong>cimi<strong>en</strong>tos<br />

A Carlos González Morcillo, por su gran i<strong>de</strong>a y su contínuo apoyo.<br />

A Daniel y a mi hermana, María, por la revisión <strong>de</strong> este docum<strong>en</strong>to.<br />

III


Índice g<strong>en</strong>eral<br />

Índice <strong>de</strong> figuras<br />

Índice <strong>de</strong> cuadros<br />

VI<br />

IX<br />

1. Introducción 1<br />

1.1. Enfoque. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.2. Estructura <strong>de</strong>l trabajo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2. Objetivos <strong>de</strong>l proyecto. 8<br />

3. Antece<strong>de</strong>ntes, estado <strong>de</strong> la cuestión 11<br />

3.1. Mo<strong>de</strong>lado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

3.1.1. Definición. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

3.1.2. Evolución histórica. . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

3.1.3. Taxonomía <strong>de</strong> métodos. . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

3.1.4. Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.1.5. Mo<strong>de</strong>lado <strong>basado</strong> <strong>en</strong> trazos. . . . . . . . . . . . . . . . . . . . . . . 22<br />

3.2. Técnicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.2.1. Estructuras <strong>de</strong> datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.2.2. Transformaciones lineales <strong>en</strong> 3D. . . . . . . . . . . . . . . . . . . . 34<br />

3.2.3. Tecnologías. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

4. Método <strong>de</strong> trabajo 54<br />

4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario. . . . . . . . . . . . . . . . . . . . . . . 54<br />

4.1.1. Diseño. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />

4.1.2. Construcción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. . . . . . . . . . . . . . . . . . 59<br />

4.2.1. Obt<strong>en</strong>ción <strong>de</strong>l polígono. . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

4.2.2. G<strong>en</strong>eración <strong>de</strong>l plano. . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

4.2.3. Cálculo <strong>de</strong>l perfil <strong>de</strong> alturas. . . . . . . . . . . . . . . . . . . . . . . 72<br />

4.2.4. Creación <strong>de</strong>l objeto final. . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

5. Resultados 102<br />

IV


ÍNDICE GENERAL<br />

V<br />

6. Conclusiones y propuestas futuras. 112<br />

6.1. Conclusiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112<br />

6.2. Propuestas futuras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />

6.2.1. Optimización <strong>de</strong>l tiempo <strong>de</strong> g<strong>en</strong>eración. . . . . . . . . . . . . . . . . 114<br />

6.2.2. Operación <strong>de</strong> extrusión. . . . . . . . . . . . . . . . . . . . . . . . . 115<br />

6.2.3. Carga y almac<strong>en</strong>ami<strong>en</strong>to. . . . . . . . . . . . . . . . . . . . . . . . . 119<br />

Bibliografía 120<br />

A. Instalación <strong>de</strong> la aplicación. 122<br />

B. Manual <strong>de</strong> usuario. 124<br />

C. Diagramas <strong>de</strong> clases. 129<br />

D. Diagramas <strong>de</strong> casos <strong>de</strong> uso. 131<br />

E. Diagramas <strong>de</strong> compon<strong>en</strong>tes. 133<br />

F. CD adjunto. 135


Índice <strong>de</strong> figuras<br />

1.1. Mo<strong>de</strong>lo <strong>en</strong> escayola. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.2. Mo<strong>de</strong>lo <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r obt<strong>en</strong>ido a partir <strong>de</strong> un escáner 3D. . . . . . . . . . . . . 4<br />

1.3. Recursos para cada fase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

3.1. Mo<strong>de</strong>lado <strong>en</strong> Teddy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.2. Polígono inicial y g<strong>en</strong>eración <strong>de</strong>l plano. . . . . . . . . . . . . . . . . . . . . 26<br />

3.3. Algoritmo <strong>de</strong> poda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

3.4. Finaliza el algoritmo <strong>de</strong> poda. Vértices fuera <strong>de</strong>l semicírculo. . . . . . . . . . 28<br />

3.5. Finaliza el algoritmo <strong>de</strong> poda. Encontrado triángulo J. . . . . . . . . . . . . . 28<br />

3.6. Malla triangulada 2D completa. . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.7. Elevación <strong>de</strong> la espina dorsal. . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.8. Ejemplo <strong>de</strong> estructura winged-edge. . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.9. Mo<strong>de</strong>lo conceptual <strong>de</strong> Op<strong>en</strong>GL. . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

3.10. Pipeline gráfico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

3.11. Proyección ortográfica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

3.12. Proyección perspectiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

3.13. Situación <strong>de</strong> la cámara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

4.1. Interfaz <strong>de</strong> MOSKIS 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

4.2. Contorno creado por el usuario. . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

4.3. Creación <strong>de</strong>l polígono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

4.4. Polígonos con niveles <strong>de</strong> <strong>de</strong>talle 9 y 10. . . . . . . . . . . . . . . . . . . . . 61<br />

4.5. Polígono añadido a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r. . . . . . . . . . . . . . . . . . 62<br />

4.6. Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l polígono. . . . . . . . . . . . . 63<br />

4.7. Subtriángulos formados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66<br />

4.8. División <strong>de</strong>l polígono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

4.9. Creación <strong>de</strong>l triángulo y reducción <strong>de</strong>l polígono. . . . . . . . . . . . . . . . . 68<br />

4.10. Triangulación básica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />

4.11. Evaluación <strong>de</strong> arista y flip <strong>de</strong> arista ilegal. . . . . . . . . . . . . . . . . . . . 69<br />

4.12. Optimización por Delaunay. . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.13. Plano añadido a la v<strong>en</strong>tana 3D. . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

4.14. Plano añadido a la v<strong>en</strong>tana 3D y extruido posteriorm<strong>en</strong>te. . . . . . . . . . . . 71<br />

4.15. Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l plano. . . . . . . . . . . . . . . 72<br />

4.16. C<strong>en</strong>tro <strong>de</strong> un triángulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

4.17. Detección <strong>de</strong> la espina. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

VI


ÍNDICE DE FIGURAS<br />

VII<br />

4.18. Detección y elevación <strong>de</strong> la espina dorsal <strong>en</strong> la triangulación Básica y Delaunay. 76<br />

4.19. Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong> la espina. . . . . . . . . . . . . . 76<br />

4.20. Ejemplo <strong>de</strong> lo que almac<strong>en</strong>a un objeto mSpine. . . . . . . . . . . . . . . . . 77<br />

4.21. Metabolas <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

4.22. Cuatro casos para hallar la rotación <strong>de</strong> la metaelipse. . . . . . . . . . . . . . 81<br />

4.23. dim<strong>en</strong>siones y rotación <strong>de</strong> las metaelipses. . . . . . . . . . . . . . . . . . . . 82<br />

4.24. Resultado 1 <strong>de</strong> la primera aproximación. . . . . . . . . . . . . . . . . . . . . 82<br />

4.25. Resultado 2 <strong>de</strong> la primera aproximación. . . . . . . . . . . . . . . . . . . . . 83<br />

4.26. Situación <strong>de</strong> metaelipses a lo largo <strong>de</strong> una arista. . . . . . . . . . . . . . . . 85<br />

4.27. G<strong>en</strong>eración <strong>de</strong> aristas imaginarias. . . . . . . . . . . . . . . . . . . . . . . . 86<br />

4.28. Cálculo <strong>de</strong>l punto <strong>de</strong> conexión <strong>de</strong> aristas imaginarias. . . . . . . . . . . . . . 86<br />

4.29. Resultado 1 <strong>de</strong> MOSKIS 3D cubri<strong>en</strong>do la superficie, sin dim<strong>en</strong>sión <strong>en</strong> Z. . . . 87<br />

4.30. Resultado 2 <strong>de</strong> MOSKIS 3D cubri<strong>en</strong>do la superficie, sin dim<strong>en</strong>sión <strong>en</strong> Z. . . . 87<br />

4.31. Valores <strong>de</strong> la coor<strong>de</strong>nada Z para cada metaelipse. . . . . . . . . . . . . . . . 88<br />

4.32. Hundimi<strong>en</strong>tos <strong>en</strong> triángulos <strong>de</strong> tipo J. . . . . . . . . . . . . . . . . . . . . . 88<br />

4.33. Ejemplo <strong>de</strong> hundimi<strong>en</strong>to <strong>en</strong> un triángulo <strong>de</strong> tipo J. . . . . . . . . . . . . . . . 89<br />

4.34. Ejemplo <strong>de</strong> la solución al hundimi<strong>en</strong>to <strong>en</strong> un triángulo <strong>de</strong> tipo J. . . . . . . . 89<br />

4.35. Resultado 1 <strong>de</strong> la versión con increm<strong>en</strong>to lineal. . . . . . . . . . . . . . . . . 90<br />

4.36. Resultado 2 <strong>de</strong> la versión con increm<strong>en</strong>to lineal. . . . . . . . . . . . . . . . . 90<br />

4.37. Valores <strong>de</strong> la coor<strong>de</strong>nada Z para cada metaelipse. . . . . . . . . . . . . . . . 91<br />

4.38. Mediatrices <strong>de</strong> dos segm<strong>en</strong>tos <strong>de</strong> un triángulo. . . . . . . . . . . . . . . . . . 93<br />

4.39. Resultado 1 <strong>de</strong> la versión con increm<strong>en</strong>to circular. . . . . . . . . . . . . . . . 93<br />

4.40. Resultado 2 <strong>de</strong> la versión con increm<strong>en</strong>to circular. . . . . . . . . . . . . . . . 94<br />

4.41. Resultado 3 <strong>de</strong> la versión con increm<strong>en</strong>to circular. . . . . . . . . . . . . . . . 94<br />

4.42. Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l objeto. . . . . . . . . . . . . . . 101<br />

5.1. Planos 1 g<strong>en</strong>erados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102<br />

5.2. Planos 2 g<strong>en</strong>erados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />

5.3. Notas musicales. Resultado obt<strong>en</strong>ido. . . . . . . . . . . . . . . . . . . . . . 104<br />

5.4. Trazo realizado para las cerezas. . . . . . . . . . . . . . . . . . . . . . . . . 104<br />

5.5. Trazo realizado para el tronco. . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

5.6. Resultado final: Cerezas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />

5.7. Trazo realizado para la g<strong>en</strong>eración <strong>de</strong>l pato. . . . . . . . . . . . . . . . . . . 106<br />

5.8. Malla g<strong>en</strong>erada: Pato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />

5.9. Resultado final: Pato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

5.10. Trazo realizado para la g<strong>en</strong>eración <strong>de</strong> la cara. . . . . . . . . . . . . . . . . . 107<br />

5.11. Malla g<strong>en</strong>erada: Cara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

5.12. Resultado final: Cara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

5.13. Trazo realizado para la g<strong>en</strong>eración <strong>de</strong>l pájaro. . . . . . . . . . . . . . . . . . 108<br />

5.14. G<strong>en</strong>eración <strong>de</strong> la triangulación para el pájaro. . . . . . . . . . . . . . . . . . 109<br />

5.15. Malla g<strong>en</strong>erada: Pajarracos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

5.16. Textura a aplicar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

5.17. Mapeado UV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110<br />

5.18. Resultado final: Pajarracos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 111


ÍNDICE DE FIGURAS<br />

VIII<br />

6.1. Creación <strong>de</strong>l quijote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />

6.2. Esqueletos internos <strong>en</strong> el Quijote. . . . . . . . . . . . . . . . . . . . . . . . 113<br />

6.3. Resultado <strong>de</strong>l Quijote. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />

6.4. Selección <strong>de</strong>l trazo base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

6.5. Selección <strong>de</strong>l trazo <strong>de</strong> extrusión. . . . . . . . . . . . . . . . . . . . . . . . . 117<br />

6.6. Triangulación y espina <strong>de</strong>l trazo base. . . . . . . . . . . . . . . . . . . . . . 118<br />

6.7. Proyecciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

A.1. Selección <strong>de</strong>l tipo <strong>de</strong> v<strong>en</strong>tana. . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

A.2. Abrir archivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />

B.1. G<strong>en</strong>eración automática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

B.2. Opciones Polígono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />

B.3. Opciones Polígono. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />

B.4. Opciones Plano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />

B.5. Opciones Objeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128<br />

C.1. Diagrama <strong>de</strong> clases <strong>de</strong> objetos. . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

C.2. Diagrama <strong>de</strong> utilida<strong>de</strong>s. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

C.3. Otras clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />

D.1. Ejecución vista <strong>de</strong>tallada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />

D.2. Ejecución vista automática. . . . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />

E.1. Diagrama 1 <strong>de</strong> compon<strong>en</strong>tes. . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />

E.2. Diagrama 2 <strong>de</strong> compon<strong>en</strong>tes. . . . . . . . . . . . . . . . . . . . . . . . . . . 134


Índice <strong>de</strong> cuadros<br />

3.1. V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes <strong>de</strong> CSG con respecto a B-Rep . . . . . . . . . . . 15<br />

3.2. V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes <strong>de</strong> B-Rep con respecto a CSG . . . . . . . . . . . 16<br />

3.3. Estructura <strong>de</strong> polígonos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.4. Estructura <strong>de</strong> vértices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.5. Estructura <strong>de</strong> aristas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.6. Estructura <strong>de</strong> winged-edge. . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

5.1. Tabla <strong>de</strong> resultados: Notas musicales. . . . . . . . . . . . . . . . . . . . . . 103<br />

5.2. Tabla <strong>de</strong> resultados: Cerezas. . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

5.3. Tabla <strong>de</strong> resultados: Pato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105<br />

5.4. Tabla <strong>de</strong> resultados: Cara. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

5.5. Tabla <strong>de</strong> resultados: Pajarracos. . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

IX


Capítulo 1<br />

Introducción<br />

1.1. Enfoque.<br />

1.2. Estructura <strong>de</strong>l trabajo.<br />

El proceso <strong>de</strong> síntesis 3D es aquel por el cual se obti<strong>en</strong>e una imag<strong>en</strong> 2D (raster) que<br />

repres<strong>en</strong>ta la <strong>de</strong>scripción <strong>de</strong> una esc<strong>en</strong>a tridim<strong>en</strong>sional.<br />

El proceso <strong>de</strong> síntesis 3D se pue<strong>de</strong> dividir <strong>en</strong> tres fases: [GM05a] [Ram05b]<br />

Pre-producción. En esta etapa se establecerán los pasos previos para po<strong>de</strong>r <strong>de</strong>sarrollar<br />

la esc<strong>en</strong>a.<br />

• Escritura <strong>de</strong>l guión.<br />

Se proce<strong>de</strong>rá a la escritura <strong>de</strong>l guión sobre el cual se trabajará. Esta fase se <strong>de</strong>sarrollará<br />

normalm<strong>en</strong>te al principio <strong>en</strong> proyectos pequeños y, <strong>en</strong> proyectos gran<strong>de</strong>s,<br />

se trabajará <strong>en</strong> ello también durante el proyecto, t<strong>en</strong>i<strong>en</strong>do <strong>en</strong> cu<strong>en</strong>ta las limitaciones<br />

técnicas que puedan surgir.<br />

• Desarrollo visual.<br />

En esta fase se establecerá el estilo <strong>de</strong> la esc<strong>en</strong>a, la atmósfera, que v<strong>en</strong>drá <strong>de</strong>terminada<br />

por la luz, y se seleccionará también la paleta <strong>de</strong> colores básica sobre la<br />

que se trabajará.<br />

• Diseño <strong>de</strong> personajes.<br />

1


2<br />

El diseño <strong>de</strong> personajes normalm<strong>en</strong>te se realizará mediante bocetos, aunque <strong>en</strong><br />

gran<strong>de</strong>s producciones se utilizan también, <strong>en</strong> la etapa <strong>de</strong> preproducción, esculturas<br />

o mo<strong>de</strong>los 3D básicos.<br />

El diseño se realizará ajustándose al papel que <strong>de</strong>sempeñan los personajes <strong>en</strong> el<br />

guión, dándo mayor <strong>de</strong>talle <strong>en</strong> los papeles principales y m<strong>en</strong>or <strong>de</strong>talle <strong>en</strong> los secundarios.<br />

De este diseño se obti<strong>en</strong><strong>en</strong> hojas <strong>de</strong> personajes con toda la información.<br />

• Storyboard.<br />

El storyboard suele ser <strong>de</strong> gran ayuda, porque muestra mediante una serie <strong>de</strong><br />

viñetas la secu<strong>en</strong>cia <strong>de</strong>l guión y proporciona una disposición visual <strong>de</strong> los acontecimi<strong>en</strong>tos<br />

tal y como <strong>de</strong>b<strong>en</strong> ser vistos por el objetivo <strong>de</strong> la cámara.<br />

El storyboard pue<strong>de</strong> ser tan ext<strong>en</strong>so que complem<strong>en</strong>ta y <strong>en</strong> algunas ocasiones<br />

sustituye al anteriorm<strong>en</strong>te citado guión.<br />

Producción.<br />

• Mo<strong>de</strong>lado.<br />

En esta fase se llevará a cabo la construcción tridim<strong>en</strong>sional <strong>de</strong> objetos y personajes.<br />

En la fase <strong>de</strong> mo<strong>de</strong>lado se obti<strong>en</strong>e la geometría <strong>de</strong>l objeto o personaje a mo<strong>de</strong>lar,<br />

es <strong>de</strong>cir, la malla 3D. Esta fase es muy costosa y compleja, sobre todo <strong>en</strong> tiempo.<br />

Dep<strong>en</strong>di<strong>en</strong>do <strong>de</strong> los recursos y <strong>de</strong>l proyecto, se pue<strong>de</strong>n emplear difer<strong>en</strong>tes técnicas,<br />

como escáneres 3D, que obti<strong>en</strong><strong>en</strong> mallas tridim<strong>en</strong>sionales muy <strong>de</strong>nsas (véase<br />

figura 1.1 y 1.2), para proyectos <strong>de</strong> alto presupuesto, cuyos resultados pue<strong>de</strong>n ser<br />

completados posteriorm<strong>en</strong>te mediante técnicas tradicionales <strong>de</strong> mo<strong>de</strong>lado.<br />

Como se pue<strong>de</strong> observar <strong>en</strong> la figura 1.2, la malla 3D obt<strong>en</strong>ida es muy <strong>de</strong>nsa. En<br />

este caso el mo<strong>de</strong>lo consta <strong>de</strong> 291307 vértices y 580237 caras.<br />

MOSKIS 3D se <strong>de</strong>sarrolla con el objetivo <strong>de</strong> facilitar <strong>en</strong> gran medida esta fase,<br />

obt<strong>en</strong>i<strong>en</strong>do rápidam<strong>en</strong>te mo<strong>de</strong>los iniciales, que posteriorm<strong>en</strong>te <strong>de</strong>berán ser <strong>de</strong>tallados.


3<br />

Figura 1.1: Mo<strong>de</strong>lo <strong>en</strong> escayola.<br />

• Texturizado.<br />

En la fase <strong>de</strong> texturizado, se establec<strong>en</strong> materiales y texturas, para los objetos y<br />

personajes, que van a <strong>de</strong>finir la ”piel”<strong>de</strong> la malla 3D. Se pue<strong>de</strong>n utilizar imág<strong>en</strong>es<br />

como textura, o también procedurales, que a difer<strong>en</strong>cia <strong>de</strong> las imág<strong>en</strong>es, <strong>en</strong> vez <strong>de</strong><br />

almac<strong>en</strong>ar mapas <strong>de</strong> bits, lo que almac<strong>en</strong>an es el algoritmo o procedimi<strong>en</strong>to que<br />

las g<strong>en</strong>era.<br />

• Iluminación.<br />

En esta fase se proce<strong>de</strong> a <strong>de</strong>cidir cuántos puntos <strong>de</strong> luz van a ser necesarios, sus<br />

características y su situación para cada una <strong>de</strong> las esc<strong>en</strong>as. Es el resultado directo<br />

<strong>de</strong> la fase <strong>de</strong> <strong>de</strong>sarrollo visual.<br />

• Esqueletos y animación.<br />

La animación procedural es la que se <strong>de</strong>fine <strong>de</strong> forma algorítmica, como efectos<br />

especiales <strong>de</strong> explosiones, humo, pelo, o bi<strong>en</strong>, simulaciones <strong>de</strong> leyes físicas como<br />

sistemas <strong>de</strong> partículas.<br />

Para animación <strong>de</strong> personajes se suel<strong>en</strong> utilizar esqueletos para controlar el movimi<strong>en</strong>to<br />

<strong>de</strong> la malla, y ca<strong>de</strong>nas <strong>de</strong> cinemática inversa (IK Chains). Para las articulaciones<br />

se utilizan restricciones para disminuir los grados <strong>de</strong> libertad y conseguir


4<br />

Figura 1.2: Mo<strong>de</strong>lo <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r obt<strong>en</strong>ido a partir <strong>de</strong> un escáner 3D.<br />

movimi<strong>en</strong>tos coordinados.<br />

Cabe <strong>de</strong>stacar también como técnica <strong>de</strong> animación, la captura <strong>de</strong> movimi<strong>en</strong>to,<br />

muy utilizada tanto <strong>en</strong> cine como <strong>en</strong> juegos. De forma g<strong>en</strong>eral, se registra la<br />

posición <strong>de</strong> unas marcas y se g<strong>en</strong>era la posición <strong>de</strong> los elem<strong>en</strong>tos <strong>de</strong>l esqueleto<br />

asociado.<br />

• R<strong>en</strong><strong>de</strong>r.<br />

Es el proceso por el cual se calcula la imag<strong>en</strong> 2D asociada a una esc<strong>en</strong>a 3D.<br />

Para pruebas sucesivas, se suel<strong>en</strong> realizar r<strong>en</strong><strong>de</strong>rizados <strong>de</strong> baja calidad y resolución<br />

para reducir el tiempo <strong>de</strong> cálculo. Se suel<strong>en</strong> emplear capas, para dividir la<br />

g<strong>en</strong>eración y obt<strong>en</strong>er partes <strong>de</strong> la esc<strong>en</strong>a por separado, para disminuir el coste<br />

computacional.<br />

Se aum<strong>en</strong>ta la calidad <strong>en</strong> r<strong>en</strong><strong>de</strong>rizados finales ya que el tiempo empleado será más<br />

elevado.<br />

Post-producción.<br />

• Retoque y efectos.<br />

En esta fase se corrig<strong>en</strong> los errores <strong>de</strong> la etapa <strong>de</strong> r<strong>en</strong><strong>de</strong>r y se incorporan efectos<br />

m<strong>en</strong>os costosos <strong>de</strong> incorporar que <strong>en</strong> fases anteriores.


1.1. Enfoque. 5<br />

• Composición.<br />

En esta fase se un<strong>en</strong> las difer<strong>en</strong>tes capas g<strong>en</strong>eradas <strong>en</strong> la fase <strong>de</strong> r<strong>en</strong><strong>de</strong>r, mediante<br />

el uso <strong>de</strong> transpar<strong>en</strong>cias, etc.<br />

• Montaje.<br />

Esta fase se realiza mediante editores externos y se aplican efectos <strong>de</strong> postproducción<br />

para el formato <strong>de</strong> distribución <strong>de</strong> salida.<br />

1.1. Enfoque.<br />

La fase <strong>de</strong> mo<strong>de</strong>lado es una fase muy costosa, sobre todo <strong>en</strong> tiempo.<br />

En gran<strong>de</strong>s producciones, una parte importante <strong>de</strong> los recursos utilizados, son <strong>de</strong>stinados<br />

a la realización <strong>de</strong> esta fase, como queda <strong>de</strong>mostrado <strong>en</strong> los estudios <strong>de</strong> Isaac Victor Kerlow.<br />

[Ker00]<br />

Un ejemplo se pue<strong>de</strong> ver <strong>en</strong> la película Bichos (Disney-Pixar) (véase figura 1.3).<br />

Figura 1.3: Recursos para cada fase.<br />

Se pue<strong>de</strong> comprobar la importancia <strong>de</strong> esta fase <strong>en</strong> la película, ya que este proceso ocupa<br />

un alto porc<strong>en</strong>taje con respecto a todo el proyecto. Un total <strong>de</strong> 447 personas trabajaron durante<br />

dos años para llevar a cabo el rodaje <strong>de</strong> la película. El 8 % <strong>de</strong>l personal trabajó <strong>en</strong> la fase <strong>de</strong><br />

mo<strong>de</strong>lado, lo que supone alre<strong>de</strong>dor <strong>de</strong> 36 personas, que trabajando a jornada completa durante<br />

dos años que duró el rodaje, supone una duración aproximada <strong>de</strong> 3800 horas <strong>de</strong>dicadas a la<br />

tarea <strong>de</strong> mo<strong>de</strong>lado. [Ker00]


1.2. Estructura <strong>de</strong>l trabajo. 6<br />

Estos datos justifican la investigación y construcción <strong>de</strong> herrami<strong>en</strong>tas y métodos para<br />

facilitar esta tarea.<br />

MOSKIS 3D ti<strong>en</strong>e como objetivo facilitar y reducir el tiempo <strong>de</strong> g<strong>en</strong>eración <strong>de</strong> mo<strong>de</strong>los<br />

básicos para el prototipado inicial <strong>de</strong> un objeto o personaje 3D.<br />

1.2. Estructura <strong>de</strong>l trabajo.<br />

Este docum<strong>en</strong>to se divi<strong>de</strong> <strong>en</strong> siete capítulos y cinco anexos:<br />

Capítulo 1: El capítulo 1 muestra la introducción g<strong>en</strong>eral al proceso <strong>de</strong> síntesis 3D, el<br />

<strong>en</strong>foque g<strong>en</strong>eral <strong>de</strong>l proyecto y la estructura <strong>de</strong> este docum<strong>en</strong>to.<br />

Capítulo 2: Objetivos <strong>de</strong>l proyecto. Enumeración y <strong>de</strong>scripción <strong>de</strong> cada uno <strong>de</strong> los<br />

objetivos.<br />

Capítulo 3: Antece<strong>de</strong>ntes, estado <strong>de</strong> la cuestión. En este apartado se hace un estudio<br />

<strong>de</strong>l estado <strong>de</strong>l arte <strong>de</strong> la fase <strong>de</strong> mo<strong>de</strong>lado. También se han realizado estudios sobre<br />

difer<strong>en</strong>tes tecnologías y técnicas, y la situación actual <strong>de</strong> todas ellas.<br />

Capítulo 4: Métodos y fases <strong>de</strong> trabajo. En este capítulo se hace un estudio <strong>de</strong> los pasos<br />

seguidos para la realización <strong>de</strong> este proyecto.<br />

Capítulo 5: Resultados obt<strong>en</strong>idos tras la realización <strong>de</strong>l proyecto y un análisis <strong>de</strong> los<br />

datos.<br />

Capítulo 6: Conclusiones y propuestas futuras. En este capítulo se hace un análisis <strong>de</strong><br />

las conclusiones <strong>de</strong>l proyecto y <strong>de</strong> las propuestas sobre futuras ampliaciones o modificaciones<br />

que se pret<strong>en</strong><strong>de</strong>n realizar.<br />

Bibliografía.<br />

Anexos. En este apartado se aña<strong>de</strong>n cinco anexos:<br />

• Instalación <strong>de</strong> la aplicación.<br />

• Manual <strong>de</strong> usuario.


1.2. Estructura <strong>de</strong>l trabajo. 7<br />

• Diagramas <strong>de</strong> clases.<br />

• Diagramas <strong>de</strong> casos <strong>de</strong> uso.<br />

• Diagramas <strong>de</strong> compon<strong>en</strong>tes.<br />

• CD adjunto.


Capítulo 2<br />

Objetivos <strong>de</strong>l proyecto.<br />

El objetivo principal <strong>de</strong>l proyecto es construir una herrami<strong>en</strong>ta que permita la g<strong>en</strong>eración<br />

automática <strong>de</strong> figuras 3D a partir <strong>de</strong> bocetos 2D creados por el usuario.<br />

Este objetivo principal, pue<strong>de</strong> dividirse <strong>en</strong> una serie <strong>de</strong> subobjetivos que se <strong>de</strong>tallan a<br />

continuación:<br />

G<strong>en</strong>eración instantánea y automática.<br />

El usuario es capaz <strong>de</strong> construir objetos, que empleando otras técnicas <strong>de</strong> mo<strong>de</strong>lado,<br />

como superficies <strong>de</strong> subdivisión, tardaría como mínimo 10 veces más.<br />

Compatible con operadores <strong>de</strong> mo<strong>de</strong>lado.<br />

Los objetos g<strong>en</strong>erados con MOSKIS pue<strong>de</strong>n completarse, modificarse y refinarse empleando<br />

los operadores habituales <strong>de</strong> mo<strong>de</strong>lado (extrusión, ...).<br />

In<strong>de</strong>p<strong>en</strong><strong>de</strong>ncia <strong>en</strong> la resolución final.<br />

El uso <strong>de</strong> superficies implícitas basadas <strong>en</strong> campos <strong>de</strong> <strong>en</strong>ergía continuos, permite la<br />

elección <strong>de</strong> la resolución <strong>en</strong> la geometría final mediante un proceso <strong>de</strong> discretización<br />

<strong>de</strong> la información (por ejemplo, utilizando el método <strong>de</strong> Marching Cubes).<br />

Rápido apr<strong>en</strong>dizaje.<br />

El periodo <strong>de</strong> apr<strong>en</strong>dizaje <strong>en</strong> herrami<strong>en</strong>tas <strong>de</strong> mo<strong>de</strong>lado suele ser elevado.<br />

8


9<br />

MOSKIS 3D por el contrario, es un programa cuyo periodo <strong>de</strong> apr<strong>en</strong>dizaje es muy<br />

reducido, el usuario simplem<strong>en</strong>te t<strong>en</strong>drá que dibujar una silueta, ayudándose <strong>de</strong> un<br />

ratón o tableta digitalizadora y el sistema le proporcionará la malla 3D <strong>de</strong>seada.<br />

Usable.<br />

MOSKIS 3D proporciona una interfaz muy intuitiva que ofrece dos posibilida<strong>de</strong>s:<br />

• Modo automático.<br />

El usuario realizará un trazo indicando la silueta <strong>de</strong>l mo<strong>de</strong>lo que <strong>de</strong>sea obt<strong>en</strong>er,<br />

y el sistema <strong>de</strong>cidirá <strong>en</strong> función <strong>de</strong> esta silueta, los parámetros a<strong>de</strong>cuados y se<br />

obt<strong>en</strong>drá la malla poligonal 3D automáticam<strong>en</strong>te.<br />

• Modo <strong>de</strong>tallado.<br />

El usuario realizará un contorno y podrá <strong>de</strong>cidir paso a paso los parámetros que le<br />

proporcionarán un nivel más o m<strong>en</strong>os <strong>de</strong>tallado <strong>de</strong> la figura que <strong>de</strong>sea conseguir.<br />

En el modo <strong>de</strong>tallado, el sistema sigue si<strong>en</strong>do muy intuitivo y s<strong>en</strong>cillo <strong>de</strong> utilizar,<br />

ya que el número <strong>de</strong> parámetros es muy reducido y evi<strong>de</strong>nte <strong>en</strong> cada paso.<br />

Mo<strong>de</strong>los orgánicos realistas.<br />

El usuario podrá realizar un trazo, <strong>de</strong>fini<strong>en</strong>do el contorno <strong>de</strong> la figura que <strong>de</strong>sea mo<strong>de</strong>lar,<br />

<strong>de</strong> esta forma se obt<strong>en</strong>drá la malla 3D asociada.<br />

La malla obt<strong>en</strong>ida, t<strong>en</strong>drá un aspecto irregular propio <strong>de</strong> los objetos orgánicos, lo que<br />

aum<strong>en</strong>tará su realismo.<br />

El sistema proporcionará a<strong>de</strong>más <strong>de</strong> la obt<strong>en</strong>ción <strong>de</strong> mallas 3D, la posibilidad <strong>de</strong> g<strong>en</strong>erar<br />

contornos y planos a partir <strong>de</strong>l trazo que <strong>de</strong>fine la silueta <strong>de</strong>l objeto.<br />

Integrado <strong>en</strong> una herrami<strong>en</strong>ta <strong>de</strong> producción 3D profesional.<br />

MOSKIS 3D estará integrado como script para la herrami<strong>en</strong>ta Bl<strong>en</strong><strong>de</strong>r, facilitando la<br />

obt<strong>en</strong>ción <strong>de</strong> un mo<strong>de</strong>lo inicial que posteriorm<strong>en</strong>te será <strong>de</strong>tallado mediante los operadores<br />

<strong>de</strong> ésta herrami<strong>en</strong>ta.


10<br />

Bl<strong>en</strong><strong>de</strong>r es una herrami<strong>en</strong>ta <strong>de</strong> diseño 3D que permite mo<strong>de</strong>lado 3D, animación, r<strong>en</strong><strong>de</strong>rizado,<br />

postproducción, creación interactiva y playback y que a<strong>de</strong>más está disponible<br />

para múltiples plataformas.<br />

En la actualidad, ninguna <strong>de</strong> las herrami<strong>en</strong>tas integradas <strong>de</strong> producción 3D como, por<br />

ejemplo, 3D Studio MAX, Lightwave o Maya, incorporan ningún script o utilidad <strong>de</strong><br />

mo<strong>de</strong>lado libre <strong>basado</strong> <strong>en</strong> bocetos.<br />

Multiplataforma.<br />

El sistema podrá ser utilizado tanto <strong>en</strong> sistemas operativos Windows como Linux.<br />

Libre.<br />

No existe ninguna herrami<strong>en</strong>ta <strong>de</strong> las características <strong>de</strong> MOSKIS 3D distribuida con<br />

lic<strong>en</strong>cia libre o <strong>de</strong> código abierto. MOSKIS se distribuirá bajo lic<strong>en</strong>cia GPL <strong>de</strong> GNU,<br />

facilitando <strong>de</strong> esta forma el estudio e investigación <strong>en</strong> este campo <strong>de</strong> la informática<br />

gráfica.


Capítulo 3<br />

Antece<strong>de</strong>ntes, estado <strong>de</strong> la cuestión<br />

3.1. Mo<strong>de</strong>lado<br />

3.1.1. Definición.<br />

3.1.2. Evolución histórica.<br />

3.1.3. Taxonomía <strong>de</strong> métodos.<br />

3.1.4. Operadores.<br />

3.1.5. Mo<strong>de</strong>lado <strong>basado</strong> <strong>en</strong> trazos.<br />

3.2. Técnicas.<br />

3.2.1. Estructuras <strong>de</strong> datos.<br />

3.2.2. Transformaciones lineales <strong>en</strong> 3D.<br />

3.2.3. Tecnologías.<br />

3.1. Mo<strong>de</strong>lado<br />

D<strong>en</strong>tro <strong>de</strong> la etapa <strong>de</strong> producción, <strong>en</strong> el proceso <strong>de</strong> síntesis 3D anteriorm<strong>en</strong>te <strong>de</strong>scrito, una<br />

<strong>de</strong> las fases más importantes es la fase <strong>de</strong> mo<strong>de</strong>lado, <strong>en</strong> la que se basa este proyecto.<br />

3.1.1. Definición.<br />

El mo<strong>de</strong>lado se <strong>en</strong>carga <strong>de</strong> la creación <strong>de</strong> mo<strong>de</strong>los consist<strong>en</strong>tes mediante la <strong>de</strong>finición<br />

<strong>de</strong> su geometría para que puedan ser manejados algorítmicam<strong>en</strong>te mediante un computador.<br />

[GM05b]<br />

11


3.1. Mo<strong>de</strong>lado 12<br />

3.1.2. Evolución histórica.<br />

A comi<strong>en</strong>zos <strong>de</strong> los años 60 aparecieron los primeros sistemas gráficos, que fueron <strong>de</strong>sarrollados<br />

con propósitos CAM (Mo<strong>de</strong>lado Asistido por Computador). Esto dio lugar a la<br />

revolución industrial <strong>de</strong> la maquinaria numéricam<strong>en</strong>te controlada (NC).<br />

En 1967 se <strong>de</strong>sarrolló <strong>en</strong> el MIT (Massachusetts Institute of Technology) el primer compilador<br />

para un l<strong>en</strong>guaje <strong>de</strong> <strong>de</strong>scripción gráfica. Simultáneam<strong>en</strong>te, las principales multinacionales<br />

automovilísticas y <strong>de</strong> aviación <strong>de</strong>sarrollaron sus primeros sistemas gráficos <strong>de</strong> diseño.<br />

A mediados <strong>de</strong> los 70 se produjeron avances significativos <strong>en</strong> el Mo<strong>de</strong>lado Geométrico.<br />

Las limitaciones iniciales que pres<strong>en</strong>taban los primeros sistemas gráficos fueron superadas<br />

y las técnicas fueron evolucionando dando lugar a lo que hoy se conoce como superficies<br />

esculpidas, superficies paramétricas, <strong>de</strong> Bezier, etc.<br />

También se <strong>de</strong>sarrollaron los primeros mo<strong>de</strong>ladores alámbricos (wireframe) y los esquemas<br />

poligonales. Estos sistemas com<strong>en</strong>zaron si<strong>en</strong>do bidim<strong>en</strong>sionales e int<strong>en</strong>taban facilitar el<br />

dibujo técnico por computador.<br />

A continuación surgieron los esquemas <strong>de</strong> Mo<strong>de</strong>lado Sólido <strong>en</strong> 1973, <strong>de</strong>sarrollandose<br />

los primeros sistemas gráficos <strong>en</strong> las universida<strong>de</strong>s <strong>de</strong> Hokkaido y Cambridge. Los sistemas<br />

fueron pres<strong>en</strong>tados <strong>en</strong> Budapest como TIPS y BUILD, <strong>de</strong>mostrando su superioridad ante<br />

cualquier otro tipo <strong>de</strong> mo<strong>de</strong>lado geométrico.<br />

TIPS utiliza primitivas básicas y operaciones booleanas para <strong>de</strong>finir sólidos, es <strong>de</strong>cir, utiliza<br />

las técnicas <strong>de</strong> mo<strong>de</strong>lado basadas <strong>en</strong> lo que hoy día se <strong>de</strong>nomina Geometría Sólido Constructiva<br />

(CSG).<br />

BUILD <strong>de</strong>fine los objetos como un conjunto <strong>de</strong> superficies más la información topológica<br />

que las relaciona, que será la información <strong>de</strong> caras, aristas y vértices. Esta técnica se conoce<br />

hoy <strong>en</strong> día por Repres<strong>en</strong>tación <strong>de</strong> Fronteras (Boundary Repres<strong>en</strong>tation o B-Rep).<br />

Des<strong>de</strong> <strong>en</strong>tonces han surgido muchos mo<strong>de</strong>ladores que utilizan alguna <strong>de</strong> las técnicas anteriores,<br />

o ambas <strong>en</strong> el caso <strong>de</strong> los Mo<strong>de</strong>ladores Híbridos. En 1977 se <strong>de</strong>sarrolló <strong>en</strong> la universidad<br />

<strong>de</strong> Rochester (EEUU) el sistema gráfico PADL-1, que utiliza CSG para la <strong>de</strong>finición<br />

<strong>de</strong> objetos, pero que pue<strong>de</strong> convertirlos automáticam<strong>en</strong>te <strong>en</strong> B-Rep, aunque el paso contrario<br />

pres<strong>en</strong>ta varios problemas. [Ram05c]


3.1. Mo<strong>de</strong>lado 13<br />

3.1.3. Taxonomía <strong>de</strong> métodos.<br />

Un mo<strong>de</strong>lo común, normalm<strong>en</strong>te es tan complejo que pocas veces es posible <strong>de</strong>finirlo<br />

mediante una única ecuación.<br />

Para po<strong>de</strong>r mo<strong>de</strong>lar objetos complejos, se hace uso <strong>de</strong> la combinación <strong>de</strong> objetos simples,<br />

también llamados primitivas. Dep<strong>en</strong>di<strong>en</strong>do <strong>de</strong> qué primitivas se utiliz<strong>en</strong> y <strong>de</strong> la combinación<br />

que se establezca se pres<strong>en</strong>tan distintos esquemas <strong>de</strong> mo<strong>de</strong>lado. [Ram05a]<br />

CSG vs B-Rep.<br />

• Mo<strong>de</strong>lado booleano: también llamado CSG (Constructive Solid Geometry), combina<br />

primitivas tridim<strong>en</strong>sionales. Los mo<strong>de</strong>los se repres<strong>en</strong>tan mediante un conjunto<br />

<strong>de</strong> expresiones lógicas que relacionan dichas primitivas.<br />

El sólido queda <strong>de</strong>scrito mediante un árbol binario:<br />

◦ La raíz es el mo<strong>de</strong>lo resultante.<br />

◦ Las hojas son las primitivas.<br />

◦ Los nodos internos son los operadores booleanos.<br />

• Mo<strong>de</strong>lado <strong>de</strong> fronteras: también llamado B-Rep (Boundary Repres<strong>en</strong>tation), utiliza<br />

primitivas bidim<strong>en</strong>sionales. Los sólidos quedan <strong>de</strong>finidos mediante estructuras<br />

<strong>de</strong> datos. Dep<strong>en</strong>di<strong>en</strong>do <strong>de</strong> las estructuras <strong>de</strong> datos <strong>de</strong> este tipo <strong>de</strong> mo<strong>de</strong>los<br />

po<strong>de</strong>mos consi<strong>de</strong>rar: [GM05b]<br />

◦ Poligonal: <strong>en</strong> el mo<strong>de</strong>lado poligonal las estructuras <strong>de</strong> datos almac<strong>en</strong>an información<br />

sobre vértices, aristas, caras y sus relaciones topológicas, es <strong>de</strong>cir,<br />

cómo se conectan.<br />

Esta es la repres<strong>en</strong>tación más empleada, y la única <strong>en</strong> muchos motores <strong>de</strong><br />

r<strong>en</strong><strong>de</strong>r.<br />

Se consigue disminuir la linealidad con <strong>de</strong>terminados métodos <strong>de</strong> sombreado.<br />

Este método es muy consist<strong>en</strong>te y rápido ya que el hardware está preparado<br />

para trabajar con polígonos.<br />

La conversión <strong>de</strong> curva a polígono es muy fácil y rápida.


3.1. Mo<strong>de</strong>lado 14<br />

Hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que su almac<strong>en</strong>ami<strong>en</strong>to es muy costoso y que hay<br />

algoritmos <strong>de</strong> sombreado y <strong>de</strong> texturizado que suel<strong>en</strong> ser más efici<strong>en</strong>tes con<br />

curvas.<br />

◦ Superficies curvas: En el mo<strong>de</strong>lado mediante superficies (parches) curvas,<br />

las estructuras <strong>de</strong> datos almac<strong>en</strong>an información sobre puntos <strong>de</strong> control, puntos<br />

<strong>de</strong> tang<strong>en</strong>te, etc.<br />

Un tipo <strong>de</strong> curva utilizado son las curvas Spline, formadas por secciones polinómicas<br />

que satisfac<strong>en</strong> ciertas condiciones <strong>de</strong> continuidad <strong>en</strong> la frontera <strong>de</strong><br />

cada intervalo.<br />

En la ecuación 3.1 se pue<strong>de</strong>n ver las ecuaciones parámetricas <strong>de</strong> las curvas<br />

Spline.<br />

x(u) = a x u 3 + b x u 2 + c x u + d x<br />

y(u) = a y u 3 + b y u 2 + c y u + d y (3.1)<br />

En 1973, Ries<strong>en</strong> <strong>de</strong>scubrió otro tipo <strong>de</strong> curva llamado B-Spline, <strong>de</strong> naturaleza<br />

no global, es <strong>de</strong>cir, cada vértice ti<strong>en</strong>e influ<strong>en</strong>cia sobre la forma <strong>de</strong> la curva <strong>en</strong><br />

un intervalo limitado. Las curvas <strong>de</strong> Bezier son un tipo <strong>de</strong> B-Spline.<br />

n∑<br />

P (t) = P i N i,j (t) (3.2)<br />

i=0<br />

En la ecuación 3.2, muestra la ecuación <strong>de</strong> la curva B-Spline don<strong>de</strong> P i son<br />

los n + 1 vértices <strong>de</strong>l polígono, y N i,j (t) son las funciones mezcla.<br />

En el mo<strong>de</strong>lado mediante superficies curvas, la g<strong>en</strong>eración <strong>de</strong> estas superficies<br />

se realiza mediante re<strong>de</strong>s <strong>de</strong> parches <strong>de</strong> curvas. De esta forma se consigu<strong>en</strong><br />

suaves cambios <strong>en</strong> la malla movi<strong>en</strong>do únicam<strong>en</strong>te puntos <strong>de</strong> control y<br />

el coste <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong> estos puntos es muy bajo.<br />

• Comparativa.<br />

A continuación, se muestra una comparativa <strong>de</strong>l mo<strong>de</strong>lado booleano con respecto<br />

<strong>de</strong>l mo<strong>de</strong>lado <strong>de</strong> fronteras y viceversa. [Ram05a]


3.1. Mo<strong>de</strong>lado 15<br />

Esquema V<strong>en</strong>tajas Inconv<strong>en</strong>i<strong>en</strong>tes<br />

CSG<br />

La estructura <strong>de</strong> datos es simple y<br />

la cantidad <strong>de</strong> datos reducida, por lo<br />

tanto la gestión interna <strong>de</strong> los datos<br />

es fácil.<br />

Si las primitivas son válidas, queda<br />

garantizada la integridad <strong>de</strong> los mo<strong>de</strong>los.<br />

Las modificaciones globales <strong>de</strong> los<br />

mo<strong>de</strong>los booleanos son fáciles, basta<br />

con cambiar los parámetros asociados<br />

a las primitivas (tamaño, forma,<br />

situación y ori<strong>en</strong>tación).<br />

Mayor facilidad <strong>de</strong> <strong>de</strong>scripción que<br />

<strong>en</strong> los mo<strong>de</strong>los B-Rep.<br />

Cualquier sistema que utilice CSG<br />

como esquema <strong>de</strong> repres<strong>en</strong>tación<br />

interno, pue<strong>de</strong> suministrar un mo<strong>de</strong>lo<br />

B-Rep ya que la conversión es<br />

s<strong>en</strong>cilla. El sistema pue<strong>de</strong> soportar,<br />

por tanto, una amplia variedad <strong>de</strong><br />

aplicaciones.<br />

Las operaciones disponibles sobre<br />

sólidos están limitadas y g<strong>en</strong>eralm<strong>en</strong>te<br />

no es fácil implem<strong>en</strong>tar otras<br />

operaciones.<br />

La visualización por el método<br />

estándar es costosa.<br />

Las transformaciones locales son<br />

difíciles <strong>de</strong> implantar <strong>en</strong> los <strong>en</strong>tornos<br />

interactivos.<br />

El po<strong>de</strong>r expresivo <strong>de</strong> los esquemas<br />

<strong>de</strong> mo<strong>de</strong>lado booleano es inferior al<br />

<strong>de</strong> los B-Rep.<br />

Al ser mo<strong>de</strong>los no evaluados, se<br />

precisan los evaluadores <strong>de</strong> fronteras,<br />

que requier<strong>en</strong> mucho tiempo <strong>de</strong><br />

cálculo. Sin embargo, como los pasos<br />

básicos son muy simples, son<br />

bu<strong>en</strong>os candidatos para ser implantados<br />

<strong>en</strong> VLSI.<br />

Cuadro 3.1: V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes <strong>de</strong> CSG con respecto a B-Rep


3.1. Mo<strong>de</strong>lado 16<br />

Esquema V<strong>en</strong>tajas Inconv<strong>en</strong>i<strong>en</strong>tes<br />

B-Rep<br />

Mayor po<strong>de</strong>r expresivo que el CSG,<br />

ya que el rango <strong>de</strong> primitivas es más<br />

amplio.<br />

Fáciles <strong>de</strong> visualizar.<br />

Facilidad <strong>en</strong> la ejecución <strong>de</strong> modificadores<br />

locales. El usuario dispone<br />

<strong>de</strong> más operaciones que <strong>en</strong> el CSG.<br />

Los poligonales son mo<strong>de</strong>los evaluados,<br />

por lo que se ti<strong>en</strong>e fácil acceso<br />

a la información geométrica y<br />

topológica, aunque los algoritmos<br />

se complican mucho cuando se trabaja<br />

con superficies curvas.<br />

La visualización <strong>en</strong> mo<strong>de</strong>lo<br />

alámbrico es inmediata.<br />

Estructura compleja y gran cantidad<br />

<strong>de</strong> información.<br />

La comprobación <strong>de</strong> la integridad<br />

<strong>de</strong> los mo<strong>de</strong>los es complicada.<br />

Algunos operadores, como los booleanos,<br />

pue<strong>de</strong>n g<strong>en</strong>erar mo<strong>de</strong>los<br />

abiertos (no íntegros), al operar sobre<br />

mo<strong>de</strong>los cerrados.<br />

La <strong>de</strong>scripción directa <strong>de</strong> los mo<strong>de</strong>los<br />

es muy tediosa, por lo que<br />

se suel<strong>en</strong> utilizar conversores <strong>de</strong>s<strong>de</strong><br />

otros esquemas a B-Rep.<br />

Es posible la pérdida <strong>de</strong> mo<strong>de</strong>los<br />

originales al operar incorrectam<strong>en</strong>te<br />

con ellos.<br />

Cuadro 3.2: V<strong>en</strong>tajas e inconv<strong>en</strong>i<strong>en</strong>tes <strong>de</strong> B-Rep con respecto a CSG


3.1. Mo<strong>de</strong>lado 17<br />

Métodos avanzados.<br />

• Superficies <strong>de</strong> subdivisión.<br />

Es una repres<strong>en</strong>tación intermedia <strong>en</strong>tre las superficies poligonales y las superficies<br />

g<strong>en</strong>eradas mediante curvas.<br />

Toda superficie <strong>de</strong> subdivisión empieza con una superficie poligonal llamada red<br />

<strong>de</strong> control, la cual se subdivi<strong>de</strong> <strong>en</strong> más polígonos, y así sucesivam<strong>en</strong>te, empleando<br />

una aproximación adaptativa que aña<strong>de</strong> únicam<strong>en</strong>te más resolución <strong>en</strong> las zonas<br />

que lo requier<strong>en</strong>.<br />

Las superficies <strong>de</strong> subdivisión proporcionan la flexibilidad <strong>de</strong> las superficies poligonales<br />

y la resolución <strong>de</strong> los parches.<br />

No son superficies paramétricas, es <strong>de</strong>cir, no se <strong>de</strong>fin<strong>en</strong> mediante una fórmula,<br />

sino <strong>de</strong> forma algorítmica y su topología es irregular.<br />

La g<strong>en</strong>eración <strong>de</strong> superficies <strong>de</strong> subdivisión ti<strong>en</strong>e principalm<strong>en</strong>te dos fases:<br />

◦ Refinami<strong>en</strong>to: parti<strong>en</strong>do <strong>de</strong> la red <strong>de</strong> control, se crean nuevos vértices que se<br />

reconectan para crear nuevos triángulos.<br />

◦ Suavizado: calcula la posición <strong>de</strong> algunos (o todos) los vértices <strong>de</strong> la nueva<br />

malla. Las reglas <strong>de</strong> suavizado <strong>de</strong>terminan difer<strong>en</strong>tes esquemas y la superficie<br />

final, dón<strong>de</strong> el más conocido es el <strong>de</strong> Catmull-Clark.<br />

El algoritmo <strong>de</strong> Catmull-Clark se divi<strong>de</strong> <strong>en</strong> tres pasos: [CC78]<br />

◦ Para cada una <strong>de</strong> las caras <strong>de</strong> la malla, se g<strong>en</strong>eran los nuevos ”vértices <strong>de</strong> cara”<br />

como la media <strong>de</strong> todos los puntos <strong>de</strong> la cara original. Cada cara t<strong>en</strong>drá como<br />

mínimo tres vértices.<br />

◦ Se g<strong>en</strong>eran los nuevos ”vértices <strong>de</strong> arista”, como la media <strong>de</strong> los puntos medios<br />

<strong>de</strong> las aristas originales junto con los ”vértices <strong>de</strong> cara” nuevos, <strong>de</strong> las<br />

caras adyac<strong>en</strong>tes a la arista.<br />

◦ Se muev<strong>en</strong> los vértices originales <strong>de</strong> la red <strong>de</strong> control utilizando los vértices<br />

vecinos (véase la ecuación 3.3). Se conecta a continuación, cada vértice


3.1. Mo<strong>de</strong>lado 18<br />

nuevo con sus nuevos vértices <strong>de</strong> arista adyac<strong>en</strong>tes.<br />

v i+1 = N − 2<br />

N vi + 1 N−1<br />

N ( ∑<br />

(e i 2 j + fj i+1 )) (3.3)<br />

⋄ N es el número <strong>de</strong> aristas que sal<strong>en</strong> <strong>de</strong> un vértice, también llamado val<strong>en</strong>cia.<br />

j=0<br />

⋄ v i es el vértice v <strong>en</strong> el nivel <strong>de</strong> recursión i.<br />

⋄ e i j son los vértices vecinos <strong>de</strong> v, <strong>en</strong> el nivel <strong>de</strong> recursión i, estando j <strong>en</strong> el<br />

rango [0,N-1].<br />

⋄ f i j son los vértices <strong>de</strong> cara vecinos <strong>de</strong> v <strong>en</strong> el nivel <strong>de</strong> recursión i.<br />

• Superficies implícitas (Metasuperficies).<br />

Una superficie implícita es aquella <strong>de</strong>finida mediante funciones que se evalúan <strong>en</strong><br />

un campo contínuo.<br />

Un punto p formará parte <strong>de</strong> la superficie implícita si el resultado es U (valor<br />

límite) cuando el punto se evalúa <strong>en</strong> la función f (ver ecuación 3.4).<br />

f(x, y, z) = f(p) = U (3.4)<br />

Pue<strong>de</strong>n mezclarse obt<strong>en</strong>i<strong>en</strong>do puntos que cumplan las condiciones <strong>de</strong> cada función<br />

(normalm<strong>en</strong>te U = 0) (ver ecuación 3.5).<br />

f(p) =<br />

n−1 ∑<br />

i=0<br />

h(p) (3.5)<br />

En el caso concreto <strong>de</strong> metasuperficies, cada elem<strong>en</strong>to vi<strong>en</strong>e <strong>de</strong>finido, al m<strong>en</strong>os,<br />

con su posición, su fuerza y su radio <strong>de</strong> acción.<br />

Una vez conseguido el cálculo <strong>de</strong> la fuerza para cada punto P, se ti<strong>en</strong>e un campo<br />

contínuo, mi<strong>en</strong>tras lo que se pret<strong>en</strong><strong>de</strong> conseguir es una superficie, para lo cual se<br />

ti<strong>en</strong>e que discretizar ese campo contínuo.<br />

La discretización se pue<strong>de</strong> realizar por ejemplo, mediante la g<strong>en</strong>eración <strong>de</strong> polígonos<br />

Marching Cubes, aunque existe otro algoritmo que int<strong>en</strong>ta mejorarlo, llamado<br />

Marching Tetrahedroms.


3.1. Mo<strong>de</strong>lado 19<br />

El algoritmo <strong>de</strong> Marching Cubes es uno <strong>de</strong> los más famosos. Consiste <strong>en</strong> <strong>de</strong>scribir<br />

la superficie <strong>en</strong> forma <strong>de</strong> polígonos, <strong>de</strong>scritos por las intersecciones <strong>de</strong> la superficie<br />

a evaluar, con una <strong>de</strong>scomposición <strong>de</strong>l espacio <strong>en</strong> formas geométricas base. El<br />

algoritmo geométrico comi<strong>en</strong>za realizando una <strong>de</strong>scomposición <strong>de</strong>l espacio afectado<br />

por la superficie, <strong>en</strong> cubos <strong>de</strong> un tamaño <strong>de</strong>terminado (geometría base), estos<br />

cubos también son <strong>de</strong>nominados voxels. [Fer05]<br />

Dada la <strong>de</strong>scomposición <strong>en</strong> voxels, cada uno <strong>de</strong> ellos pue<strong>de</strong> <strong>en</strong>contrarse <strong>en</strong> una <strong>de</strong><br />

estas tres situaciones:<br />

◦ Completam<strong>en</strong>te fuera <strong>de</strong> la superficie.<br />

◦ Completam<strong>en</strong>te <strong>de</strong>ntro <strong>de</strong> la superficie.<br />

◦ Parcialm<strong>en</strong>te <strong>de</strong>ntro, o sea, intersectado por la superficie.<br />

El algoritmo, <strong>de</strong>spués <strong>de</strong> realizar esta clasificación, se <strong>de</strong>dicará a <strong>de</strong>terminar la<br />

forma <strong>de</strong>l polígono <strong>de</strong> intersección <strong>en</strong>tre la ecuación <strong>de</strong> la superficie y el cubo<br />

intersectado.<br />

El resultado <strong>de</strong> esta repres<strong>en</strong>tación como <strong>en</strong> toda discretización, <strong>de</strong>p<strong>en</strong><strong>de</strong>rá <strong>de</strong> la<br />

precisión elegida, que <strong>en</strong> este caso v<strong>en</strong>drá <strong>de</strong>terminada por el tamaño <strong>de</strong> las celdas<br />

(voxels).<br />

• Mo<strong>de</strong>lado procedural.<br />

Este tipo <strong>de</strong> mo<strong>de</strong>lado se aplica especialm<strong>en</strong>te a objetos <strong>en</strong>contrados <strong>en</strong> la naturaleza,<br />

ya que simula el proceso <strong>de</strong> crecimi<strong>en</strong>to natural y se <strong>de</strong>scribe <strong>en</strong> forma <strong>de</strong><br />

procedimi<strong>en</strong>tos. [Rem05]<br />

◦ Geometría fractal. Especialm<strong>en</strong>te efectivo <strong>en</strong> la creación <strong>de</strong> figuras aleatorias<br />

irregulares que simulan las formas <strong>en</strong>contradas <strong>en</strong> la naturaleza. El<br />

procedimi<strong>en</strong>to consiste <strong>en</strong> la división <strong>de</strong> los polígonos <strong>de</strong>l objeto <strong>de</strong> forma<br />

recursiva y aleatoria <strong>en</strong> muchas formas irregulares. La cantidad <strong>de</strong> división<br />

v<strong>en</strong>drá <strong>de</strong>limitada por un parámetro que indique el nivel <strong>de</strong> recursión.<br />

Cabe <strong>de</strong>stacar el mo<strong>de</strong>lado <strong>de</strong> plantas, que se realiza codificando sus características<br />

mediante una serie <strong>de</strong> reglas usadas como base <strong>de</strong> su construcción.<br />

Se suel<strong>en</strong> utilizar dos técnicas:


3.1. Mo<strong>de</strong>lado 20<br />

⋄ Técnicas ori<strong>en</strong>tadas al espacio.<br />

⋄ Técnicas ori<strong>en</strong>tadas a la estructura: <strong>Sistema</strong>s-L (Lyn<strong>de</strong>nmayer Systems).<br />

◦ <strong>Sistema</strong>s <strong>de</strong> partículas. Se emplean figuras simples, normalm<strong>en</strong>te esferas o<br />

puntos tridim<strong>en</strong>sionales, a los cuales se les aplica atributos <strong>de</strong> crecimi<strong>en</strong>to.<br />

Cuando estos atributos se simulan, las partículas ti<strong>en</strong><strong>en</strong> un comportami<strong>en</strong>to<br />

específico que da lugar a trayectorias <strong>de</strong> partículas. Debido al crecimi<strong>en</strong>to<br />

<strong>de</strong> las partículas con el paso <strong>de</strong>l tiempo, sus trayectorias <strong>de</strong>fin<strong>en</strong> una figura<br />

que se convierte <strong>en</strong> un mo<strong>de</strong>lo tridim<strong>en</strong>sional. Este crecimi<strong>en</strong>to pue<strong>de</strong> ser<br />

aleatorio o controlado.<br />

Los sistemas <strong>de</strong> partículas se utilizan g<strong>en</strong>eralm<strong>en</strong>te para crear f<strong>en</strong>óm<strong>en</strong>os<br />

naturales, cuya figura cambia constantem<strong>en</strong>te, como las torm<strong>en</strong>tas <strong>de</strong> nieve,<br />

las nubes, el fuego, etc.<br />

Para crear un sistema <strong>de</strong> partículas los pasos a seguir son:<br />

⋄ Crear un emisor <strong>de</strong> partículas.<br />

⋄ Determinar el número <strong>de</strong> partículas.<br />

⋄ Definir la forma y el tamaño <strong>de</strong> las partículas.<br />

⋄ Definir el movimi<strong>en</strong>to inicial <strong>de</strong> las partículas. Se suele <strong>de</strong>finir la velocidad,<br />

dirección, rotación y aletoriedad con que las partículas sal<strong>en</strong> <strong>de</strong>l<br />

emisor.<br />

⋄ Modificar el movimi<strong>en</strong>to <strong>de</strong> las partículas.<br />

◦ Mo<strong>de</strong>lado por simulación física. La forma <strong>de</strong> mo<strong>de</strong>lar materiales naturales<br />

cuya forma está <strong>en</strong> constante cambio es simularla.<br />

Este método se utiliza para f<strong>en</strong>óm<strong>en</strong>os como el fuego, humo, vi<strong>en</strong>to, nubes,<br />

etc.<br />

• Mo<strong>de</strong>lado <strong>basado</strong> <strong>en</strong> trazos. ”Sketch Mo<strong>de</strong>lling”.<br />

Este tipo <strong>de</strong> mo<strong>de</strong>lado consiste <strong>en</strong> partir <strong>de</strong> trazos realizados por el usuario (trazos<br />

2D), tanto para la g<strong>en</strong>eración <strong>de</strong> un objeto, como para la modificación <strong>de</strong>l mismo.<br />

Esto proporciona una repres<strong>en</strong>tación homogénea ya que todo el mo<strong>de</strong>lado se<br />

realiza intuitivam<strong>en</strong>te <strong>de</strong> la misma forma.


3.1. Mo<strong>de</strong>lado 21<br />

Para la creación <strong>de</strong> un mo<strong>de</strong>lo nuevo, inicialm<strong>en</strong>te se proce<strong>de</strong>rá al dibujado <strong>de</strong>l<br />

contorno 2D y se obt<strong>en</strong>drá la malla poligonal asociada a ese contorno. A la hora<br />

<strong>de</strong> modificar la malla obt<strong>en</strong>ida, se realizarán <strong>de</strong> la misma forma trazos 2D para<br />

realizar las operaciones correspondi<strong>en</strong>tes sobre ésta.<br />

Se profundiza sobre este tipo <strong>de</strong> mo<strong>de</strong>lado más a<strong>de</strong>lante.<br />

3.1.4. Operadores.<br />

Los sistemas <strong>de</strong> mo<strong>de</strong>lado CSG se caracterizan por la g<strong>en</strong>eración <strong>de</strong> mo<strong>de</strong>los mediante<br />

el uso <strong>de</strong> operadores booleanos, que permit<strong>en</strong> (al usuario) realizar una serie <strong>de</strong> combinaciones<br />

para obt<strong>en</strong>er el mo<strong>de</strong>lo final.<br />

Po<strong>de</strong>mos <strong>de</strong>finir tres operaciones booleanas básicas:<br />

• Unión.<br />

• Intersección.<br />

• Difer<strong>en</strong>cia.<br />

En sistemas <strong>de</strong> mo<strong>de</strong>lado B-Rep se pue<strong>de</strong>n aplicar una serie <strong>de</strong> operadores, a<strong>de</strong>más <strong>de</strong><br />

los operadores booleanos citados anteriorm<strong>en</strong>te: [GM05b]<br />

• Extrusión (Extrusion o lofting): Consiste <strong>en</strong> g<strong>en</strong>erar una superficie 3D ext<strong>en</strong>di<strong>en</strong>do<br />

una forma 2D a lo largo <strong>de</strong> un eje.<br />

• Barrido (Sweeping): Es una g<strong>en</strong>eralización <strong>de</strong> la extrusión, ya que consiste <strong>en</strong><br />

g<strong>en</strong>erar un objeto 3D ext<strong>en</strong>di<strong>en</strong>do una forma a lo largo <strong>de</strong> un camino, si el camino<br />

es recto estamos aplicando el operador <strong>de</strong> extrusión.<br />

• Revolución (Revolve o lathe): Es una variación <strong>de</strong> las superficies <strong>de</strong> barrido. Se<br />

<strong>de</strong>splaza una forma 2D alre<strong>de</strong>dor <strong>de</strong> un eje.<br />

• Skinning: Se g<strong>en</strong>era una superficie curva que cubre secciones cerradas, también<br />

llamadas ”rebanadas”. Es similar al barrido, sólo que la curva pue<strong>de</strong> cambiar su<br />

geometría mi<strong>en</strong>tras avanza por el camino.


3.1. Mo<strong>de</strong>lado 22<br />

• Mezclado (Bl<strong>en</strong>ding): Es un método especial para combinar dos superficies, que<br />

no ti<strong>en</strong><strong>en</strong> por qué estar <strong>en</strong> contacto. La nueva superficie curva que se g<strong>en</strong>era se<br />

pue<strong>de</strong> controlar mediante puntos <strong>de</strong> control.<br />

• Truncado (Beveling): Consiste <strong>en</strong> recortar un vértice situado <strong>en</strong>tre dos superficies<br />

adyac<strong>en</strong>tes reemplazándolo por un plano inclinado.<br />

• Redon<strong>de</strong>ado (Rounding): Es una versión <strong>de</strong>l truncado que suaviza los vértices y<br />

aristas <strong>de</strong>l objeto.<br />

A<strong>de</strong>más <strong>de</strong> todos los operadores com<strong>en</strong>tados anteriorm<strong>en</strong>te, se van construy<strong>en</strong>do herrami<strong>en</strong>tas<br />

y aplicaciones que permit<strong>en</strong> facilitar la modificación <strong>de</strong> un mo<strong>de</strong>lo para<br />

conseguir el objetivo final. Estos operadores pue<strong>de</strong>n <strong>de</strong>nominarse operadores avanzados:<br />

• Sculpter: Este tipo <strong>de</strong> operador ha t<strong>en</strong>ido bastante relevancia <strong>en</strong> los últimos años<br />

ya que permite mediante trazos 2D, simulando un pincel o un <strong>de</strong>do, modificar la<br />

malla 3D como si se estuviese esculpi<strong>en</strong>do <strong>en</strong> ella, simulando la arcilla.<br />

Exist<strong>en</strong> algunas herrami<strong>en</strong>tas que implem<strong>en</strong>tan ya esta técnica, que son ZBrush<br />

[ZBr97], herrami<strong>en</strong>ta que a<strong>de</strong>más <strong>de</strong> exculpir un objeto 3D permite pintar la malla<br />

g<strong>en</strong>erando <strong>de</strong> esta forma su material o textura.<br />

Otra herrami<strong>en</strong>ta <strong>de</strong> este tipo <strong>en</strong> el mercado es BBrush, que es un script integrado<br />

<strong>en</strong> la herrami<strong>en</strong>ta <strong>de</strong> síntesis 3D Bl<strong>en</strong><strong>de</strong>r [BBr97].<br />

3.1.5. Mo<strong>de</strong>lado <strong>basado</strong> <strong>en</strong> trazos.<br />

3.1.5.1. Estado <strong>de</strong>l arte.<br />

El problema <strong>de</strong>l mo<strong>de</strong>lado <strong>de</strong> figuras complejas surge al ser un proceso muy costoso <strong>en</strong><br />

el tiempo y por lo g<strong>en</strong>eral poco intuitivo. Para la realización <strong>de</strong> esta tarea exist<strong>en</strong> técnicas<br />

<strong>de</strong> alta calidad, pero <strong>de</strong> alto coste, como pue<strong>de</strong>n ser el mo<strong>de</strong>lado <strong>en</strong> arcilla y la utilización<br />

<strong>de</strong> escáneres 3D para la digitalización <strong>de</strong>l mo<strong>de</strong>lo. Estas técnicas son utilizadas <strong>en</strong> producciones<br />

profesionales <strong>de</strong> alto presupuesto, que posteriorm<strong>en</strong>te se mejoran utilizando técnicas<br />

software.


3.1. Mo<strong>de</strong>lado 23<br />

El mo<strong>de</strong>lado se realiza habitualm<strong>en</strong>te parti<strong>en</strong>do <strong>de</strong> primitivas básicas como pue<strong>de</strong>n ser<br />

esferas, cilindros, conos, ... y modificando éstas mediante la combinación <strong>de</strong> múltiples operaciones<br />

y/o la modificación directa <strong>de</strong> sus vértices o puntos <strong>de</strong> control.<br />

Actualm<strong>en</strong>te exist<strong>en</strong> herrami<strong>en</strong>tas, aún <strong>en</strong> investigación, cuyo objetivo es facilitar esta tarea<br />

dando una alternativa distinta al mo<strong>de</strong>lado a partir <strong>de</strong> primitivas. Este tipo <strong>de</strong> herrami<strong>en</strong>tas<br />

ti<strong>en</strong><strong>en</strong> como objetivo hacer más rápido y cómodo el prototipado inicial <strong>de</strong>l mo<strong>de</strong>lo para su<br />

posterior tratami<strong>en</strong>to mediante las técnicas clásicas.<br />

La i<strong>de</strong>a principal es el uso <strong>de</strong> trazos libres (bocetos) g<strong>en</strong>erados por el usuario mediante un<br />

ratón o tabla digitalizadora, es <strong>de</strong>cir, el usuario dibuja <strong>en</strong> pantalla una silueta 2D, y el sistema<br />

g<strong>en</strong>era automáticam<strong>en</strong>te su malla poligonal correspondi<strong>en</strong>te, proporcionando mediante la<br />

misma técnica la posibilidad <strong>de</strong> realizar <strong>de</strong>terminadas operaciones sobre la malla 3D [GG04].<br />

Algunos trabajos sobre este tipo <strong>de</strong> mo<strong>de</strong>lado, usan trazos 2D para trabajar sobre la interfaz<br />

<strong>de</strong> usuario, y por ejemplo para manejar curvas <strong>de</strong> interpolación [T.94].<br />

Algunas aplicaciones que utilizan estas técnicas para mo<strong>de</strong>lado 3D están empezando a<br />

cobrar importancia, una <strong>de</strong> ellas es SKETCH [RZK96], que utiliza una interfaz basada <strong>en</strong><br />

gestos para mo<strong>de</strong>lar rápidam<strong>en</strong>te sólidos, utilizando primitivas simples. Este sistema trabaja<br />

bi<strong>en</strong> con el uso <strong>de</strong> primitivas, ya que permite mo<strong>de</strong>lar sólidos <strong>de</strong> forma intuitiva, pero no<br />

pue<strong>de</strong> ser utilizado para figuras libres como mo<strong>de</strong>los orgánicos.<br />

Otra aplicación que trabaja para que la interfaz <strong>de</strong> un mo<strong>de</strong>lador sea más intuitiva mediante<br />

el uso <strong>de</strong> trazos 2D es Mod3D [NR00]. En esta herrami<strong>en</strong>ta, cuando el usuario así lo indica,<br />

se produce una interpretación <strong>de</strong>l trazo o trazos llevados a cabo. La validación <strong>de</strong>l trazo se<br />

realiza mediante dos patrones básicos que son líneas y círculos, y su interpretación se realiza<br />

mediante la comparación <strong>de</strong>l trazo con los trazos almac<strong>en</strong>ados <strong>en</strong> una tabla <strong>de</strong> trazos válidos.<br />

Esta herrami<strong>en</strong>ta es muy limitada <strong>en</strong> cuanto a la g<strong>en</strong>eración <strong>de</strong> compon<strong>en</strong>tes, ya que se obti<strong>en</strong><strong>en</strong><br />

primitivas básicas mediante trazos comparándolas con los previam<strong>en</strong>te almac<strong>en</strong>ados <strong>en</strong><br />

una tabla. Mod3D también está limitado a la g<strong>en</strong>eración <strong>de</strong> sólidos a partir <strong>de</strong> primitivas, ya<br />

que no permite creación <strong>de</strong> formas libres.<br />

En 1996, Takeo Igarashi creó una herrami<strong>en</strong>ta, Teddy [Iga95], que realm<strong>en</strong>te consigue<br />

el ”Mo<strong>de</strong>lado 3D <strong>basado</strong> <strong>en</strong> bocetos”. Esta herrami<strong>en</strong>ta sí nos permite la g<strong>en</strong>eración <strong>de</strong> una<br />

malla 3D poligonal parti<strong>en</strong>do <strong>de</strong>l contorno dibujado por el usuario <strong>en</strong> la interfaz. A<strong>de</strong>más


3.1. Mo<strong>de</strong>lado 24<br />

incluye operaciones como extrusión y b<strong>en</strong>ding sigui<strong>en</strong>do el mismo planteami<strong>en</strong>to, es <strong>de</strong>cir,<br />

las operaciones modifican la malla también mediante trazos realizados por el usuario. Los<br />

resultados obt<strong>en</strong>idos ti<strong>en</strong><strong>en</strong> un aspecto muy natural, se obti<strong>en</strong>e una malla poligonal <strong>en</strong> todos<br />

los casos y la resolución <strong>de</strong> la malla es fija, es <strong>de</strong>cir, es in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te <strong>de</strong>l tipo <strong>de</strong> figura (ver<br />

figura 3.1).<br />

Figura 3.1: Mo<strong>de</strong>lado <strong>en</strong> Teddy.<br />

3.1.5.2. Pasos <strong>en</strong> la g<strong>en</strong>eración <strong>de</strong> un objeto <strong>en</strong> Teddy.<br />

En Teddy, los pasos que se sigu<strong>en</strong> para la g<strong>en</strong>eración <strong>de</strong> una malla 3D son los sigui<strong>en</strong>tes<br />

[IM99], [GG04]:<br />

El usuario realiza un trazo libre dibujando un contorno, este trazo <strong>de</strong>be ser cerrado y no<br />

<strong>de</strong>be producir intersecciones consigo mismo, ya que <strong>en</strong> este caso el sistema fallaría.<br />

A partir <strong>de</strong>l contorno dibujado, se crea un polígono mediante la conexión <strong>de</strong>l punto <strong>de</strong><br />

comi<strong>en</strong>zo y <strong>de</strong>l punto final <strong>de</strong>l trazo. Se proce<strong>de</strong> <strong>en</strong> este paso a la i<strong>de</strong>ntificación <strong>de</strong> las<br />

aristas <strong>de</strong>l polígono, el cuál será la silueta <strong>de</strong> la malla 3D que se obt<strong>en</strong>ga.<br />

Para la g<strong>en</strong>eración <strong>de</strong>l polígono, algunos parámetros son <strong>de</strong>cididos por el programador<br />

para controlar como se realiza este proceso:<br />

• Mínima y máxima longitud <strong>de</strong> cada arista <strong>de</strong>l polígono.<br />

• Mínima longitud <strong>de</strong>l trazo <strong>de</strong> <strong>en</strong>trada que es consi<strong>de</strong>rada como válida.


3.1. Mo<strong>de</strong>lado 25<br />

• Ángulo mínimo que es requerido <strong>en</strong>tre aristas consecutivas para crear una nueva<br />

arista.<br />

Una vez obt<strong>en</strong>ido el polígono, los ejes obt<strong>en</strong>idos <strong>en</strong> este paso van a ser llamados<br />

ejes externos, y se llamarán ejes internos a los creados posteriorm<strong>en</strong>te como resultado<br />

<strong>de</strong> la triangulación (ver figura 3.2).<br />

Se proce<strong>de</strong> a la Triangulación <strong>de</strong> Delaunay que se pue<strong>de</strong> <strong>en</strong>unciar como sigue [el06]:<br />

Una red <strong>de</strong> triángulos, es una triangulación <strong>de</strong> Delaunay si todas las circunfer<strong>en</strong>cias<br />

circunscritas <strong>de</strong> todos los triángulos <strong>de</strong> la red son vacías.<br />

Esta sería la <strong>de</strong>finición para espacios bidim<strong>en</strong>sionales, para espacios tridim<strong>en</strong>sionales<br />

se podría ampliar utilizando una esfera circunscrita <strong>en</strong> vez <strong>de</strong> una circunfer<strong>en</strong>cia circunscrita.<br />

La circunfer<strong>en</strong>cia circunscrita <strong>de</strong> un triángulo es la circunfer<strong>en</strong>cia que conti<strong>en</strong>e los tres<br />

vértices <strong>de</strong>l triángulo.<br />

Según la <strong>de</strong>finición <strong>de</strong> Delaunay la circunfer<strong>en</strong>cia circunscrita es vacía, si no conti<strong>en</strong>e<br />

otros vértices aparte <strong>de</strong> los tres que la <strong>de</strong>fin<strong>en</strong>.<br />

Las triangulaciones <strong>de</strong> Delaunay ti<strong>en</strong><strong>en</strong> las sigui<strong>en</strong>tes propieda<strong>de</strong>s:<br />

• La triangulación forma la <strong>en</strong>volv<strong>en</strong>te convexa <strong>de</strong>l conjunto <strong>de</strong> puntos.<br />

• El ángulo mínimo <strong>de</strong>ntro <strong>de</strong> todos los triángulos está maximizado.<br />

• La triangulación es unívoca si <strong>en</strong> ningún bor<strong>de</strong> <strong>de</strong> la circunfer<strong>en</strong>cia circunscrita<br />

hay más <strong>de</strong> tres vértices.<br />

Una vez triangulado el polígono, el conjunto <strong>de</strong> triángulos forman un plano <strong>de</strong>limitado<br />

por el polígono <strong>de</strong> la silueta pintada por el usuario.<br />

Se clasifican los triángulos obt<strong>en</strong>idos <strong>de</strong>spués <strong>de</strong> esta triangulación como (ver figura<br />

3.2):<br />

• Triángulos T: triángulos con dos aristas externas y una interna.<br />

• Triángulos S: triángulos con dos aristas internas y una externa.


3.1. Mo<strong>de</strong>lado 26<br />

• Triángulos J: triángulos con todas sus aristas internas.<br />

T<br />

S<br />

S<br />

S<br />

J<br />

S<br />

S<br />

S<br />

S<br />

S<br />

T<br />

S<br />

S<br />

S<br />

T<br />

Polígono inicial<br />

Triangulación <strong>de</strong><br />

Delaunay<br />

Triángulos T<br />

Triángulos S<br />

Triángulos J<br />

Detección <strong>de</strong> la<br />

espina.<br />

Figura 3.2: Polígono inicial y g<strong>en</strong>eración <strong>de</strong>l plano.<br />

Una vez obt<strong>en</strong>ido el plano formando la figura <strong>de</strong>seada, se proce<strong>de</strong> a la <strong>de</strong>tección <strong>de</strong><br />

la espina dorsal <strong>de</strong>l objeto (spine), como el eje c<strong>en</strong>tral <strong>de</strong>l objeto. La espina dorsal se<br />

obti<strong>en</strong>e <strong>de</strong>l sigui<strong>en</strong>te modo (ver figura 3.2):<br />

• Para cada triángulo S, se calcula el punto medio <strong>de</strong> sus dos aristas internas y se<br />

conectan.<br />

• Para cada triángulo J, se calcula el punto medio <strong>de</strong> cada arista (todas son internas)<br />

y el punto medio <strong>de</strong>l triángulo, quedando conectado con cada uno <strong>de</strong> los anteriores<br />

calculados.<br />

En este instante se ti<strong>en</strong>e un conjunto <strong>de</strong> triángulos don<strong>de</strong> algunos son innecesarios, con<br />

lo cual se realiza un podado <strong>de</strong> aristas insignificantes y retriangulación <strong>de</strong> la malla.<br />

Para el podado <strong>de</strong> aristas irrelevantes se examina cada triángulo T, expandiéndolo <strong>en</strong><br />

regiones progresivam<strong>en</strong>te más gran<strong>de</strong>s, combinándolo con triángulos adyac<strong>en</strong>tes.<br />

El algoritmo <strong>de</strong> poda que se implem<strong>en</strong>ta <strong>en</strong> Teddy se <strong>de</strong>scribe a continuación.<br />

Para cada triángulo T, al que llamaremos X:<br />

1. Construir un semicírculo que t<strong>en</strong>ga <strong>de</strong> diámetro la longitud <strong>de</strong> la arista interior <strong>de</strong><br />

X, y cuyo c<strong>en</strong>tro sea el c<strong>en</strong>tro <strong>de</strong> dicha arista (ver figura 3.3).


3.1. Mo<strong>de</strong>lado 27<br />

2. Si los vértices <strong>de</strong> X se <strong>en</strong>cu<strong>en</strong>tran <strong>en</strong> o <strong>de</strong>ntro <strong>de</strong>l semicírculo, quitamos la arista<br />

interna <strong>de</strong> X y fusionamos X con el triángulo que se <strong>en</strong>cu<strong>en</strong>tre al otro lado <strong>de</strong> la<br />

arista (ver figura 3.3).<br />

Si algún vértice <strong>de</strong> X se <strong>en</strong>cu<strong>en</strong>tra fuera, ir al paso 4 (ver figura 3.4).<br />

Comi<strong>en</strong>za la poda a partir<br />

<strong>de</strong> un<br />

triángulo T<br />

Avanza<br />

Figura 3.3: Algoritmo <strong>de</strong> poda.<br />

3. Si el triángulo adyac<strong>en</strong>te nuevo es un triángulo S, X ti<strong>en</strong>e ahora una arista externa<br />

más y una nueva arista interior, volver al paso 1.<br />

Si el triángulo adyac<strong>en</strong>te nuevo es un triángulo J ir al paso 4 (ver figura 3.5).<br />

4. Si los vértices <strong>de</strong> X se <strong>en</strong>cu<strong>en</strong>tran fuera <strong>de</strong>l semicírculo, se triangula X con un<br />

abanico <strong>de</strong> triángulos que irradian <strong>en</strong> el punto medio <strong>de</strong> la arista interior (ver<br />

figura 3.4).<br />

Si por el contrario, el triángulo adya<strong>de</strong>nte nuevo es un triángulo J, se triangula X<br />

con un abanico <strong>de</strong>s<strong>de</strong> el punto medio <strong>de</strong>l triángulo J (ver figura 3.5).<br />

FIN.<br />

La espina dorsal podada es g<strong>en</strong>erada mediante la conexión <strong>de</strong> los puntos medios <strong>de</strong> las<br />

aristas internas <strong>de</strong> los triángulos S y triángulos J (exceptuando los triángulos nuevos<br />

g<strong>en</strong>erados <strong>en</strong> la poda) (ver figura 3.6).<br />

El sigui<strong>en</strong>te paso es subdividir los triángulos S y triángulos J para prepararlos para la<br />

elevación. Estos triángulos se divi<strong>de</strong>n <strong>en</strong> la espina dorsal <strong>de</strong> modo que ahora se ti<strong>en</strong>e


3.1. Mo<strong>de</strong>lado 28<br />

El algoritmo finaliza<br />

Triangula a partir <strong>de</strong>l<br />

punto medio <strong>de</strong> la arista<br />

Figura 3.4: Finaliza el algoritmo <strong>de</strong> poda. Vértices fuera <strong>de</strong>l semicírculo.<br />

El algoritmo finaliza<br />

Triangula a partir <strong>de</strong>l<br />

punto medio <strong>de</strong>l triángulo<br />

Figura 3.5: Finaliza el algoritmo <strong>de</strong> poda. Encontrado triángulo J.<br />

una malla triangular 2D completa <strong>en</strong>tre la espina dorsal y el perímetro <strong>de</strong>l polígono<br />

inicial (ver figura 3.6).<br />

Lo que se ti<strong>en</strong>e hasta ahora es una triangulación 2D con una espina dorsal que repres<strong>en</strong>ta<br />

el eje mediano <strong>de</strong> la forma inicial. Para producir una forma 3D, se utiliza la espina<br />

dorsal para crear un perfil <strong>de</strong> alturas, es <strong>de</strong>cir, para cada vértice <strong>de</strong> la espina dorsal, se<br />

crean dos nuevos vértices que t<strong>en</strong>gan las mismas coor<strong>de</strong>nadas X e Y, con una coor<strong>de</strong>nada<br />

Z positiva y otra negativa, igual a la distancia <strong>en</strong> valor absoluto <strong>en</strong>tre el vértice y<br />

la silueta <strong>de</strong>l objeto.<br />

El problema que surge es cómo computar la distancia <strong>de</strong> la espina dorsal a la frontera <strong>de</strong>l


3.1. Mo<strong>de</strong>lado 29<br />

Triángulos <strong>de</strong>spués <strong>de</strong> la<br />

poda<br />

Espina g<strong>en</strong>erada<br />

Triangularización final<br />

Figura 3.6: Malla triangulada 2D completa.<br />

polígono. Lo i<strong>de</strong>al sería construir secciones repres<strong>en</strong>tativas exactas <strong>de</strong> la forma <strong>en</strong> cada<br />

vértice <strong>de</strong> la espina dorsal. Como esto es <strong>de</strong>masiado costoso, se hace un promedio <strong>de</strong><br />

las distancias <strong>en</strong>tre el vértice y los vértices externos que están conectados directam<strong>en</strong>te<br />

a ese vértice (ver figura 3.7).<br />

Una vez elevada la espina dorsal, se proce<strong>de</strong> a la construcción <strong>de</strong> la malla. Cada arista<br />

interna <strong>de</strong> cada triángulo <strong>de</strong>l abanico, excluy<strong>en</strong>do las aristas <strong>de</strong> la espina dorsal, es<br />

convertida a un cuarto <strong>de</strong> óvalo. El sistema construye la malla poligonal apropiada<br />

mirando las aristas elevadas vecinas. El sistema elimina el plano g<strong>en</strong>erado inicialm<strong>en</strong>te<br />

a partir <strong>de</strong> la silueta.<br />

Inicialm<strong>en</strong>te Elevación Unión G<strong>en</strong>eración malla<br />

poligonal<br />

Figura 3.7: Elevación <strong>de</strong> la espina dorsal.<br />

En este mom<strong>en</strong>to se ti<strong>en</strong>e la mitad <strong>de</strong> la figura. La malla obt<strong>en</strong>ida es copiada al otro lado<br />

para hacer la malla cerrada y simétrica, y el sistema, posteriorm<strong>en</strong>te, aplica algoritmos<br />

<strong>de</strong> refinami<strong>en</strong>to <strong>de</strong> mallas para eliminar pequeñas aristas y pequeños triángulos.


3.2. Técnicas. 30<br />

Tabla <strong>de</strong> polígonos<br />

Caras Vértices Coor<strong>de</strong>nadas<br />

C1 V1 X1 Y1 Z1<br />

C1 V2 X2 Y2 Z2<br />

C1 V3 X3 Y3 Z3<br />

C2 V1 X1 Y1 Z1<br />

.<br />

C4 V1 X1 Y1 Z1<br />

C4 V2 X2 Y2 Z2<br />

3.2. Técnicas.<br />

3.2.1. Estructuras <strong>de</strong> datos.<br />

Cuadro 3.3: Estructura <strong>de</strong> polígonos.<br />

Todos los esquemas <strong>de</strong> mo<strong>de</strong>lado poligonal repres<strong>en</strong>tan las caras <strong>de</strong> modo explícito <strong>en</strong><br />

sus estructuras <strong>de</strong> datos. El resto <strong>de</strong> información geométrica y topológica pue<strong>de</strong> quedar registrada<br />

<strong>de</strong> muchas formas difer<strong>en</strong>tes, con mayor o m<strong>en</strong>or grado <strong>de</strong> redundancia. Algunas <strong>de</strong> las<br />

estructuras <strong>de</strong> datos más utilizadas se com<strong>en</strong>tan a continuación.<br />

Estructuras basadas <strong>en</strong> polígonos.<br />

En esta repres<strong>en</strong>tación los objetos son una colección <strong>de</strong> polígonos y, a su vez, cada<br />

polígono es una secu<strong>en</strong>cia <strong>de</strong> coor<strong>de</strong>nadas (x,y,z). Esta secu<strong>en</strong>cia pue<strong>de</strong> almac<strong>en</strong>arse<br />

tanto <strong>en</strong> una tabla, don<strong>de</strong> cada polígono t<strong>en</strong>drá un <strong>de</strong>scriptor que lo i<strong>de</strong>ntifique, como<br />

<strong>en</strong> una lista <strong>en</strong>ca<strong>de</strong>nada.<br />

Aunque estas estructuras son muy s<strong>en</strong>cillas, g<strong>en</strong>eran mucha información redundante, ya<br />

que las coor<strong>de</strong>nadas <strong>de</strong> un mismo vértice se han <strong>de</strong> almac<strong>en</strong>ar tantas veces como caras<br />

converg<strong>en</strong> <strong>en</strong> él. Por lo tanto, <strong>en</strong> los mo<strong>de</strong>los con muchos polígonos (caso normal), no<br />

es la solución idónea.<br />

Estructuras basadas <strong>en</strong> vértices.


3.2. Técnicas. 31<br />

Tabla <strong>de</strong> vértices Tabla <strong>de</strong> caras<br />

Vértices Coor<strong>de</strong>nadas Caras Vértices<br />

V1 X1 Y1 Z1 C1 V1 V2 V3 V4<br />

V2 X2 Y2 Z2 C2 V6 V2 V1 V5<br />

V3 X3 Y3 Z3 C3 V7 V3 V2 V6<br />

V4 X4 Y4 Z4 C4 V8 V4 V3 V7<br />

Cuadro 3.4: Estructura <strong>de</strong> vértices.<br />

Tabla <strong>de</strong> aristas Tabla <strong>de</strong> vértices Tabla <strong>de</strong> caras<br />

Aristas Vértices Vértices Coor<strong>de</strong>nadas Caras Aristas<br />

A1 V1 V2 V1 X1 Y1 Z1 C1 A1 A2 A3 A4<br />

A2 V2 V3 V2 X2 Y2 Z2 C2 A9 A6 A1 A5<br />

A3 V3 V4 V3 X3 Y3 Z3 C3 A10 A7 A2 A6<br />

A4 V4 V1 V4 X4 Y4 Z4 C4 A11 A8 A3 A7<br />

Cuadro 3.5: Estructura <strong>de</strong> aristas.<br />

La redundancia <strong>de</strong>l caso anterior pue<strong>de</strong> ser eliminada si se consi<strong>de</strong>ran los vértices como<br />

elem<strong>en</strong>tos in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes <strong>de</strong> los objetos, y luego son asociados a las caras.<br />

La lista <strong>de</strong> vértices <strong>de</strong> cada cara vi<strong>en</strong>e dada <strong>en</strong> un ór<strong>de</strong>n consist<strong>en</strong>te, <strong>de</strong> esta forma se<br />

obti<strong>en</strong>e la ori<strong>en</strong>tación, también llamado vector normal, <strong>de</strong> las caras, información muy<br />

útil a la hora <strong>de</strong> eliminar aristas y caras ocultas.<br />

La información que se <strong>de</strong>ja implícita se calcula cuando se necesita, lo que supone un<br />

aum<strong>en</strong>to <strong>de</strong>l tiempo, mi<strong>en</strong>tras que registrar toda la información <strong>de</strong> manera explícita<br />

produce un consumo mayor <strong>de</strong> espacio. Se <strong>de</strong>be buscar un equilibrio <strong>en</strong>tre espacio y<br />

tiempo <strong>en</strong> función <strong>de</strong> la velocidad <strong>de</strong> cálculo y <strong>de</strong> la memoria disponible.<br />

Estructuras basadas <strong>en</strong> aristas.<br />

Con este método, las caras <strong>de</strong> los objetos se repres<strong>en</strong>tan como secu<strong>en</strong>cias <strong>de</strong> aristas que<br />

forman un camino cerrado.


3.2. Técnicas. 32<br />

En la tabla <strong>de</strong> aristas se indica la ori<strong>en</strong>tación <strong>de</strong> cada arista, por ejemplo, la arista A1 se<br />

consi<strong>de</strong>ra ori<strong>en</strong>tada <strong>de</strong>s<strong>de</strong> el vértice V1 hasta el V2.<br />

• Estructura winged-edge.<br />

Las estructuras simples hac<strong>en</strong> que el número <strong>de</strong> cálculos sea muy elevado. Por<br />

ejemplo, calcular qué dos caras compart<strong>en</strong> una arista para verificar la integridad<br />

<strong>de</strong>l mo<strong>de</strong>lo requiere obt<strong>en</strong>er la lista <strong>de</strong> aristas <strong>de</strong> todas las caras.<br />

Las estructuras sofisticadas, int<strong>en</strong>tan incluir la mayor cantidad <strong>de</strong> información<br />

posible <strong>de</strong>ntro <strong>de</strong> un volum<strong>en</strong> <strong>de</strong> datos razonable y <strong>de</strong> rápido acceso, para disminuir<br />

el costo <strong>de</strong> los cálculos. Entre las estructuras más elaboradas se <strong>en</strong>cu<strong>en</strong>tra la<br />

conocida como winged-edge, <strong>de</strong>sarrollada por Baumgart <strong>en</strong> 1972.<br />

A<strong>de</strong>más <strong>de</strong> registrar información sobre las aristas y las caras, también quedan<br />

indicados los bucles (caminos cerrados) que forman las aristas al ser recorridas <strong>en</strong><br />

s<strong>en</strong>tido positivo y negativo.<br />

◦ Creación <strong>de</strong> la estructura winged-edge.<br />

Cada arista separa dos caras. Dada una arista a, y si<strong>en</strong>do C ′ , C ′′ las caras que<br />

separa; si se recorre la arista <strong>en</strong> el s<strong>en</strong>tido <strong>de</strong> ori<strong>en</strong>tación positivo, al llegar al<br />

vértice se <strong>en</strong>cu<strong>en</strong>tra la arista a ′ que pert<strong>en</strong>ece a la cara C ′ ; si se recorre a <strong>en</strong><br />

el s<strong>en</strong>tido negativo, se <strong>en</strong>cu<strong>en</strong>tra a ′′ , que pert<strong>en</strong>ece a C ′′ .<br />

El s<strong>en</strong>tido <strong>de</strong> recorrido y las aristas localizadas al llegar a los vértices constituy<strong>en</strong><br />

la información sobre los bucles que se almac<strong>en</strong>an.<br />

Para crear la tabla <strong>de</strong> aristas:<br />

1. Se establece un s<strong>en</strong>tido <strong>de</strong> giro consist<strong>en</strong>te, por ejemplo, el s<strong>en</strong>tido <strong>de</strong><br />

giro <strong>de</strong> las agujas <strong>de</strong>l reloj consi<strong>de</strong>rando los objetos <strong>de</strong>s<strong>de</strong> el exterior.<br />

2. Por cada arista a i , se busca el par <strong>de</strong> caras C a ,C b que separa y se establece<br />

el s<strong>en</strong>tido <strong>de</strong> giro positivo <strong>de</strong> la arista. Es indifer<strong>en</strong>te el s<strong>en</strong>tido elegido,<br />

aunque una vez establecido <strong>de</strong>be permanecer fijo. En este caso, imaginemos<br />

que el recorrido positivo vi<strong>en</strong>e dado por (V a , V b ), que indica que la<br />

arista se recorre <strong>en</strong> s<strong>en</strong>tido positivo cuando va <strong>de</strong>l vértice V a al V b .


3.2. Técnicas. 33<br />

Tabla <strong>de</strong> vértices Tabla <strong>de</strong> aristas Tabla <strong>de</strong> caras<br />

Vértices Coor<strong>de</strong>nadas Aristas Vértices R+ R- Caras Inicio<br />

V1 X1 Y1 Z1 A1 V1 V2 A2 A5 C1 A1<br />

V2 X2 Y2 Z2 A2 V2 V3 A6 A3 C2 .<br />

V3 . A3 . . . .<br />

Cuadro 3.6: Estructura <strong>de</strong> winged-edge.<br />

3. Se recorre cada arista a i <strong>en</strong> s<strong>en</strong>tido positivo hasta llegar al vértice. Entonces<br />

se elige una arista <strong>de</strong> la cara C a o <strong>de</strong> la cara C b , <strong>de</strong> forma que el<br />

recorrido por la nueva arista sea <strong>en</strong> el s<strong>en</strong>tido <strong>de</strong> recorrido consist<strong>en</strong>te <strong>de</strong><br />

la cara (<strong>en</strong> este caso el s<strong>en</strong>tido <strong>de</strong> las agujas <strong>de</strong>l reloj). Sólo una <strong>de</strong> las<br />

aristas cumple esa condición, que será la que se almac<strong>en</strong>e <strong>en</strong> la estructura<br />

(puntero R+).<br />

4. Se vuelve a recorrer la arista a i , pero esta vez <strong>en</strong> s<strong>en</strong>tido negativo. Cuando<br />

se llega al vértice opuesto, se aplica el mismo criterio que anteriorm<strong>en</strong>te,<br />

y la arista seleccionada quedará indicada por el puntero R-.<br />

Se pue<strong>de</strong> ver un ejemplo <strong>de</strong> esta estructura <strong>en</strong> la figura 3.8 y <strong>en</strong> la tabla <strong>de</strong> la<br />

estructura <strong>de</strong> winged-edge, que se pres<strong>en</strong>tan los datos.<br />

V1<br />

A1<br />

A4<br />

A5<br />

V2<br />

C1<br />

A2<br />

V3<br />

C2<br />

C4<br />

A6<br />

A3<br />

C3<br />

V4<br />

Figura 3.8: Ejemplo <strong>de</strong> estructura winged-edge.<br />

Cuantización.


3.2. Técnicas. 34<br />

En estas repres<strong>en</strong>taciones se almac<strong>en</strong>an gran<strong>de</strong>s volúm<strong>en</strong>es <strong>de</strong> datos que a veces llegan<br />

a ser inmanejables, por lo tanto hay alternativas <strong>de</strong> compresión <strong>de</strong> datos como la<br />

cuantización.<br />

La cuantización es una técnica <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to con pérdida <strong>de</strong> información que<br />

consiste <strong>en</strong> el uso <strong>de</strong> tipos <strong>de</strong> datos con m<strong>en</strong>or precisión.<br />

En casos extremos se hac<strong>en</strong> uso <strong>de</strong> ”compresiones salvajes” como por ejemplo pasar<br />

<strong>de</strong> float o doble a unsigned short (16 bits típicam<strong>en</strong>te) o unsigned bytes (8 bits).<br />

Para la cuantización se utiliza:<br />

V comprimido = T amT ipoComp ∗ ((V original − Min)/(Max − Min))<br />

P rec = (Max − Min)/T amT ipoComp<br />

V <strong>de</strong>scompr = P rec ∗ V comprimido + Min<br />

Se pue<strong>de</strong> ver con este ejemplo:<br />

Altura <strong>de</strong> un individuo con codificación <strong>de</strong> 1 byte.<br />

V comprimido = 255 ∗ ((X − 1,0)/(2,20 − 1,0))<br />

P rec = (2,20 − 1,0)/255 = 0,0047m<br />

X = 0,0047 ∗ V comprimido<br />

Si por ejemplo X = 1,82...:<br />

V comprimido = 255 ∗ (0,82/1,20) = 174<br />

X = 0,0047 ∗ 174 = 1,818<br />

3.2.2. Transformaciones lineales <strong>en</strong> 3D.<br />

Las características geométricas que <strong>de</strong>fin<strong>en</strong> un cuerpo <strong>en</strong> el espacio tridim<strong>en</strong>sional, pue<strong>de</strong>n<br />

ser alteradas mediante transformaciones 3D. Un tipo particular <strong>de</strong> éstas, son las transformaciones<br />

lineales que, una vez aplicadas, manti<strong>en</strong><strong>en</strong> el paralelismo <strong>en</strong>tre las aristas que<br />

forman cada objetoy que se estudiarán a continuación.<br />

Se com<strong>en</strong>zará con el estudio <strong>de</strong> algunos conceptos previos para su correcta <strong>de</strong>finición:


3.2. Técnicas. 35<br />

<strong>Sistema</strong>s <strong>de</strong> refer<strong>en</strong>cia.<br />

Para visualizar los objetos, se <strong>de</strong>b<strong>en</strong> situar <strong>en</strong> un sistema universal <strong>de</strong> refer<strong>en</strong>cia (SUR),<br />

<strong>en</strong> el cual el eje Z pue<strong>de</strong> t<strong>en</strong>er dos ori<strong>en</strong>taciones, la situada hacia el observador y la que<br />

no. Todas las coor<strong>de</strong>nadas <strong>de</strong> los distintos objetos han <strong>de</strong> estar dadas <strong>en</strong> uno <strong>de</strong> estos<br />

sistemas <strong>de</strong> refer<strong>en</strong>cia.<br />

Transformaciones lineales y matrices.<br />

En la Informática Gráfica suele utilizarse notación matricial para escribir las transformaciones<br />

lineales <strong>de</strong> los objetos. La conv<strong>en</strong>ción más utilizada es que el vértice<br />

que se va a transformar se exprese mediante el vector horizontal multiplicado por la<br />

matriz <strong>de</strong> transformación.<br />

Por ejemplo, <strong>en</strong> la expresión (x ′ , y ′ ) = (x, y) ∗ M, la matriz correspondi<strong>en</strong>te a la transformación<br />

lineal sería M, el punto inicial sería (x, y) y el resultado, es <strong>de</strong>cir, la ubicación<br />

<strong>de</strong>l punto finalm<strong>en</strong>te <strong>en</strong> el sistema <strong>de</strong> refer<strong>en</strong>cia sería (x ′ , y ′ ).<br />

Si se aplica un conjunto <strong>de</strong> transformaciones a un mo<strong>de</strong>lo poligonal <strong>de</strong> n vértices,<br />

t<strong>en</strong>drá que aplicarse el conjunto <strong>de</strong> transformaciones lineales a los n vértices <strong>de</strong>l polígono.<br />

En g<strong>en</strong>eral, se aplican las transformaciones a todos los puntos significativos <strong>de</strong> los objetos.<br />

<strong>Sistema</strong>s homogéneos.<br />

Se ti<strong>en</strong>e el vector <strong>de</strong> un punto inicial V = (x, y), el vector <strong>de</strong> translación T = (t x , t y )<br />

y las coor<strong>de</strong>nadas resultantes <strong>de</strong>spués <strong>de</strong> la traslación se calculan como se ve <strong>en</strong> la<br />

ecuación 3.6:<br />

V ′ = V + T (x ′ , y ′ ) = (x, y) + (t x , t y ) (3.6)<br />

Esto permite ser ext<strong>en</strong>dido a cualquier dim<strong>en</strong>sión.<br />

Si S y R se supon<strong>en</strong> matrices <strong>de</strong> escalado y giro, respectivam<strong>en</strong>te, vemos <strong>en</strong> la ecuación<br />

3.7:


3.2. Técnicas. 36<br />

V ′ = V ∗ S<br />

V ′ = V ∗ R (3.7)<br />

Las traslaciones lineales <strong>de</strong> los puntos <strong>en</strong> el espacio se efectúan sumando, mi<strong>en</strong>tras que<br />

los giros y los cambios <strong>de</strong> escala se consigu<strong>en</strong> multiplicando. Esta heterog<strong>en</strong>eidad <strong>en</strong><br />

los operadores, supone un problema a la hora <strong>de</strong> g<strong>en</strong>eralizar los procesos <strong>de</strong> transformación,<br />

para evitarlo, se utilizan sistemas <strong>de</strong> refer<strong>en</strong>cia homogéneos.<br />

Un sistema <strong>de</strong> coor<strong>de</strong>nadas homogéneo es el resultante <strong>de</strong> añadir una dim<strong>en</strong>sión extra<br />

a un sistema <strong>de</strong> refer<strong>en</strong>cia dado. De esta forma los vectores homogéneos <strong>de</strong> los puntos<br />

inicial y final serán V = (x, y, w) y V ′ = (x ′ , y ′ , w). Por s<strong>en</strong>cillez w = 1.<br />

En un sistema homogéneo, las traslaciones lineales <strong>de</strong> los puntos <strong>de</strong>l plano quedarían<br />

expresadas como <strong>en</strong> la ecuación 3.8, si se utiliza una matriz <strong>de</strong> traslación T apropiada<br />

como se ve <strong>en</strong> la ecuación 3.9.<br />

V ′ = V ∗ T (3.8)<br />

⎡<br />

T =<br />

⎢<br />

⎣<br />

1 0 0<br />

0 1 0<br />

t x t y 1<br />

⎤<br />

⎥<br />

⎦<br />

(3.9)<br />

De esta forma es fácil comprobar vi<strong>en</strong>do las ecuaciones 3.8 y 3.9, que (x ′ , y ′ , 1) =<br />

(x, y, 1) ∗ T .<br />

Composición <strong>de</strong> matrices.<br />

La composición <strong>de</strong> matrices, matemáticam<strong>en</strong>te, es la multiplicación <strong>de</strong> matrices <strong>en</strong> un<br />

or<strong>de</strong>n <strong>de</strong>terminado.<br />

Se ti<strong>en</strong>e el punto V = (x, y, z, 1) <strong>de</strong>l espacio, expresado <strong>en</strong> un sistema homogéneo. Al<br />

hacer:


3.2. Técnicas. 37<br />

(x ′ , y ′ , z ′ , 1) = (x, y, z, 1) ∗ T<br />

(x ′′ , y ′′ , z ′′ , 1) = (x ′ , y ′ , z ′ , 1) ∗ R (3.10)<br />

Se consigue mover primero el vértice V y luego girarlo. Se pue<strong>de</strong> llegar al mismo<br />

resultado final multiplicando el vector V por la matriz resultante <strong>de</strong> componer T y R,<br />

si<strong>en</strong>do M = T ∗ R se ti<strong>en</strong>e que:<br />

(x ′′ , y ′′ , z ′′ , 1) = (x, y, z, 1) ∗ M (3.11)<br />

El or<strong>de</strong>n <strong>en</strong> el que se multiplican las matrices es importante ya que el producto <strong>en</strong>tre<br />

matrices no es conmutativo aunque sí es asociativo.<br />

Si<strong>en</strong>do M n la matriz compuesta o neta resultante <strong>de</strong> la composición <strong>de</strong> las matrices T 1 ,<br />

R, T 2 y S, es <strong>de</strong>cir M n = T 1 ∗ R ∗ T 2 ∗ S, al multiplicar un punto por esta matriz se<br />

obti<strong>en</strong>e el mismo resultado que si se multiplicase sucesivam<strong>en</strong>te por las matrices que<br />

compon<strong>en</strong> M n .<br />

En 3D, la expresión g<strong>en</strong>eral <strong>de</strong> la matriz neta sería:<br />

⎡<br />

⎢<br />

⎣<br />

a 11 a 12 a 13 0<br />

a 21 a 22 a 23 0<br />

a 31 a 32 a 33 0<br />

d x d y d z 0<br />

⎤<br />

⎥<br />

⎦<br />

(3.12)<br />

Don<strong>de</strong> la submatriz A i,j repres<strong>en</strong>ta el cambio <strong>de</strong> escala y la rotación neta y D i el vector<br />

<strong>de</strong> <strong>de</strong>splazami<strong>en</strong>to neto.<br />

Transformaciones lineales tridim<strong>en</strong>sionales.<br />

• Traslación.<br />

La traslación <strong>de</strong> un objeto consiste <strong>en</strong> moverlo <strong>en</strong> una dirección <strong>de</strong>terminada.


3.2. Técnicas. 38<br />

En 3D, el sistema <strong>de</strong> refer<strong>en</strong>cia homogéneo t<strong>en</strong>drá cuatro dim<strong>en</strong>siones, por lo que<br />

la traslación <strong>de</strong>l punto V = (x, y, z, 1) quedará indicada como V = (x ′ , y ′ , z ′ , 1) =<br />

(x, y, z, 1) ∗ T si<strong>en</strong>do la matriz <strong>de</strong> traslación:<br />

⎡<br />

T =<br />

⎢<br />

⎣<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 1 0<br />

t x t y t z 0<br />

⎤<br />

⎥<br />

⎦<br />

(3.13)<br />

Para realizar la traslación inversa a la efectuada mediante la matriz T , se ha <strong>de</strong><br />

aplicar la matriz inversa T −1 , que se obti<strong>en</strong>e cambiando el signo <strong>de</strong>l vector <strong>de</strong><br />

traslación.<br />

⎡<br />

T −1 =<br />

⎢<br />

⎣<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 1 0<br />

−t x −t y −t z 0<br />

⎤<br />

⎥<br />

⎦<br />

(3.14)<br />

• Escalado.<br />

D<strong>en</strong>tro <strong>de</strong>l espacio <strong>de</strong> refer<strong>en</strong>cia, los objetos pue<strong>de</strong>n modificar su tamaño relativo<br />

<strong>en</strong> un eje, <strong>en</strong> dos o <strong>en</strong> los tres. Para ello se ha <strong>de</strong> aplicar la matriz <strong>de</strong> escalado, que<br />

vi<strong>en</strong>e dada por:<br />

⎡<br />

S =<br />

⎢<br />

⎣<br />

s x 0 0 0<br />

0 s y 0 0<br />

0 0 s z 0<br />

0 0 0 1<br />

⎤<br />

⎥<br />

⎦<br />

(3.15)<br />

De esta forma, el cambio <strong>de</strong> escala <strong>de</strong>l punto V = (x, y, z, 1) <strong>en</strong> el sistema homogéneo<br />

quedará indicado por V ′ = (x ′ , y ′ , z ′ , 1) = (x, y, z, 1) ∗ S.


3.2. Técnicas. 39<br />

Cuando s x = s y = s z , el cambio <strong>de</strong> escala es uniforme; <strong>en</strong> cualquier otro caso el<br />

cambio <strong>de</strong> escala será no uniforme.<br />

Para obt<strong>en</strong>er el cambio <strong>de</strong> escala inverso al realizado aplicando la matriz S, basta<br />

con multiplicar los puntos finales por la matriz inversa <strong>de</strong> S, es <strong>de</strong>cir S −1 , que<br />

sería:<br />

⎡<br />

S −1 =<br />

⎢<br />

⎣<br />

1<br />

s x<br />

0 0 0<br />

0<br />

1<br />

s y<br />

0 0<br />

0 0<br />

1<br />

s z<br />

0<br />

0 0 0 1<br />

⎤<br />

⎥<br />

⎦<br />

(3.16)<br />

Los cambios <strong>de</strong> escala no uniformes <strong>de</strong>forman los objetos, por lo que pue<strong>de</strong>n resultar<br />

interesantes (siempre que se realic<strong>en</strong> <strong>de</strong> forma controlada); por el contrario, el escalado<br />

uniforme no <strong>de</strong>forma los objetos, por lo que suele utilizarse con más frecu<strong>en</strong>cia.<br />

Rotación.<br />

Se quiere rotar el punto V = (x, y, z) un ángulo α alre<strong>de</strong>dor <strong>de</strong>l eje Z para obt<strong>en</strong>er V ′<br />

como V ′ = (x ′ , y ′ , z ′ , 1) = V ∗ R z , si<strong>en</strong>do R z :<br />

⎡<br />

R z =<br />

⎢<br />

⎣<br />

cos(α) s<strong>en</strong>(α) 0 0<br />

−s<strong>en</strong>(α) cos(α) 0 0<br />

0 0 1 0<br />

0 0 0 1<br />

⎤<br />

⎥<br />

⎦<br />

(3.17)<br />

Como se pue<strong>de</strong> ver, la coor<strong>de</strong>nada Z permanece constante ya que se rota el vértice<br />

alre<strong>de</strong>dor <strong>de</strong> este eje.<br />

De la misma manera se <strong>de</strong>rivan las ecuaciones <strong>de</strong> giro alre<strong>de</strong>dor <strong>de</strong>l eje X e Y .<br />

⎡<br />

⎤<br />

1 0 0 0<br />

0 cos(α) s<strong>en</strong>(α) 0<br />

R x =<br />

⎢ 0 −s<strong>en</strong>(α) cos(α) 0<br />

⎥<br />

⎣<br />

⎦<br />

0 0 0 1<br />

(3.18)


3.2. Técnicas. 40<br />

⎡<br />

R y =<br />

⎢<br />

⎣<br />

cos(α) 0 −s<strong>en</strong>(α) 0<br />

0 1 0 0<br />

s<strong>en</strong>(α) 0 cos(α) 0<br />

0 0 0 1<br />

⎤<br />

⎥<br />

⎦<br />

(3.19)<br />

Al girar con R x la coor<strong>de</strong>nada permanece constante <strong>en</strong> X, <strong>de</strong> igual forma, utilizando<br />

R y , el giro no varía <strong>en</strong> Y .<br />

Para <strong>de</strong>shacer el giro, se ha <strong>de</strong> girar el punto un ángulo −α. La matriz <strong>de</strong> giro inversa<br />

es la misma, pero con el ángulo cambiado <strong>de</strong> signo. Otra forma rápida <strong>de</strong> obt<strong>en</strong>er R −1<br />

es <strong>en</strong>contrando la matriz traspuesta <strong>de</strong> R (intercambiando filas por columnas), es <strong>de</strong>cir,<br />

R −1 = R T .<br />

3.2.3. Tecnologías.<br />

En este apartado, se estudiarán las tecnologías utilizadas <strong>en</strong> MOSKIS 3D, que son:<br />

Librería gráfica Op<strong>en</strong>GL.<br />

Herrami<strong>en</strong>ta <strong>de</strong> producción 3D Bl<strong>en</strong><strong>de</strong>r.<br />

L<strong>en</strong>guaje <strong>de</strong> programación Python.<br />

API Bl<strong>en</strong><strong>de</strong>r-Python.<br />

3.2.3.1. Op<strong>en</strong>GL.<br />

Introducción.<br />

Op<strong>en</strong>GL es una biblioteca gráfica <strong>de</strong>sarrollada por Silicon Graphics Incorporated (SGI).<br />

Sus siglas significan ”Op<strong>en</strong> Graphics Library”.<br />

• Es el estándar más ext<strong>en</strong>dido.<br />

Op<strong>en</strong>GL fue el primer <strong>en</strong>torno <strong>de</strong> <strong>de</strong>sarrollo portable para aplicaciones gráficas<br />

2D y 3D. Des<strong>de</strong> su aparición <strong>en</strong> 1992, se ha ido ext<strong>en</strong>di<strong>en</strong>do rápidam<strong>en</strong>te y <strong>en</strong><br />

una gran variedad <strong>de</strong> plataformas.


3.2. Técnicas. 41<br />

Op<strong>en</strong>GL incorpora un amplio sistema <strong>de</strong> r<strong>en</strong><strong>de</strong>rizado, mapeado <strong>de</strong> texturas y efectos<br />

especiales <strong>en</strong>tre otras funciones.<br />

• Alta calidad visual y funcional.<br />

Cualquier aplicación 3D requiere una repres<strong>en</strong>tación visual <strong>de</strong> alta calidad y un<br />

alto r<strong>en</strong>dimi<strong>en</strong>to que es proporcionado por Op<strong>en</strong>GL. Op<strong>en</strong>GL está difundido <strong>en</strong><br />

gran variedad <strong>de</strong> mercados, como pue<strong>de</strong>n ser CAD/CAM/CAE, <strong>en</strong>tret<strong>en</strong>imi<strong>en</strong>to,<br />

medicina, realidad virtual, etc.<br />

• V<strong>en</strong>tajas ori<strong>en</strong>tadas al <strong>de</strong>sarrollo.<br />

◦ Estándar: Un consorcio in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te, la Op<strong>en</strong>GL Architecture Review Board,<br />

revisa sus especificaciones. Es la única biblioteca gráfica verda<strong>de</strong>rm<strong>en</strong>te abierta<br />

y un estándar multiplataforma.<br />

◦ Estable: Las nuevas incorporaciones <strong>en</strong> la especificación están muy controladas<br />

y las actualizaciones propuestas se anuncian para poner <strong>en</strong> sobreaviso a<br />

los <strong>de</strong>sarrolladores. Los requisitos <strong>de</strong> compatibilidad con versiones anteriores<br />

se aseguran <strong>de</strong> que las utilida<strong>de</strong>s anteriores no llegu<strong>en</strong> a ser obsoletas.<br />

◦ Fiabilidad y portabilidad: Todas las aplicaciones Op<strong>en</strong>GL produc<strong>en</strong> resultados<br />

visuales consist<strong>en</strong>tes <strong>en</strong> cualquier software que soporte Op<strong>en</strong>GL in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te<br />

<strong>de</strong>l sistema operativo y el sistema <strong>de</strong> v<strong>en</strong>tanas.<br />

◦ Contínuo <strong>de</strong>sarrollo: Compatible con los últimos avances <strong>en</strong> hardware <strong>de</strong>bido<br />

al contínuo crecimi<strong>en</strong>to <strong>de</strong>l API.<br />

◦ Escalable: Op<strong>en</strong>GL está <strong>de</strong>stinado tanto para PC’s, estaciones <strong>de</strong> trabajo o<br />

supercomputadores. Como consecu<strong>en</strong>cia, las aplicaciones son escalables a<br />

cualquier clase <strong>de</strong> máquina que el <strong>de</strong>sarrollador elija.<br />

◦ Fácil <strong>de</strong> utilizar: Op<strong>en</strong>GL está bi<strong>en</strong> estructurado con un diseño intuitivo. Normalm<strong>en</strong>te<br />

son necesarias pocas líneas <strong>de</strong> código. Se han <strong>de</strong>sarrollado una serie<br />

<strong>de</strong> ext<strong>en</strong>siones que facilitan el uso y aña<strong>de</strong>n funcionalida<strong>de</strong>s a las básicas,<br />

como GLU, GLUT y GUI. El programador por otro lado, no t<strong>en</strong>drá que preocuparse<br />

<strong>de</strong> las especificaciones <strong>de</strong>l hardware ya que Op<strong>en</strong>GL se <strong>en</strong>carga <strong>de</strong><br />

esto.


3.2. Técnicas. 42<br />

◦ Bi<strong>en</strong> docum<strong>en</strong>tado: Una amplia docum<strong>en</strong>tación y ejemplos están disponibles.<br />

Mo<strong>de</strong>lo conceptual <strong>de</strong> Op<strong>en</strong>GL: ”cámara sintética”<br />

El concepto <strong>de</strong> ”cámara sintética” que utiliza Op<strong>en</strong>GL, significa imaginar un objeto <strong>en</strong><br />

una <strong>de</strong>terminada posición y filmarlo con una cámara.<br />

En la figura 3.9 aparec<strong>en</strong> los elem<strong>en</strong>tos <strong>de</strong>scritos a continuación:<br />

• C<strong>en</strong>tro <strong>de</strong> proyección: es el punto <strong>de</strong>s<strong>de</strong> el que el observador mira el mundo, o<br />

<strong>de</strong>s<strong>de</strong> el que una cámara lo está filmando.<br />

• Plano <strong>de</strong> proyección: proyección <strong>de</strong>l mundo. Se pasa <strong>de</strong> coor<strong>de</strong>nadas <strong>de</strong>l mundo<br />

(coor<strong>de</strong>nadas 3D) a coor<strong>de</strong>nadas <strong>de</strong>l plano (coor<strong>de</strong>nadas 2D).<br />

Mundo<br />

Posición <strong>de</strong> la cámara<br />

(c<strong>en</strong>tro <strong>de</strong> proyección)<br />

Plano <strong>de</strong> proyección 2D<br />

Figura 3.9: Mo<strong>de</strong>lo conceptual <strong>de</strong> Op<strong>en</strong>GL.<br />

Este mo<strong>de</strong>lo conceptual se compone <strong>de</strong> tres elem<strong>en</strong>tos principalm<strong>en</strong>te:<br />

• Luces: para po<strong>de</strong>r ver el mundo. Las luces se <strong>de</strong>fin<strong>en</strong> principalm<strong>en</strong>te por su localización,<br />

int<strong>en</strong>sidad y color.<br />

• Cámara: es nuestro ”punto <strong>de</strong> vista” <strong>de</strong>l mundo <strong>en</strong> cada mom<strong>en</strong>to. La cámara se<br />

caracteriza por su posición, ori<strong>en</strong>tación y apertura o ”campo visual”, es <strong>de</strong>cir, la<br />

cantidad <strong>de</strong> mundo que la cámara podrá ver y por tanto, proyectar.<br />

• Objetos: que form<strong>en</strong> parte <strong>de</strong> nuestro mundo, y que por tanto sean filmados por la<br />

cámara. Los objetos t<strong>en</strong>drán como características el color, material, etc.


3.2. Técnicas. 43<br />

Pipeline gráfico.<br />

El pipeline gráfico es el proceso que sigu<strong>en</strong> los elem<strong>en</strong>tos <strong>de</strong>l mo<strong>de</strong>lo conceptual hasta<br />

que se muestra un resultado por pantalla (véase figura 3.10).<br />

Objeto<br />

geométrico<br />

3D<br />

Transformación<br />

<strong>de</strong>l mo<strong>de</strong>lo<br />

Coor<strong>de</strong>nadas <strong>de</strong>l<br />

mundo.<br />

Clipping<br />

Coor<strong>de</strong>nadas <strong>de</strong><br />

la cámara.<br />

Luces<br />

Proyección D.I.S.C Rasterización<br />

Imag<strong>en</strong> final<br />

Figura 3.10: Pipeline gráfico.<br />

• Objeto geométrico: el mundo 3D se va a componer <strong>de</strong> primitivas geométricas,<br />

como puntos, líneas, polígonos, etc.<br />

• Transformación <strong>de</strong>l mo<strong>de</strong>lo: se <strong>en</strong>carga <strong>de</strong> rotar, trasladar y escalar cualquier objeto<br />

para que sea dibujado por pantalla. Op<strong>en</strong>GL realiza las funciones, multiplicando<br />

la geometría por varias matrices, cada una para cada proceso.<br />

• Coor<strong>de</strong>nadas <strong>de</strong>l mundo: la cámara es in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te <strong>de</strong>l mundo. Las coor<strong>de</strong>nadas<br />

<strong>de</strong> la geometría <strong>de</strong>l mundo 3D (vértices) son in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes <strong>de</strong> las coor<strong>de</strong>nadas<br />

<strong>de</strong> la cámara.<br />

• Luces: se iluminan los objetos para ser vistos <strong>de</strong>s<strong>de</strong> la cámara.<br />

• Coor<strong>de</strong>nadas <strong>de</strong> cámara: <strong>de</strong>spués <strong>de</strong> aplicar luces, ya vemos la esc<strong>en</strong>a, con lo cual<br />

ya sabemos la localización <strong>de</strong> los objetos con respecto <strong>de</strong> la cámara.<br />

• Clipping: oculta aquello que está <strong>en</strong> el mundo pero que no se <strong>de</strong>sea <strong>en</strong> ese mom<strong>en</strong>to.<br />

Es como recortar parte <strong>de</strong> la esc<strong>en</strong>a.<br />

• Proyección: paso <strong>de</strong> coor<strong>de</strong>nadas 3D <strong>de</strong>l mundo a las coor<strong>de</strong>nadas 2D <strong>de</strong>l plano<br />

<strong>de</strong> proyección.


3.2. Técnicas. 44<br />

• D.I.S.C: Device In<strong>de</strong>p<strong>en</strong><strong>de</strong>nt Scre<strong>en</strong> Coordinates. Tras proyectar la imag<strong>en</strong>, t<strong>en</strong>emos<br />

coor<strong>de</strong>nadas in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tes <strong>de</strong>l dispositivo. Antes <strong>de</strong> asociar la imag<strong>en</strong> con<br />

algún tipo <strong>de</strong> pantalla, se <strong>en</strong>cu<strong>en</strong>tran los datos <strong>de</strong> la imag<strong>en</strong> <strong>en</strong> el frame buffer, que<br />

es la zona <strong>de</strong> memoria <strong>de</strong>stinada a almac<strong>en</strong>arla. Según la resolución <strong>de</strong> la pantalla<br />

sea mayor o m<strong>en</strong>or, un punto <strong>de</strong>l mundo 3D ocupará más o m<strong>en</strong>os píxeles.<br />

• Rasterizacion: consiste <strong>en</strong> asociar los puntos a píxeles <strong>en</strong> la pantalla.<br />

• Imag<strong>en</strong>: ya se ti<strong>en</strong>e la imag<strong>en</strong> final y concluye el proceso.<br />

El pipeline gráfico pue<strong>de</strong> ser implem<strong>en</strong>tado <strong>de</strong> forma hardware o software. En máquinas<br />

<strong>en</strong> las que se realiza via software es más l<strong>en</strong>to que <strong>en</strong> máquinas <strong>de</strong>dicadas.<br />

Op<strong>en</strong>GL ti<strong>en</strong>e como v<strong>en</strong>taja, que funciona in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> la implem<strong>en</strong>tación<br />

<strong>de</strong>l pipeline, únicam<strong>en</strong>te se conseguirá más o m<strong>en</strong>os velocidad <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong>l sistema.<br />

Tipos <strong>de</strong> funciones gráficas.<br />

• Funciones primitivas: <strong>de</strong>fin<strong>en</strong> objetos como puntos, líneas o polígonos.<br />

• Funciones atributivas: <strong>de</strong>fin<strong>en</strong> características <strong>de</strong> lo que se dibuja, como por ejemplo<br />

el color.<br />

• Funciones <strong>de</strong> visualizacion: posición <strong>de</strong> la cámara, proyección <strong>de</strong> la geometría,<br />

clipping, etc.<br />

• Funciones <strong>de</strong> transformación: girar, rotar, escalar, etc.<br />

• Funciones <strong>de</strong> <strong>en</strong>trada: g<strong>en</strong>eración <strong>de</strong> aplicaciones interactivas con uso típico <strong>de</strong><br />

teclado y ratón por parte <strong>de</strong>l usuario.<br />

• Funciones <strong>de</strong> control: para interactuar <strong>en</strong> red, <strong>en</strong> aplicaciones cli<strong>en</strong>te-servidor, o<br />

manejar un sistema operativo multitarea.<br />

Transformaciones: multiplicación y postmultiplicación.<br />

A partir <strong>de</strong> lo que se veía <strong>en</strong> el apartado <strong>de</strong> Transformaciones lineales 3D, exist<strong>en</strong> dos<br />

conv<strong>en</strong>ciones <strong>en</strong> cuanto al uso <strong>de</strong> transformaciones geométricas:


3.2. Técnicas. 45<br />

• Robótica/Ing<strong>en</strong>iería: se utilizan los vectores <strong>de</strong> tipo fila, que se multiplican por<br />

la izquierda. Las matrices se or<strong>de</strong>nan <strong>de</strong> izquierda a <strong>de</strong>recha según el or<strong>de</strong>n <strong>de</strong><br />

transformaciones (véase ecuación 3.20). A esto se le llama premultiplicación <strong>de</strong><br />

matrices.<br />

(P f) = (P i) [T 1] [T 2] [T 3] [T 4] (3.20)<br />

Dón<strong>de</strong> P f es el punto <strong>de</strong> transformación final y P i el inicial.<br />

• Gráficos: los puntos se toman como vectores <strong>en</strong> columna que se multiplican a las<br />

matrices por la <strong>de</strong>recha, y a<strong>de</strong>más, el or<strong>de</strong>n <strong>de</strong> las transformaciones, <strong>de</strong> primera<br />

a última a aplicar, es <strong>de</strong> <strong>de</strong>recha a izquierda (véase ecuación 3.21). A esto se le<br />

llama postmultiplicación <strong>de</strong> matrices.<br />

[P f] = [T 4] [T 3] [T 2] [T 1] [P i] (3.21)<br />

Dón<strong>de</strong> P f es el punto <strong>de</strong> transformación final y P i el inicial.<br />

Cabe recordar la importancia <strong>de</strong>l or<strong>de</strong>n <strong>de</strong> multiplicación <strong>de</strong> las matrices, ya que como<br />

se com<strong>en</strong>taba anteriorm<strong>en</strong>te, el producto <strong>de</strong> matrices no es conmutativo.<br />

Op<strong>en</strong>GL, y cualquier paquete gráfico, conti<strong>en</strong>e lo que se llama CTM, que es la matriz <strong>de</strong><br />

transformación actual. Esta matriz guarda la información sobre todas las matrices que se han<br />

ido acumulando. Cualquier vértice que pase por el pipeline gráfico, será multiplicado por esta<br />

matriz para su transformación.<br />

En Op<strong>en</strong>GL, la CTM se compone <strong>de</strong> dos matrices:<br />

Matriz <strong>de</strong> transformación.<br />

Matriz <strong>de</strong> mo<strong>de</strong>lado.<br />

Ambas son concat<strong>en</strong>adas y su producto crea la CTM.


3.2. Técnicas. 46<br />

En primer lugar, lo primero que <strong>de</strong>be hacerse <strong>en</strong> Op<strong>en</strong>GL es cargar la matriz i<strong>de</strong>ntidad,<br />

que es el elem<strong>en</strong>to neutro <strong>de</strong> la multiplicación <strong>de</strong> matrices, y con esto me aseguro que<br />

comi<strong>en</strong>zo sin ninguna transformación anterior. A continuación, se pue<strong>de</strong>n ir acumulando<br />

transformaciones sucesivas (véase código fu<strong>en</strong>te 3.1).<br />

Código fu<strong>en</strong>te 3.1: Transformaciones <strong>en</strong> Op<strong>en</strong>GL.<br />

glMatrixMo<strong>de</strong> (GL MODELVIEW)<br />

g l L o a d I d e n t i t y ( )<br />

g l S c a l e f ( sx , sy , sz )<br />

g l T r a n s l a t e f ( tx , ty , t z )<br />

g l R o t a t e f ( angulo , vx , vy , vz )<br />

En Op<strong>en</strong>GL, se utiliza la conv<strong>en</strong>ción <strong>de</strong> gráficos, por lo que la mprimera transformación<br />

que se aplicará será la última que se ha <strong>de</strong>finido.<br />

Cámara: proyecciones.<br />

Los tipos <strong>de</strong> proyecciones planares, son las proyecciones <strong>en</strong> las que se <strong>de</strong>fine una dirección<br />

<strong>de</strong> visión, que va <strong>de</strong>s<strong>de</strong> el observador hasta el objeto a proyectar. La dirección<br />

se establece por medio <strong>de</strong> proyectores (líneas) que cortan el plano <strong>de</strong> proyección g<strong>en</strong>erando<br />

así la imag<strong>en</strong> 2D final.<br />

D<strong>en</strong>tro <strong>de</strong> las proyecciones planares exist<strong>en</strong> distintos tipos:<br />

• Paralelas<br />

◦ Oblicua<br />

◦ Ortográfica<br />

• Perspectiva<br />

◦ 1 punto<br />

◦ 2 puntos<br />

◦ 3 puntos<br />

◦ Proyección ortográfica.


3.2. Técnicas. 47<br />

El c<strong>en</strong>tro <strong>de</strong> proyección, COP, se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> el infinito y las líneas <strong>de</strong> proyección<br />

son perp<strong>en</strong>diculares al plano <strong>de</strong> proyección (véase figura 3.11).<br />

Plano <strong>de</strong> proyección<br />

Figura 3.11: Proyección ortográfica.<br />

Este tipo <strong>de</strong> proyección, no manti<strong>en</strong>e las dim<strong>en</strong>siones reales <strong>de</strong> los objetos<br />

según a la distancia que estén <strong>de</strong> la cámara, por lo tanto el realismo no es total.<br />

Se utiliza sobre todo <strong>en</strong> proyectos <strong>de</strong> ing<strong>en</strong>iería con programas CAD/CAM.<br />

Los parámetros que se especifican son las dim<strong>en</strong>siones <strong>de</strong> la caja (véase figura<br />

3.11 (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). A los valores max y min se les<br />

<strong>de</strong>nomina far o back y near o front.<br />

En op<strong>en</strong>GL queda <strong>de</strong>finida como se ve <strong>en</strong> el código fu<strong>en</strong>te 3.2.<br />

Código fu<strong>en</strong>te 3.2: Proyección ortográfica.<br />

glMatrixMo<strong>de</strong> ( GL PROJECTION )<br />

g l L o a d I d e n t i t y ( )<br />

g l O r t h o ( xmin , xmax , ymin , ymax , zmin , zmax )<br />

◦ Proyección perspectiva <strong>de</strong> un punto.<br />

Las proyecciones perspectiva manti<strong>en</strong><strong>en</strong> las dim<strong>en</strong>siones reales <strong>de</strong> los objetos<br />

según su distancia a la cámara. El efecto visual es mucho más realista que <strong>en</strong>


3.2. Técnicas. 48<br />

la proyección ortográfica.<br />

En la figura 3.12, se ti<strong>en</strong>e un sólo c<strong>en</strong>tro <strong>de</strong> proyección (COP) y todas las<br />

líneas <strong>de</strong> proyección part<strong>en</strong> <strong>de</strong> él. En este caso, las líneas <strong>de</strong> proyección no<br />

son paralelas.<br />

COP<br />

Plano <strong>de</strong> proyección<br />

Figura 3.12: Proyección perspectiva.<br />

Código fu<strong>en</strong>te 3.3: Proyección perspectiva.<br />

glMatrixMo<strong>de</strong> ( GL PROJECTION )<br />

g l L o a d I d e n t i t y ( )<br />

g l u P e r s p e c t i v e (FOV <strong>en</strong> grados , R e l a c i ó n <strong>de</strong> a s p e c t o ,<br />

znear , z f a r )<br />

Según el código fu<strong>en</strong>te 3.3, los parámetros que se ti<strong>en</strong><strong>en</strong> que especificar son:<br />

⋄ FOV <strong>en</strong> grados: es el campo visual. Se refiere al ángulo <strong>de</strong> abertura vertical.<br />

⋄ Relación <strong>de</strong> aspecto: coci<strong>en</strong>te <strong>en</strong>tre la anchura y la altura <strong>de</strong>l plano <strong>de</strong><br />

proyección <strong>de</strong>seado.<br />

⋄ Valores near y far <strong>de</strong>l volúm<strong>en</strong> <strong>de</strong> visualización: mismo significado que<br />

<strong>en</strong> la ortográfica.


3.2. Técnicas. 49<br />

Características <strong>de</strong> la cámara.<br />

Los parámetros que se <strong>de</strong>fin<strong>en</strong> son:<br />

• Posición XYZ: <strong>en</strong> el mundo 3D.<br />

• Ori<strong>en</strong>tación: una vez situada <strong>de</strong>be ori<strong>en</strong>tarse para dón<strong>de</strong> mirar.<br />

• Dirección ”AT”: <strong>de</strong>fine hacia dón<strong>de</strong> mira la cámara, a qué punto concrétam<strong>en</strong>te.<br />

En op<strong>en</strong>GL se haría como se muestra <strong>en</strong> el código fu<strong>en</strong>te 3.4. Se <strong>de</strong>be t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta<br />

que la posición <strong>de</strong> la cámara no ti<strong>en</strong>e nada que ver con las proyecciones, con lo que la<br />

matriz sobre la que trabajamos es la <strong>de</strong> mo<strong>de</strong>lado o transformaciones.<br />

Código fu<strong>en</strong>te 3.4: Situación <strong>de</strong> la cámara.<br />

glMatrixMo<strong>de</strong> (GL MODELVIEW)<br />

gluLookAt ( eyeX , eyeY , eyeZ , atX , atY , atZ , upX ,<br />

upY , upZ )<br />

En el código fu<strong>en</strong>te 3.4, los parámetros a t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta son los sigui<strong>en</strong>tes (véase figura<br />

3.13):<br />

• Coor<strong>de</strong>nadas <strong>de</strong>l ”eye”: posición XYZ dón<strong>de</strong> colocar la cámara <strong>de</strong>ntro <strong>de</strong>l mundo<br />

3D.<br />

• Coor<strong>de</strong>nadas <strong>de</strong>l ”at”: valor <strong>de</strong> XYZ <strong>de</strong>l punto al que queremos que mire la cámara.<br />

• Coor<strong>de</strong>nadas <strong>de</strong>l vector ”up”: es un vector que regula la ori<strong>en</strong>tación. Ha <strong>de</strong> mirar<br />

hacia arriba, si el vector que mira hacie a<strong>de</strong>lante es el que va <strong>de</strong>l ”eye” al ”at”.<br />

3.2.3.2. Bl<strong>en</strong><strong>de</strong>r.<br />

Orig<strong>en</strong>: Inicialm<strong>en</strong>te Bl<strong>en</strong><strong>de</strong>r fue <strong>de</strong>sarrollado como una aplicación propietaria <strong>de</strong> un<br />

estudio <strong>de</strong> animación holandés llamado NeoGeo; Ton Roos<strong>en</strong>daal, su principal autor,<br />

fundó la empresa Not a Number Technologies (NaN) <strong>en</strong> junio <strong>de</strong> 1998 para continuar<br />

con su <strong>de</strong>sarrollo y distribución.


3.2. Técnicas. 50<br />

UP<br />

EYE<br />

AT<br />

Figura 3.13: Situación <strong>de</strong> la cámara.<br />

La compañía llegó a bancarrota <strong>en</strong> el año 2002 y se acordó ofrecer Bl<strong>en</strong><strong>de</strong>r como un<br />

producto <strong>de</strong> libre bajo lic<strong>en</strong>cia GNU GPL a cambio <strong>de</strong> 100.000 C.<br />

El 18 <strong>de</strong> julio <strong>de</strong> 2003, Ton Roos<strong>en</strong>daal creó una fundación sin ánimo <strong>de</strong> lucro para<br />

recoger donaciones; el 7 <strong>de</strong> septiembre se anunció la recaudación completa y el código<br />

fu<strong>en</strong>te se hizo público el 13 <strong>de</strong> octubre.<br />

Bl<strong>en</strong><strong>de</strong>r <strong>en</strong> la industria: Bl<strong>en</strong><strong>de</strong>r ha avanzado mucho <strong>en</strong> muy poco tiempo, la industria<br />

<strong>de</strong> g<strong>en</strong>eración <strong>de</strong> gráficos. Aunque las superproducciones no lo han utilizado aún para<br />

g<strong>en</strong>erar imág<strong>en</strong>es por computador (CGI), hay proyectos actuales que han com<strong>en</strong>zado a<br />

utilizarlo profesionalm<strong>en</strong>te:<br />

• Spi<strong>de</strong>rman 2 <strong>en</strong> esta película se utilizó para hacer una previsualización <strong>de</strong> esc<strong>en</strong>as<br />

(Scre<strong>en</strong>-board test).<br />

• Otros proyectos hechos con la participación <strong>de</strong> diversos usuarios <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, incluido<br />

Toon Roos<strong>en</strong>daal como el cortometraje Elephants Dream, con experim<strong>en</strong>tos<br />

<strong>de</strong> sus capacida<strong>de</strong>s, ext<strong>en</strong>didas gracias a la posibilidad <strong>de</strong> po<strong>de</strong>r editar su<br />

código fu<strong>en</strong>te, aportando esta experi<strong>en</strong>cia a los <strong>de</strong>más usuarios con innovacio-


3.2. Técnicas. 51<br />

nes fundam<strong>en</strong>tales: un sistema <strong>de</strong> control <strong>de</strong> gestos (Morph system), un sistema<br />

<strong>de</strong> composición <strong>de</strong> textura y post producción (Composite), <strong>en</strong>tre otros.<br />

Características:<br />

• Multiplataforma, libre, gratuito y con un tamaño <strong>de</strong> orig<strong>en</strong> realm<strong>en</strong>te pequeño<br />

comparado con otros paquetes 3D, <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong>l sistema operativo <strong>en</strong> el que<br />

se ejecute.<br />

• Proporciona un elevado número <strong>de</strong> tipos <strong>de</strong> objetos 3D como mallas poligonales,<br />

superficies NURBS, curvas <strong>de</strong> Bezier y B-Splines, metasuperficies, fu<strong>en</strong>tes<br />

vectoriales (TrueType, PostScript, Op<strong>en</strong>Type).<br />

• Proporciona superficies <strong>de</strong> subdivisión <strong>de</strong> Catmull-Clark.<br />

• Permite mo<strong>de</strong>lado <strong>de</strong> mallas a nivel <strong>de</strong> vértice, aristas o caras.<br />

• Proporciona operaciones booleanas sobre las mallas y herrami<strong>en</strong>tas <strong>de</strong> edición<br />

como extrusión, biselado, cortado, subdivisión, suavizado, etc.<br />

• Junto con las herrami<strong>en</strong>tas <strong>de</strong> animación se incluye cinemática inversa, <strong>de</strong>formaciones<br />

por armadura o cuadrícula, vértices <strong>de</strong> carga y partículas estáticas y<br />

dinámicas.<br />

• También proporciona edición <strong>de</strong> audio y sincronización <strong>de</strong> ví<strong>de</strong>o.<br />

• Características interactivas para juegos como <strong>de</strong>tección <strong>de</strong> colisiones, recreaciones<br />

dinámicas y lógica.<br />

• Posibilida<strong>de</strong>s <strong>de</strong> r<strong>en</strong><strong>de</strong>rizado interno versátil e integración externa con el pot<strong>en</strong>te<br />

trazador <strong>de</strong> rayos <strong>de</strong> YafRay.<br />

• Bl<strong>en</strong><strong>de</strong>r acepta varios formatos gráficos como TGA, JPG, Iris, SGI, TIFF, etc.<br />

• Ti<strong>en</strong>e un motor <strong>de</strong> juegos 3D integrado, con un sistema lógico y, para más control,<br />

se usa programación <strong>en</strong> Python.<br />

• Permite simulaciones dinámicas para softbodies (orgánicos), partículas y fluídos.<br />

• Se pue<strong>de</strong>n utilizar modificadores apilables, para la aplicación <strong>de</strong> transformación<br />

no <strong>de</strong>structiva sobre mallas.


3.2. Técnicas. 52<br />

• También conti<strong>en</strong>e un sistema <strong>de</strong> partículas estáticas para simular cabellos o pelajes,<br />

al que se han agregado propieda<strong>de</strong>s para lograr texturas realistas.<br />

3.2.3.3. Python.<br />

Python es un l<strong>en</strong>guaje <strong>de</strong> programación interpretado e interactivo, capaz <strong>de</strong> ejecutarse <strong>en</strong><br />

una gran cantidad <strong>de</strong> plataformas. Fue creado por Guido Van Rossum <strong>en</strong> 1990. El nombre<br />

provi<strong>en</strong>e <strong>de</strong> la afición <strong>de</strong> su creador original por los humoristas británicos Monty Python.<br />

Actualm<strong>en</strong>te Python se <strong>de</strong>sarrolla como un proyecto <strong>de</strong> código abierto, administrado por<br />

la Python Software Foundation. La última versión estable <strong>de</strong>l l<strong>en</strong>guaje es la 2.4.3 (Marzo,<br />

2006).<br />

Python es un l<strong>en</strong>guaje interpretado, lo que ahorra un tiempo consi<strong>de</strong>rable <strong>en</strong> el <strong>de</strong>sarrollo<br />

<strong>de</strong>l programa, pues no es necesario compilar ni <strong>en</strong>lazar. El intérprete se pue<strong>de</strong> utilizar <strong>de</strong><br />

modo interactivo, lo que facilita experim<strong>en</strong>tar con características <strong>de</strong>l l<strong>en</strong>guaje, escribir programas<br />

<strong>de</strong>sechables o probar funciones durante el <strong>de</strong>sarrollo <strong>de</strong>l programa. También es una<br />

calculadora muy útil.<br />

Las v<strong>en</strong>tajas más <strong>de</strong>stacadas <strong>de</strong> Python son:<br />

Es un l<strong>en</strong>guaje <strong>de</strong> alto nivel.<br />

Es un l<strong>en</strong>guaje interpretado.<br />

Proporciona Ori<strong>en</strong>tación a Objetos no estricta, es <strong>de</strong>cir, permite programación estructurada.<br />

El código resultante es mucho más reducido.<br />

Ext<strong>en</strong>sible y <strong>en</strong>castrable (l<strong>en</strong>guaje pegam<strong>en</strong>to).<br />

Escribir programas <strong>en</strong> Python requiere mucho m<strong>en</strong>os tiempo que <strong>en</strong> otros l<strong>en</strong>guajes.<br />

No hay difer<strong>en</strong>cias <strong>en</strong> la fiabilidad <strong>de</strong> los programas.<br />

Libre (Lic<strong>en</strong>cia GPL)<br />

Multiplataforma a nivel Software y Hardware.


3.2. Técnicas. 53<br />

3.2.3.4. API Bl<strong>en</strong><strong>de</strong>r-Python.<br />

Des<strong>de</strong> la versión 1.67 <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, se permite la utilización <strong>de</strong>l l<strong>en</strong>guaje <strong>de</strong> programación<br />

Python, para t<strong>en</strong>er acceso a una gran variedad <strong>de</strong> los objetos <strong>de</strong>l software. Proporciona acceso<br />

a gran parte <strong>de</strong> los datos internos y funciones <strong>de</strong>l programa.<br />

Esto abre muchas posibilida<strong>de</strong>s interesantes, dando la posibilidad <strong>de</strong> automatizar tareas<br />

repetitivas y agregar nuevas funcionalida<strong>de</strong>s a Bl<strong>en</strong><strong>de</strong>r.<br />

Las clases que ofrece el API, más utilizadas <strong>en</strong> MOSKIS 3D han sido:<br />

NMesh: esta clase permite la creación <strong>de</strong> mallas 3D <strong>en</strong> la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r y<br />

proporciona funciones para su construcción.<br />

Mesh: esta clase permite la selección <strong>de</strong> una malla 3D ya creada <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r, y su<br />

modificación mediante la mayor parte <strong>de</strong> operadores incluidos <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

Metaball: esta clase permite la g<strong>en</strong>eración <strong>de</strong> metasuperficies y la obt<strong>en</strong>ción y modificación<br />

<strong>de</strong> sus características.


Capítulo 4<br />

Método <strong>de</strong> trabajo<br />

4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario.<br />

4.1.1. Diseño.<br />

4.1.2. Construcción.<br />

4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D.<br />

4.2.1. Obt<strong>en</strong>ción <strong>de</strong>l polígono.<br />

4.2.2. G<strong>en</strong>eración <strong>de</strong>l plano.<br />

4.2.3. Cálculo <strong>de</strong>l perfil <strong>de</strong> alturas.<br />

4.2.4. Creación <strong>de</strong>l objeto final.<br />

4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario.<br />

4.1.1. Diseño.<br />

MOSKIS 3D es un sistema muy fácil <strong>de</strong> usar gracias a su s<strong>en</strong>cilla interfaz <strong>de</strong> usuario.<br />

La interfaz <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r pres<strong>en</strong>ta un área <strong>de</strong> trabajo personalizable, que pue<strong>de</strong> ser dividida<br />

<strong>en</strong> distintas secciones para t<strong>en</strong>er distintas vistas 3D o herrami<strong>en</strong>tas según conv<strong>en</strong>ga.<br />

MOSKIS 3D es un script <strong>en</strong> Python para Bl<strong>en</strong><strong>de</strong>r, por lo tanto, se pue<strong>de</strong> ejecutar <strong>en</strong><br />

cualquiera <strong>de</strong> las secciones <strong>de</strong> la pantalla <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, incluso <strong>en</strong> varias a la vez.<br />

La interfaz <strong>de</strong> MOSKIS 3D trata <strong>de</strong> ajustarse <strong>en</strong> la medida <strong>de</strong> lo posible a la interfaz <strong>de</strong><br />

Bl<strong>en</strong><strong>de</strong>r, <strong>en</strong> cuanto a estilos se refiere, a pesar <strong>de</strong> que el API sólo dispone <strong>de</strong> un pequeño<br />

conjunto <strong>de</strong> controles como botones, sli<strong>de</strong>rs, etc, para configurarla.<br />

54


4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario. 55<br />

Como se pue<strong>de</strong> ver <strong>en</strong> la figura 4.1, la pantalla <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r ha sido dividida <strong>en</strong> dos partes,<br />

<strong>en</strong> la parte superior se ha cargado MOSKIS 3D y <strong>en</strong> la parte inferior <strong>de</strong> la aplicación está la<br />

v<strong>en</strong>tana 3D <strong>de</strong>l mo<strong>de</strong>lador.<br />

Una vez ejecutado MOSKIS 3D, se pue<strong>de</strong> ver que todas las pantallas sigu<strong>en</strong> la misma<br />

estructura <strong>de</strong> diseño, con 3 partes bi<strong>en</strong> difer<strong>en</strong>ciadas:<br />

Área <strong>de</strong> dibujo: Ocupa la mayor parte <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> MOSKIS (sección <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r<br />

<strong>en</strong> la que se está ejecutando nuestro sistema), y a su vez es redim<strong>en</strong>sionable, según el<br />

tamaño <strong>de</strong> la v<strong>en</strong>tana, el área <strong>de</strong> dibujo se redim<strong>en</strong>siona para proporcionar al usuario<br />

más espacio <strong>de</strong> trabajo. Conti<strong>en</strong>e una cuadrícula con los ejes <strong>de</strong> coor<strong>de</strong>nadas X e Y<br />

marcados <strong>en</strong> rojo y ver<strong>de</strong> respectivam<strong>en</strong>te, para facilitar la situación al usuario.<br />

Paneles: A la <strong>de</strong>recha <strong>de</strong> la pantalla, aparecerán unos paneles que variarán <strong>en</strong> función<br />

<strong>de</strong>l estado <strong>de</strong> la ejecución <strong>de</strong>l sistema, mostrando unas opciones u otras según corresponda.<br />

Esta parte <strong>de</strong> la interfaz se divi<strong>de</strong> a su vez <strong>en</strong> dos partes:<br />

• Superior: Aparecerán los controles necesarios para modificar las características<br />

<strong>de</strong>l objeto y para interactuar con la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, es <strong>de</strong>cir, añadir los<br />

objetos finales a la v<strong>en</strong>tana <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r para su posterior tratami<strong>en</strong>to.<br />

• Inferior: Aparecerán los botones que controlan la vuelta atrás o el paso a la sigui<strong>en</strong>te<br />

pantalla y siempre <strong>en</strong> la parte más inferior aparecerá la opción <strong>de</strong> abandonar<br />

la aplicación.<br />

Opciones <strong>de</strong> visualización: En la parte inferior <strong>de</strong> la aplicación, se pue<strong>de</strong> observar un<br />

panel que proporciona dos características principalm<strong>en</strong>te:<br />

• Acce<strong>de</strong>r a la vista <strong>de</strong>tallada <strong>en</strong> la ejecución <strong>de</strong> la aplicación, para ver paso a paso<br />

la creación <strong>de</strong>l objeto y po<strong>de</strong>r modificar algunos parámetros. A lo largo <strong>de</strong> este<br />

docum<strong>en</strong>to siempre se supondrá una ejecución <strong>en</strong> modo vista <strong>de</strong>tallada para po<strong>de</strong>r<br />

acce<strong>de</strong>r a todas las posibilida<strong>de</strong>s que ofrece el sistema.


4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario. 56<br />

• Po<strong>de</strong>r visualizar <strong>de</strong>talles <strong>de</strong>l objeto durante su creación <strong>de</strong> diversas formas, como<br />

por ejemplo, visualizar sus vértices, visualizar los ejes <strong>de</strong> coor<strong>de</strong>nadas situados<br />

<strong>en</strong> el c<strong>en</strong>tro <strong>de</strong>l objeto, etc.<br />

Como se pue<strong>de</strong> ver <strong>en</strong> la figura 4.1, está marcada la opción ”Obj Axes” que muestra los<br />

ejes <strong>de</strong> coor<strong>de</strong>nadas y el c<strong>en</strong>tro <strong>de</strong>l objeto (el objeto dibujado int<strong>en</strong>ta parecerse al logo<br />

<strong>de</strong> Bl<strong>en</strong><strong>de</strong>r).<br />

Figura 4.1: Interfaz <strong>de</strong> MOSKIS 3D.<br />

4.1.2. Construcción.<br />

Área <strong>de</strong> dibujo: El API <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r ti<strong>en</strong>e capacida<strong>de</strong>s sufici<strong>en</strong>tes para diseñar interfaces<br />

que interactú<strong>en</strong> con los objetos y funciones <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, proporcionando elem<strong>en</strong>tos tales<br />

como botones, m<strong>en</strong>ús, etc. En este caso esto no es sufici<strong>en</strong>te, ya que se requiere un área<br />

<strong>de</strong> dibujo <strong>en</strong> la propia v<strong>en</strong>tana <strong>de</strong>l sistema, in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te <strong>de</strong> la v<strong>en</strong>tana 3D que ofrece<br />

Bl<strong>en</strong><strong>de</strong>r, y no se dispone <strong>de</strong> ningún elem<strong>en</strong>to que pueda asemejarse a un área <strong>de</strong> dibujo<br />

con lo cual se tomó la <strong>de</strong>terminación <strong>de</strong> crearla.<br />

Para ello se siguieron dos pasos:<br />

• Dibujado <strong>de</strong>l área: Se utilizó Op<strong>en</strong>GL, <strong>en</strong> su versión <strong>de</strong>l API, es <strong>de</strong>cir, Bl<strong>en</strong><strong>de</strong>r.BGL.<br />

Para su dibujado se utilizaron primitivas tan básicas como el dibujado <strong>de</strong>


4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario. 57<br />

un polígono, para dibujar el rectángulo que <strong>en</strong>marca el área, y líneas, para dibujar<br />

la cuadrícula y los ejes <strong>de</strong> coor<strong>de</strong>nadas.<br />

En el código fu<strong>en</strong>te 4.1, se pue<strong>de</strong> ver un ejemplo <strong>de</strong> las primitivas que se usan <strong>en</strong><br />

Op<strong>en</strong>GL (Bl<strong>en</strong><strong>de</strong>r.BGL) para el dibujado <strong>de</strong> un rectángulo con el color y coor<strong>de</strong>nadas<br />

que recibe por parámetros.<br />

Código fu<strong>en</strong>te 4.1: Rectángulo <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r.BGL<br />

d e f d r a w R e c t a n g l e ( l C o l o r , l C o o r d i n a t e s ) :<br />

g l C o l o r 3 f ( l C o l o r [ 0 ] , l C o l o r [ 1 ] , l C o l o r [ 2 ] ) #R , G, B<br />

# l C o o r d i n a t e s = [ x1 , y1 , x2 , y2 ]<br />

# Esquina s u p e r i o r i z q u i e r d a y e s q u i n a<br />

# i n f e r i o r <strong>de</strong>recha .<br />

g l B e g i n (GL POLYGON) # D i b u j a r un p o l í g o n o<br />

g l V e r t e x 2 f ( l C o o r d i n a t e s [ 0 ] , l C o o r d i n a t e s [ 1 ] )<br />

g l V e r t e x 2 f ( l C o o r d i n a t e s [ 2 ] , l C o o r d i n a t e s [ 1 ] )<br />

g l V e r t e x 2 f ( l C o o r d i n a t e s [ 2 ] , l C o o r d i n a t e s [ 3 ] )<br />

g l V e r t e x 2 f ( l C o o r d i n a t e s [ 0 ] , l C o o r d i n a t e s [ 3 ] )<br />

glEnd ( )<br />

• Funcionalidad: El área <strong>de</strong> dibujo ti<strong>en</strong>e dos funcionalida<strong>de</strong>s principalm<strong>en</strong>te:<br />

◦ Redim<strong>en</strong>sionable: Se ajusta al espacio que t<strong>en</strong>ga la v<strong>en</strong>tana <strong>en</strong> la que se carga<br />

el sistema y se redim<strong>en</strong>siona automáticam<strong>en</strong>te, si esta sección varía a lo largo<br />

<strong>de</strong> la ejecución. Para ello el API proporciona la función GetScre<strong>en</strong>Info(),<br />

<strong>de</strong>l paquete Bl<strong>en</strong><strong>de</strong>r.Window que <strong>de</strong>vuelve la información <strong>de</strong> las v<strong>en</strong>tanas <strong>de</strong><br />

Bl<strong>en</strong><strong>de</strong>r <strong>en</strong> un diccionario, e i<strong>de</strong>ntifica a cada v<strong>en</strong>tana mediante un id. La<br />

función GetAreaId(), <strong>de</strong>vuelve el i<strong>de</strong>ntificador <strong>de</strong> la v<strong>en</strong>tana <strong>en</strong> la que se ha<br />

cargado el sistema, con lo cual se pue<strong>de</strong> acce<strong>de</strong>r a la información <strong>de</strong> dicha<br />

v<strong>en</strong>tana, como por ejemplo, a las esquinas que la limitan.<br />

Las esquinas límite se obt<strong>en</strong>drían como (Xmin,Ymin,Xmax,Ymax), permit<strong>en</strong><br />

la localización <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> MOSKIS 3D y su tamaño, para po<strong>de</strong>r<br />

redim<strong>en</strong>sionar el área <strong>de</strong> dibujo.


4.1. G<strong>en</strong>eración <strong>de</strong> la interfaz <strong>de</strong> usuario. 58<br />

◦ Interactiva: El usuario dibujará inicialm<strong>en</strong>te la forma 2D que <strong>de</strong>see mo<strong>de</strong>lar,<br />

mediante un ratón o tabla digitalizadora, y también podrá, mediante el uso <strong>de</strong>l<br />

ratón, escalar la figura (<strong>de</strong>splazando la rueda c<strong>en</strong>tral), <strong>de</strong>splazarla (pulsando<br />

el botón <strong>de</strong>recho) y rotarla (pulsando la rueda c<strong>en</strong>tral).<br />

En el código fu<strong>en</strong>te 4.2, se pue<strong>de</strong> ver un ejemplo <strong>de</strong> las primitivas <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.BGL<br />

que permit<strong>en</strong> realizar las operaciones <strong>de</strong> <strong>de</strong>splazami<strong>en</strong>to, rotación y<br />

escalado.<br />

Código fu<strong>en</strong>te 4.2: Desplazami<strong>en</strong>to,rotación y escalado.<br />

# T r a s l a d a una d i s t a n c i a dx <strong>en</strong> e l e j e x , e t c .<br />

g l T r a n s l a t e f ( dx , dy , dz )<br />

# Rota un ángulo rx <strong>en</strong> e l e j e x , e t c .<br />

g l R o t a t e f ( rx , 1 , 0 , 0 )<br />

g l R o t a t e f ( ry , 0 , 1 , 0 )<br />

g l R o t a t e f ( rz , 0 , 0 , 1 )<br />

# E s c a l a sx <strong>en</strong> e l e j e x , e t c .<br />

g l S c a l e d ( sx , sy , sz )<br />

Paneles: Los paneles situados a la <strong>de</strong>recha <strong>en</strong> todas las pantallas <strong>de</strong>l sistema están siempre<br />

compuestos <strong>de</strong> dos elem<strong>en</strong>tos:<br />

• Cont<strong>en</strong>edor: Los cont<strong>en</strong>edores son dibujados mediante primitivas <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.BGL<br />

para el dibujado <strong>de</strong> polígonos, a<strong>de</strong>más <strong>de</strong> la función Text(string,fontsize) <strong>de</strong>l módulo<br />

Bl<strong>en</strong><strong>de</strong>r.Draw que dibuja el texto <strong>de</strong> los cont<strong>en</strong>edores.<br />

• Controles: Los controles que aparec<strong>en</strong> <strong>de</strong>limitados por los cont<strong>en</strong>edores com<strong>en</strong>tados<br />

anteriorm<strong>en</strong>te, son proporcionados por el API <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r-Python y se <strong>en</strong>cu<strong>en</strong>tran<br />

<strong>en</strong> el módulo Bl<strong>en</strong><strong>de</strong>r.Draw. Los tipos <strong>de</strong> controles utilizados han sido:<br />

◦ Button: botón normal <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

◦ Sli<strong>de</strong>r: barra <strong>de</strong>slizante para selección <strong>de</strong> valores.<br />

◦ Toggle: botón booleano.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 59<br />

Opciones <strong>de</strong> visualización: El panel <strong>de</strong> opciones <strong>de</strong> visualización situado <strong>en</strong> la parte inferior<br />

<strong>de</strong> la v<strong>en</strong>tana, está compuesto, al igual que <strong>en</strong> el caso <strong>de</strong> los paneles anteriorm<strong>en</strong>te<br />

<strong>de</strong>scritos, <strong>de</strong> un panel cont<strong>en</strong>edor y <strong>de</strong> controles, que <strong>en</strong> este caso siempre son <strong>de</strong> tipo<br />

Toggle, para activar y <strong>de</strong>sactivar opciones <strong>de</strong> visualización a lo largo <strong>de</strong> la ejecución <strong>de</strong><br />

la aplicación MOSKIS 3D.<br />

4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D.<br />

4.2.1. Obt<strong>en</strong>ción <strong>de</strong>l polígono.<br />

4.2.1.1. Creación <strong>de</strong>l polígono.<br />

El usuario, con ayuda <strong>de</strong>l ratón, realiza una silueta mediante un trazo libre sobre el área<br />

<strong>de</strong> dibujo. El trazo <strong>de</strong>be ser cerrado y no producir intersecciones consigo mismo, ya<br />

que <strong>en</strong> este caso el sistema fallaría.<br />

A partir <strong>de</strong> este trazo, el sistema g<strong>en</strong>era un polígono cerrado mediante la conexión <strong>de</strong>l<br />

punto <strong>de</strong> comi<strong>en</strong>zo y <strong>de</strong>l punto final <strong>de</strong>l trazo (véase figura 4.2).<br />

Figura 4.2: Contorno creado por el usuario.<br />

El sistema g<strong>en</strong>era el polígono con un nivel <strong>de</strong> <strong>de</strong>talle <strong>de</strong>terminado, que no es el máximo<br />

(el máximo sería con todos los puntos que <strong>de</strong>tecta <strong>de</strong> las coor<strong>de</strong>nadas <strong>de</strong>l usuario mi<strong>en</strong>-


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 60<br />

tras realiza el contorno), pero ofrece la posibilidad al usuario <strong>de</strong> modificar este nivel <strong>de</strong><br />

<strong>de</strong>talle mediante una barra <strong>de</strong> <strong>de</strong>slizami<strong>en</strong>to (véase figura 4.3).<br />

El nivel <strong>de</strong> <strong>de</strong>talle indica un umbral <strong>de</strong> distancia <strong>en</strong>tre un vértice y otro, si se sobrepasa<br />

esa distancia se formará una nueva arista <strong>en</strong>tre esos dos vértices, si no se sobrepasa, ese<br />

vértice será ignorado y se proce<strong>de</strong>rá a evaluar el sigui<strong>en</strong>te. Evita la creación <strong>de</strong> vértices<br />

innecesarios.<br />

Figura 4.3: Creación <strong>de</strong>l polígono.<br />

En la figura 4.3, se pue<strong>de</strong> observar que está seleccionado por <strong>de</strong>fecto un nivel <strong>de</strong> <strong>de</strong>talle<br />

<strong>de</strong> 8 unida<strong>de</strong>s, <strong>en</strong> un intervalo permitido <strong>de</strong> 1 a 10 unida<strong>de</strong>s, si<strong>en</strong>do 10, el máximo nivel<br />

<strong>de</strong> <strong>de</strong>talle. Siempre que se aum<strong>en</strong>ta el <strong>de</strong>talle, se t<strong>en</strong>drán más vértices y aum<strong>en</strong>tará el<br />

coste computacional <strong>en</strong> fases posteriores, pero también se t<strong>en</strong>drá más exactitud <strong>en</strong> el<br />

objeto obt<strong>en</strong>ido. El nivel <strong>de</strong> <strong>de</strong>talle que aparece por <strong>de</strong>fecto es un equilibrio <strong>en</strong>tre <strong>de</strong>talle<br />

y coste.<br />

Se pue<strong>de</strong> observar <strong>en</strong> las figuras 4.3 y 4.4, resaltados <strong>en</strong> amarillo el número <strong>de</strong> vértices<br />

<strong>de</strong> la silueta. En la figura 4.4, se muestra la difer<strong>en</strong>cia <strong>en</strong> número <strong>de</strong> vértices <strong>en</strong>tre los<br />

niveles <strong>de</strong> <strong>de</strong>talle.<br />

En algunas ocasiones, disminuir el número <strong>de</strong> vértices aum<strong>en</strong>ta el r<strong>en</strong>dimi<strong>en</strong>to y la<br />

disminuición <strong>de</strong> <strong>de</strong>talle no es relevante.<br />

El polígono g<strong>en</strong>erado servirá como silueta <strong>de</strong>l objeto 3D que se quiere obt<strong>en</strong>er.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 61<br />

Figura 4.4: Polígonos con niveles <strong>de</strong> <strong>de</strong>talle 9 y 10.<br />

4.2.1.2. Añadir el polígono a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

El sistema permite, una vez creado el polígono añadir éste a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, permiti<strong>en</strong>do<br />

así el dibujado <strong>de</strong> contornos y siluetas 2D libres <strong>de</strong>s<strong>de</strong> MOSKIS 3D (véase código<br />

fu<strong>en</strong>te 4.3 y figura 4.5).<br />

Código fu<strong>en</strong>te 4.3: Añadir contorno<br />

# E s t e método aña<strong>de</strong> e l c o n t o r n o p i n t a d o por e l u s u a r i o a l a<br />

# v e n t a n a 3D <strong>de</strong> b l e n d e r .<br />

d e f addContour ( oPolygon ) :<br />

l E d g e L i s t = oPolygon . g e t E d g e s ( )<br />

f R e d u c t = 2 0 . 0<br />

oMesh = B l e n d e r . NMesh . New ( ) # Se crea l a malla<br />

# Se aña<strong>de</strong>n l o s v é r t i c e s , s ó l o se aña<strong>de</strong>n una<br />

# vez , es d e c i r , s ó l o se aña<strong>de</strong> e l v é r t i c e o r i g e n <strong>de</strong> cada<br />

# a r i s t a , porque s i se aña<strong>de</strong> e l v é r t i c e d e s t i n o también ,<br />

# s e r á e l mismo que e l v é r t i c e o r i g e n <strong>de</strong> l a a r i s t a s i g u i e n t e<br />

# con l o c u a l l o s dos v é r t i c e s e s t a r á n d u p l i c a d o s .<br />

f o r i i n l E d g e L i s t :<br />

o O r i g i n V e r t e x = i . getVO ( )<br />

o B l e n d e r O r i g i n V e r t e x =


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 62<br />

B l e n d e r . NMesh . Vert ( f l o a t ( o O r i g i n V e r t e x . getX ( ) /<br />

f R e d u c t ) ,<br />

f l o a t ( o O r i g i n V e r t e x . getY ( ) / f R e d u c t ) ,<br />

f l o a t ( o O r i g i n V e r t e x . getZ ( ) / f R e d u c t ) )<br />

oMesh . v e r t s . app<strong>en</strong>d ( o B l e n d e r O r i g i n V e r t e x )<br />

# Se aña<strong>de</strong>n l a s a r i s t a s a l a malla<br />

iEdge = 0<br />

w h i l e iEdge < l e n ( oMesh . v e r t s ) −1:<br />

oMesh . addEdge ( oMesh . v e r t s [ iEdge ] , oMesh . v e r t s [ iEdge + 1 ] )<br />

iEdge +=1<br />

oMesh . addEdge ( oMesh . v e r t s [ 0 ] ,<br />

oMesh . v e r t s [ l e n ( oMesh . v e r t s ) −1])<br />

# Se aña<strong>de</strong> l a malla a l a v e n t a n a 3D <strong>de</strong> B l e n d e r<br />

PutRaw ( oMesh , ” Contour O b j e c t ” )<br />

E objeto NMesh permite la creación <strong>de</strong> mallas, <strong>en</strong> este caso mediante vértices y aristas<br />

t<strong>en</strong>emos construido nuestro polígono <strong>en</strong> la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

Figura 4.5: Polígono añadido a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 63<br />

Se hace una conversión <strong>de</strong>s<strong>de</strong> las coor<strong>de</strong>nadas <strong>de</strong>l sistema MOSKIS 3D, al <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, que<br />

se realiza dividi<strong>en</strong>do cada coor<strong>de</strong>nada <strong>de</strong> MOSKIS 3D <strong>en</strong>tre fReduct = 20.0. Esta conversión<br />

es realizada para igualar el tamaño ya que las coor<strong>de</strong>nadas utilizadas <strong>en</strong> el área <strong>de</strong> dibujo<br />

<strong>de</strong>l script, equival<strong>en</strong> aproximadam<strong>en</strong>te a 1/fReduct <strong>en</strong> la pantalla 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, al iniciar la<br />

aplicación.<br />

4.2.1.3. Estructuras <strong>de</strong> datos.<br />

Para esta parte <strong>de</strong> la ejecución se ti<strong>en</strong><strong>en</strong> los objetos mostrados <strong>en</strong> la figura 4.6.<br />

Figura 4.6: Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l polígono.<br />

mVertex: un vértice es un punto <strong>de</strong>finido por las coor<strong>de</strong>nadas <strong>en</strong> los ejes X, Y y Z.<br />

mEdge: una arista es un segm<strong>en</strong>to <strong>de</strong>limitado por dos vértices, por el vértice orig<strong>en</strong> y<br />

el vértice <strong>de</strong>stino, y caracterizada por un tipo. Una arista pue<strong>de</strong> ser externa (arista <strong>de</strong>l<br />

polígono) o interna (arista g<strong>en</strong>erada posteriorm<strong>en</strong>te <strong>en</strong> la triangularización).<br />

mPolygon: un polígono es un conjunto <strong>de</strong> aristas. En el diagrama <strong>de</strong> clases <strong>de</strong> la figura<br />

4.6, se ve que la clase polígono ti<strong>en</strong>e a<strong>de</strong>más, una lista <strong>de</strong> vértices. Esta <strong>de</strong>cisión provoca<br />

información redundante, ya que las aristas ya conti<strong>en</strong><strong>en</strong> los vértices que las forman,<br />

pero <strong>de</strong> esta forma se agilizan los cálculos.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 64<br />

Como se estudiaba <strong>en</strong> el apartado <strong>de</strong> Técnicas: Estructuras <strong>de</strong> datos, la estructura aplicada<br />

<strong>en</strong> MOSKIS 3D ha sido una estructura basada <strong>en</strong> aristas.<br />

No se ha aplicado la estructura Winged-Edge porque es muy costosa su construcción, y al<br />

ser necesarias modificaciones muy rápidas <strong>en</strong> los datos <strong>de</strong> la malla, no es conv<strong>en</strong>i<strong>en</strong>te su uso<br />

<strong>en</strong> este caso.<br />

4.2.2. G<strong>en</strong>eración <strong>de</strong>l plano.<br />

4.2.2.1. Triangulación básica.<br />

Para la g<strong>en</strong>eración <strong>de</strong>l plano a partir <strong>de</strong>l polígono, se lleva a cabo inicialm<strong>en</strong>te un algoritmo<br />

<strong>de</strong> triangulación básica, que consiste <strong>en</strong> la g<strong>en</strong>eración <strong>de</strong> triángulos para cubrir la<br />

superficie <strong>de</strong>limitada por el polígono (véase algoritmo 1).<br />

Algoritmo 1 Triangulación básica.<br />

while número <strong>de</strong> aristas <strong>de</strong>l plano > 3 do<br />

I<strong>de</strong>ntificar vértices convexos<br />

for cada vértice convexo do<br />

Evaluar posible arista interna<br />

if arista válida th<strong>en</strong><br />

else<br />

Crear triángulo<br />

Añadir triángulo al plano<br />

Reducir polígono<br />

Dividir el polígono <strong>en</strong> dos.<br />

Aplicar triangulación a cada subpolígono<br />

<strong>en</strong>d if<br />

<strong>en</strong>d for<br />

<strong>en</strong>d while<br />

Inicialm<strong>en</strong>te se ti<strong>en</strong>e una lista <strong>de</strong> triángulos vacía (un plano es una lista <strong>de</strong> triángulos).<br />

El algoritmo se ejecuta hasta que el polígono que<strong>de</strong> reducido a un triángulo, que será el<br />

último triángulo que se añada a la lista y quedará concluida la triangulación básica.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 65<br />

En cada iteración <strong>de</strong>l algoritmo, se realizan las tareas que se <strong>de</strong>scrib<strong>en</strong> a continuación:<br />

I<strong>de</strong>ntificar vértices convexos.<br />

Se proce<strong>de</strong> a la i<strong>de</strong>ntificación <strong>de</strong> cuatro vértices convexos <strong>en</strong> el polígono, que serán los<br />

situados <strong>en</strong> los extremos <strong>de</strong> éste.<br />

Es fácil <strong>de</strong>mostrar que estos vértices son convexos. Por ejemplo, el vértice situado<br />

más a la <strong>de</strong>recha es convexo, porque si no lo fuese, habría otro vértice situado más a la<br />

<strong>de</strong>recha que él. De esta forma queda asegurado, al igual que <strong>en</strong> este caso con los <strong>de</strong>más,<br />

que los vértices <strong>de</strong> los extremos son convexos.<br />

Para la i<strong>de</strong>ntificación <strong>de</strong> estos vértices se hace un análisis <strong>de</strong> coor<strong>de</strong>nadas <strong>de</strong> cada uno<br />

y se seleccionan cuatro:<br />

• El vértice con coor<strong>de</strong>nada (X, Y min , Z), será el vértice inferior.<br />

• El vértice con coor<strong>de</strong>nada (X, Y max , Z), será el vértice superior.<br />

• El vértice con coor<strong>de</strong>nada (X min , Y, Z), será el vértice situado más a la izquierda.<br />

• El vértice con coor<strong>de</strong>nada (X max , Y, Z), será el vértice situado más a la <strong>de</strong>recha.<br />

Evaluar posible arista interna.<br />

Para cada vértice convexo, se evalúa si sería posible trazar una arista que formase un<br />

triángulo con las dos aristas que comparte el vértice convexo, es <strong>de</strong>cir, si sería posible<br />

formar un triángulo con este vértice y los dos vértices que le ro<strong>de</strong>an.<br />

Para que el trazado <strong>de</strong> la arista interna sea válido, se ti<strong>en</strong>e que comprobar que esta<br />

arista interna no cortará a ninguna otra arista <strong>de</strong>l polígono, es <strong>de</strong>cir, no existirá ningún<br />

vértice <strong>de</strong>l polígono <strong>de</strong>ntro <strong>de</strong>l área <strong>de</strong>l triángulo a construir, ya que <strong>en</strong> este caso la<br />

triangulación sería errónea (véase figura 4.8).<br />

El área <strong>de</strong> un triángulo se calcula como resultado <strong>de</strong>l <strong>de</strong>terminante que se muestra <strong>en</strong><br />

la ecuación 4.1.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 66<br />

A = 1 2<br />

∣<br />

1 1 1<br />

∣ ∣∣∣∣∣∣∣∣∣∣<br />

X 1 X 2 X 3<br />

(4.1)<br />

Y 1 Y 2 Y 3<br />

La función que calcula el área <strong>de</strong> un triángulo se ve <strong>en</strong> el código fu<strong>en</strong>te 4.4.<br />

Código fu<strong>en</strong>te 4.4: Cálculo <strong>de</strong>l área <strong>de</strong> un triángulo.<br />

# Área d e l t r i á n g u l o <strong>de</strong> v é r t i c e s oV1 , oV2 , oV3<br />

d e f t r i a n g l e A r e a ( oV1 , oV2 , oV3 ) :<br />

iX1 = oV1 . getX ( )<br />

iX2 = oV2 . getX ( )<br />

iX3 = oV3 . getX ( )<br />

iY1 = oV1 . getY ( )<br />

iY2 = oV2 . getY ( )<br />

iY3 = oV3 . getY ( )<br />

fArea = f l o a t ( abs ( ( iX2 * iY3+iX3 * iY1+iX1 *iY2−<br />

iY1 *iX2−iX1 *iY3−iY2 * iX3 ) / 2 ) )<br />

r e t u r n fArea<br />

Para calcular si exist<strong>en</strong> vértices <strong>de</strong>ntro <strong>de</strong>l triángulo que se quiere formar se sigue el<br />

algoritmo 2.<br />

v1<br />

v1<br />

V<br />

V<br />

v2<br />

v3<br />

v2<br />

v3<br />

Figura 4.7: Subtriángulos formados.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 67<br />

Algoritmo 2 Vértices <strong>de</strong>ntro <strong>de</strong>l triángulo.<br />

for all vértices <strong>de</strong>l polígono do<br />

Calcular el área <strong>de</strong>l triángulo.<br />

Calcular el área <strong>de</strong> los subtriángulos formados por el vértice a evaluar con cada dos<br />

vértices <strong>de</strong>l triángulo (véase figura 4.7).<br />

if Suma <strong>de</strong> áreas <strong>de</strong> los subtriángulos ≤ Área <strong>de</strong>l triángulo th<strong>en</strong><br />

else<br />

El vértice está <strong>de</strong>ntro <strong>de</strong>l triángulo.<br />

El vértice no está <strong>de</strong>ntro.<br />

<strong>en</strong>d if<br />

<strong>en</strong>d for<br />

Dividir el polígono <strong>en</strong> dos.<br />

En el caso <strong>en</strong> el que existan vértices <strong>de</strong>l polígono <strong>de</strong>ntro <strong>de</strong>l triángulo que se pret<strong>en</strong><strong>de</strong><br />

formar, se calcula el vértice interno al triángulo que esté más cerca <strong>de</strong>l vértice convexo,<br />

y se traza una arista interna <strong>de</strong>s<strong>de</strong> el vértice convexo hasta el vértice interno. El polígono<br />

queda dividido <strong>en</strong> dos (ver figura 4.8).<br />

Una vez dividido se aplica a cada subpolígono el algoritmo <strong>de</strong> triangulación.<br />

Superior<br />

Izquierda<br />

Inferior<br />

Derecha<br />

P1<br />

P2<br />

Figura 4.8: División <strong>de</strong>l polígono.<br />

Crear triángulo y reducir polígono.<br />

Si la arista interna es válida, se aña<strong>de</strong> el triángulo a la lista <strong>de</strong> triángulos que van configurando<br />

el plano.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 68<br />

Se elimina el vértice convexo con el que hemos formado el triángulo y se g<strong>en</strong>era un<br />

nuevo polígono a partir <strong>de</strong> los vértices <strong>de</strong> los extremos <strong>de</strong> las aristas que comparte.<br />

Como se ve <strong>en</strong> la figura 4.9, el triángulo formado es el que se ve <strong>en</strong> color amarillo y el<br />

polígono resultante <strong>de</strong> la reducción se ve <strong>en</strong> color blanco.<br />

Figura 4.9: Creación <strong>de</strong>l triángulo y reducción <strong>de</strong>l polígono.<br />

En la figura 4.10 se pue<strong>de</strong> ver el resultado <strong>de</strong> la triangulación básica para nuestro ejemplo<br />

con MOSKIS 3D.<br />

Figura 4.10: Triangulación básica.<br />

4.2.2.2. Optimización basada <strong>en</strong> Delaunay.<br />

Para asegurar que la superficie <strong>de</strong>l polígono que<strong>de</strong> repartida mediante triángulos, <strong>de</strong> la<br />

forma más homogénea posible, se realiza una optimización sobre la triangulación básica realizada<br />

(véase figura 4.11).


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 69<br />

v11<br />

Ilegal<br />

v13 = v23<br />

v12 = v22<br />

Flip<br />

Legal<br />

v21<br />

Figura 4.11: Evaluación <strong>de</strong> arista y flip <strong>de</strong> arista ilegal.<br />

Dados dos triángulos t 1 y t 2 que compart<strong>en</strong> una arista.<br />

Sean (v 11 , v 12 , v 13 ) y (v 21 , v 22 , v 23 ) los vértices <strong>de</strong> t 1 y t 2 respectivam<strong>en</strong>te (véase figura<br />

4.11).<br />

Sean (α 1 , β 1 , γ 1 ) y (α 2 , β 2 , γ 2 ), los ángulos <strong>de</strong> t 1 y t 2 respectivam<strong>en</strong>te.<br />

Los triángulos resultantes <strong>de</strong> girar la arista interna, por la opuesta <strong>en</strong> el cuadrilátero formado<br />

por los dos triángulos que compart<strong>en</strong> dicha arista, serían t ′ 1 y t ′ 2, con vértices (v 11, ′ v 12, ′ v 13)<br />

′<br />

y (v 21, ′ v 22, ′ v 23) ′ que <strong>en</strong> este caso se correspon<strong>de</strong>rían con (v 11 , v 13 , v 21 ) y (v 21 , v 22 , v 11 ) (ver<br />

figura 4.11), y con ángulos (α 1, ′ β 1, ′ γ 1) ′ y (α 2, ′ β 2, ′ γ 2).<br />

′<br />

Una arista es legal, si se cumple la ecuación 4.2, <strong>en</strong> caso contrario es ilegal.<br />

(min(α 1 , β 1 , γ 1 ) ≥ min(α 1, ′ β 1, ′ γ 1)) ′ ∧ (min(α 2 , β 2 , γ 2 ) ≥ min(α 2, ′ β 2, ′ γ 2)) ′ (4.2)<br />

Si una arista es ilegal, se produce un giro, también llamado flip <strong>de</strong> la arista interna, como<br />

se ve <strong>en</strong> la figura 4.11, sustituy<strong>en</strong>do los triángulos t 1 y t 2 <strong>de</strong>l plano, por t ′ 1 y t ′ 2.<br />

Los triángulos g<strong>en</strong>erados a partir <strong>de</strong> la triangulación, se pue<strong>de</strong>n catalogar como:<br />

Triángulos T: compuestos <strong>de</strong> dos aristas externas.<br />

Triángulos S: compuestos <strong>de</strong> una arista externa.<br />

Triángulos J: compuestos <strong>de</strong> tres aristas internas.<br />

En la figura 4.12 se pue<strong>de</strong> ver el resultado <strong>de</strong> la optimización <strong>en</strong> nuestro ejemplo con<br />

MOSKIS 3D.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 70<br />

Figura 4.12: Optimización por Delaunay.<br />

4.2.2.3. Añadir el plano a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

El sistema permite, una vez creado el plano, añadir éste a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r,<br />

permiti<strong>en</strong>do así obt<strong>en</strong>er planos con siluetas <strong>de</strong> formas libres automáticam<strong>en</strong>te (véase figura<br />

4.13) y pudi<strong>en</strong>do darles <strong>de</strong>s<strong>de</strong> Bl<strong>en</strong><strong>de</strong>r un tratami<strong>en</strong>to posterior (véase figura 4.14).<br />

En este caso, al igual que <strong>en</strong> el caso <strong>en</strong> el que se añadía un polígono, se crea un objeto<br />

NMesh, pero a difer<strong>en</strong>cia <strong>de</strong>l anterior, no se aña<strong>de</strong>n aristas, sino los vértices <strong>de</strong> cada triángulo<br />

(sólo una vez, para no crear vértices repetidos). Posteriorm<strong>en</strong>te se crea, una cara con los<br />

vértices <strong>de</strong> cada triángulo, que se aña<strong>de</strong> posteriorm<strong>en</strong>te a la malla.<br />

En la porción <strong>de</strong> código 4.5, se pue<strong>de</strong> ver como se agrega una cara a la malla.<br />

Código fu<strong>en</strong>te 4.5: Creación <strong>de</strong> una cara.<br />

# Para cada t r i á n g u l o , se crea una cara , con l o s v é r t i c e s<br />

# a ñ a d i d o s <strong>de</strong> l a malla , ya que se t i e n e n s u s p o s i c i o n e s <strong>en</strong><br />

# t r i a n g l e s M e s h , y una v e z a ñ a d i dos l o s t r e s v é r t i c e s a l a<br />

# cara , se aña<strong>de</strong> l a cara a l a malla<br />

f o r i i n l T r i a n g l e s M e s h :<br />

oFace = Face ( )<br />

f o r j i n i :<br />

oFace . v . app<strong>en</strong>d ( oMesh . v e r t s [ j ] )


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 71<br />

oMesh . f a c e s . app<strong>en</strong>d ( oFace )<br />

En la figura 4.13 se pue<strong>de</strong> ver el resultado <strong>de</strong> añadir un plano a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r<br />

y <strong>en</strong> la figura 4.14 se ve el resultado <strong>de</strong>spués <strong>de</strong> aplicar la operación <strong>de</strong> extrusión.<br />

Figura 4.13: Plano añadido a la v<strong>en</strong>tana 3D.<br />

Figura 4.14: Plano añadido a la v<strong>en</strong>tana 3D y extruido posteriorm<strong>en</strong>te.<br />

4.2.2.4. Estructuras <strong>de</strong> datos.<br />

En esta parte <strong>de</strong> la ejecución participan los objetos que se muestran <strong>en</strong> la figura 4.15<br />

mTriangle: un triángulo es un polígono <strong>de</strong> tres lados que a su vez ti<strong>en</strong>e un atributo tipo,<br />

que indica si el polígono es <strong>de</strong> tipo T, S o J.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 72<br />

Figura 4.15: Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l plano.<br />

mPlane: un plano es una lista <strong>de</strong> triángulos.<br />

4.2.3. Cálculo <strong>de</strong>l perfil <strong>de</strong> alturas.<br />

4.2.3.1. Detección <strong>de</strong> la espina dorsal.<br />

Una vez g<strong>en</strong>erado el plano se proce<strong>de</strong> a <strong>de</strong>tectar la espina dorsal <strong>de</strong> éste. Para ello se<br />

sigu<strong>en</strong> los sigui<strong>en</strong>tes pasos:<br />

1. Se <strong>de</strong>tectan los puntos <strong>de</strong> conexión <strong>de</strong> la espina dorsal, que serán los puntos principales<br />

<strong>de</strong>l eje mediano <strong>de</strong> la forma inicial.<br />

2. La unión mediante aristas <strong>de</strong> estos puntos <strong>de</strong> conexión me dan la espina dorsal <strong>de</strong>l plano<br />

que repres<strong>en</strong>ta la silueta <strong>de</strong>l objeto.<br />

El algoritmo 3 <strong>de</strong>scribe este proceso.<br />

El punto c<strong>en</strong>tral <strong>de</strong> un triángulo se calcula como el punto <strong>de</strong> intersección <strong>de</strong> dos <strong>de</strong> sus<br />

bisectrices (véase figura 4.16 y algoritmo 4).<br />

Una bisectriz <strong>de</strong> un triángulo es el segm<strong>en</strong>to que une uno <strong>de</strong> sus vértices con el punto medio<br />

<strong>de</strong> la arista opuesta a este vértice. Para calcular el punto <strong>de</strong> intersección <strong>de</strong> dos bisectrices<br />

<strong>de</strong>l triángulo, es <strong>de</strong>cir, calcular el c<strong>en</strong>tro <strong>de</strong>l triángulo véase el algoritmo 4.<br />

En la figura 4.17 se pue<strong>de</strong> ver la <strong>de</strong>tección <strong>de</strong> la espina dorsal para cada tipo <strong>de</strong> triángulo.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 73<br />

Algoritmo 3 Algoritmo <strong>de</strong> g<strong>en</strong>eración <strong>de</strong> la espina dorsal.<br />

for all triángulo <strong>de</strong>l plano do<br />

if triángulo <strong>de</strong> tipo S th<strong>en</strong><br />

Se <strong>de</strong>tectan 2 puntos <strong>de</strong> conexión y 1 arista <strong>de</strong> la espina dorsal.<br />

p 1 ←− c<strong>en</strong>tro <strong>de</strong> la arista interna 1<br />

p 2 ←− c<strong>en</strong>tro <strong>de</strong> la arista interna 2<br />

a 1 ←− arista formada por p 1 y p 2<br />

else if triángulo <strong>de</strong> tipo J th<strong>en</strong><br />

Se <strong>de</strong>tectan 4 puntos <strong>de</strong> conexión y 3 aristas <strong>de</strong> la espina dorsal.<br />

p 1 ←− c<strong>en</strong>tro <strong>de</strong> la arista interna 1<br />

p 2 ←− c<strong>en</strong>tro <strong>de</strong> la arista interna 2<br />

p 3 ←− c<strong>en</strong>tro <strong>de</strong> la arista interna 3<br />

p 4 ←− c<strong>en</strong>tro <strong>de</strong>l triángulo<br />

a 1 ←− arista formada por p 1 y p 4<br />

a 2 ←− arista formada por p 2 y p 4<br />

a 3 ←− arista formada por p 3 y p 4<br />

<strong>en</strong>d if<br />

<strong>en</strong>d for


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 74<br />

Figura 4.16: C<strong>en</strong>tro <strong>de</strong> un triángulo.<br />

S<br />

S<br />

S<br />

J<br />

T<br />

S<br />

S<br />

S<br />

S<br />

S<br />

T<br />

S<br />

S<br />

S<br />

T<br />

Figura 4.17: Detección <strong>de</strong> la espina.<br />

4.2.3.2. Elevación <strong>de</strong> la espina dorsal.<br />

Una vez que todos los puntos <strong>de</strong> conexión han sido unidos mediante aristas, formando la<br />

espina dorsal <strong>de</strong>l plano, se proce<strong>de</strong> a la elevación <strong>de</strong> la espina, es <strong>de</strong>cir, a darle coor<strong>de</strong>nada Z<br />

a cada uno <strong>de</strong> los vértices que la forman.<br />

El problema es computar la distancia <strong>de</strong>s<strong>de</strong> la espina dorsal al límite <strong>de</strong>l polígono. Como<br />

el construir secciones repres<strong>en</strong>tativas exactas <strong>de</strong> la forma, para cada vértice <strong>de</strong> la espina dorsal,<br />

ti<strong>en</strong>e un coste muy elevado, su cálculo se realiza como pue<strong>de</strong> verse <strong>en</strong> el algoritmo 4.2.3.2.<br />

Como se ve <strong>en</strong> el algoritmo, para cada punto <strong>de</strong> conexión p se da un tratami<strong>en</strong>to <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do<br />

<strong>de</strong> si es el c<strong>en</strong>tro <strong>de</strong> una arista interna o el c<strong>en</strong>tro <strong>de</strong> un triángulo <strong>de</strong> tipo J.<br />

En la figura 4.18, se pue<strong>de</strong> ver el resultado <strong>de</strong> la <strong>de</strong>tección y elevación <strong>de</strong> la espina sobre<br />

el objeto <strong>en</strong> el sistema <strong>en</strong> la triangulación básica (figura <strong>de</strong> la izquierda) y <strong>en</strong> la triangulación<br />

<strong>de</strong> Delaunay (figura <strong>de</strong> la <strong>de</strong>recha).<br />

El resultado <strong>de</strong> la elevación <strong>de</strong> la espina dorsal <strong>en</strong> la triangulación <strong>de</strong> Delaunay es mucho<br />

más realista como eje c<strong>en</strong>tral <strong>de</strong>l objeto que <strong>en</strong> la triangulación básica. Es recom<strong>en</strong>dable la


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 75<br />

Algoritmo 4 Punto c<strong>en</strong>tral <strong>de</strong> un triángulo<br />

1: Se obti<strong>en</strong><strong>en</strong> las coor<strong>de</strong>nadas <strong>de</strong> los extremos <strong>de</strong> las bisectrices (un vértice <strong>de</strong>l triángulo y<br />

el punto medio <strong>de</strong> la arista opuesta a éste).<br />

2: Se halla la ecuación implícita <strong>de</strong> cada bisectriz <strong>de</strong> la forma:<br />

Y −Y 1<br />

X−X 1<br />

= Y 2−Y 1<br />

X 2 −X 1<br />

Poniéndolo <strong>en</strong> función <strong>de</strong> X e Y <strong>de</strong> la forma AX + BY + C = 0 quedaría:<br />

A = Y 2−Y 1<br />

X 2 −X 1<br />

B = −1<br />

C = Y 1 − ( Y 2−Y 1<br />

X 2 −X 1<br />

)X 1<br />

3: Se resuelve el sistema <strong>de</strong> ecuaciones formado por las dos ecuaciones correspondi<strong>en</strong>tes a<br />

dos <strong>de</strong> las bisectrices <strong>de</strong>l triángulo.<br />

A 1 X + B 1 Y + C 1 = 0<br />

A 2 X + B 2 Y + C 2 = 0<br />

4: El punto (X, Y ) formado por la solución <strong>de</strong>l sistema <strong>de</strong> ecuaciones, será el punto c<strong>en</strong>tral<br />

<strong>de</strong>l triángulo.<br />

Algoritmo 5 Algoritmo <strong>de</strong> elevación <strong>de</strong> la espina dorsal.<br />

for all p: puntos <strong>de</strong> conexión do<br />

if p asociado a arista interna th<strong>en</strong><br />

Distancias <strong>en</strong>tre p y todos los vértices <strong>de</strong>l plano directam<strong>en</strong>te conectados.<br />

distancia <strong>de</strong> elevacion <strong>de</strong> p ←− promedio <strong>de</strong> las distancias.<br />

else if p es punto medio <strong>de</strong> un triángulo J th<strong>en</strong><br />

Se <strong>de</strong>tectan 4 puntos <strong>de</strong> conexión y 3 aristas <strong>de</strong> la espina dorsal.<br />

Distancias <strong>de</strong> elevación <strong>de</strong> los puntos <strong>de</strong> conexión directam<strong>en</strong>te conectados a p.<br />

distancia <strong>de</strong> elevación <strong>de</strong> p ←− promedio <strong>de</strong> las distancias <strong>de</strong> elevación.<br />

<strong>en</strong>d if<br />

<strong>en</strong>d for


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 76<br />

Figura 4.18: Detección y elevación <strong>de</strong> la espina dorsal <strong>en</strong> la triangulación Básica y Delaunay.<br />

optimización <strong>de</strong> Delaunay ya que redistribuye los triángulos <strong>en</strong> la malla <strong>de</strong> forma homogénea.<br />

4.2.3.3. Estructuras <strong>de</strong> datos.<br />

En esta parte <strong>de</strong> la implem<strong>en</strong>tación participan los objetos <strong>de</strong> la figura 4.19.<br />

Figura 4.19: Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong> la espina.<br />

mSpine: una espina está compuesta <strong>de</strong> tres elem<strong>en</strong>tos:<br />

• edges: es la lista <strong>de</strong> aristas <strong>de</strong> la espina, es <strong>de</strong>cir, la lista <strong>de</strong> aristas que un<strong>en</strong> los<br />

puntos <strong>de</strong> conexión <strong>de</strong> la espina dorsal. La estructura se almac<strong>en</strong>ará como una<br />

lista <strong>de</strong> listas, es <strong>de</strong>cir, <strong>en</strong> cada posición cont<strong>en</strong>drá una lista <strong>de</strong> aristas que se<br />

correspon<strong>de</strong>rá con las aristas <strong>de</strong> la espina para cada triángulo.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 77<br />

• vertex: es la lista <strong>de</strong> vértices <strong>de</strong> la espina, es <strong>de</strong>cir, la lista <strong>de</strong> puntos <strong>de</strong> conexión.<br />

Esta información es redundante, ya que es cont<strong>en</strong>ida <strong>en</strong> el atributo edges, pero es<br />

una forma <strong>de</strong> agilizar cálculos.<br />

Esta lista, es al igual que <strong>en</strong> el caso anterior, una lista <strong>de</strong> listas, ya que <strong>en</strong> cada<br />

posición, se almac<strong>en</strong>a una lista con los puntos <strong>de</strong> conexión <strong>de</strong> cada triángulo. Por<br />

ejemplo, si es un triángulo S, vertex almac<strong>en</strong>ará <strong>en</strong> una posición una lista con dos<br />

puntos <strong>de</strong> conexión y si es un triángulo J, almac<strong>en</strong>ará una lista con cuatro puntos<br />

<strong>de</strong> conexión.<br />

• planeEdges: es la lista <strong>de</strong> aristas <strong>de</strong>l plano que corta cada vértice <strong>de</strong> la espina<br />

dorsal. Al igual que <strong>en</strong> los casos anteriores, es una lista <strong>de</strong> listas, y consigue <strong>en</strong><br />

cada posición, la lista <strong>de</strong> aristas relacionadas con los vértices <strong>de</strong> la misma posición<br />

<strong>de</strong> la lista vertex.<br />

Un ejemplo aclarativo <strong>de</strong> este tipo <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to se pue<strong>de</strong> ver <strong>en</strong> la figura 4.20.<br />

v1 a1<br />

v2<br />

a2<br />

v3<br />

a3 v6<br />

a5<br />

v5<br />

v4<br />

a4<br />

Figura 4.20: Ejemplo <strong>de</strong> lo que almac<strong>en</strong>a un objeto mSpine.<br />

Según la figura 4.20, lo que se almac<strong>en</strong>a <strong>en</strong> cada lista es lo sigui<strong>en</strong>te:<br />

vertex = [[v1,v2],[v2,v3],[v3,v4,v5,v6]]<br />

edges = [[edge(v1,v2)],[edge(v2,v3)],[edge(v3,v6),edge(v4,v6),edge(v5,v6)]]<br />

planeEdges = [[a1,a2],[a2,a3],[a3,a4,a5]]


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 78<br />

4.2.4. Creación <strong>de</strong>l objeto final.<br />

Las dos aproximaciones que se <strong>de</strong>tallan a continuación, explican como a partir <strong>de</strong>l plano<br />

y la espina dorsal <strong>de</strong> éste, se obti<strong>en</strong>e la malla 3D asociada.<br />

En ambos casos, la obt<strong>en</strong>ción <strong>de</strong>l volum<strong>en</strong> <strong>de</strong>l objeto se realiza mediante la utilización <strong>de</strong><br />

superficies implícitas, concretam<strong>en</strong>te metaelem<strong>en</strong>tos, que pue<strong>de</strong>n ser <strong>de</strong>finidos como objetos<br />

que cambian <strong>de</strong> figura <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong> lo cerca que estén <strong>de</strong> otro metaelem<strong>en</strong>to.<br />

La magnitud <strong>de</strong> la fuerza <strong>de</strong> atracción <strong>de</strong> un metaelem<strong>en</strong>to, normalm<strong>en</strong>te está <strong>de</strong>finida <strong>en</strong><br />

función <strong>de</strong> su volum<strong>en</strong>, pero su área <strong>de</strong> influ<strong>en</strong>cia, pue<strong>de</strong> ser <strong>de</strong>terminada in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te<br />

<strong>de</strong> su tamaño.<br />

La elección <strong>de</strong> este mecanismo para la g<strong>en</strong>eración <strong>de</strong>l objeto es <strong>de</strong>bida a que la creación<br />

<strong>de</strong> metasuperficies, está indicada para el mo<strong>de</strong>lado <strong>de</strong> personajes y objetos <strong>de</strong> la naturaleza,<br />

es <strong>de</strong>cir, mo<strong>de</strong>lado orgánico, ya que permite g<strong>en</strong>erar formas suaves muy parecidas a las <strong>de</strong><br />

los seres humanos.<br />

Figura 4.21: Metabolas <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

En la figura 4.21, se ve un ejemplo <strong>de</strong> como varía la forma <strong>de</strong> los metaelem<strong>en</strong>tos, <strong>en</strong> este<br />

caso metabolas, con la distancia a la que se <strong>en</strong>cu<strong>en</strong>tran unos <strong>de</strong> otros.<br />

4.2.4.1. Primera aproximación.<br />

Algoritmo.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 79<br />

La obt<strong>en</strong>ción <strong>de</strong> volum<strong>en</strong> se realiza, añadi<strong>en</strong>do para cáda vértice o punto <strong>de</strong> conexión<br />

<strong>de</strong> la espina dorsal, un metaelem<strong>en</strong>to, concrétam<strong>en</strong>te una metaelipse (metaelem<strong>en</strong>to<br />

con forma <strong>de</strong> elipse) con una dim<strong>en</strong>sión y ori<strong>en</strong>tación <strong>de</strong>terminada.<br />

Las dim<strong>en</strong>siones y el ángulo <strong>de</strong> rotación <strong>de</strong> la metaelipse van a ser las sigui<strong>en</strong>tes:<br />

• Tamaño <strong>de</strong> la metaelipse (coor<strong>de</strong>nada X): Véase algoritmo 6<br />

Algoritmo 6 Tamaño <strong>de</strong> la metaelipse <strong>en</strong> el eje X<br />

if el punto <strong>de</strong> conexión es el punto medio <strong>de</strong> una arista interna th<strong>en</strong><br />

ancho ←− longitud <strong>de</strong> la arista interna.<br />

else if punto medio <strong>de</strong> un triángulo <strong>de</strong> tipo J th<strong>en</strong><br />

ancho ←− longitud media <strong>de</strong> las bisectrices <strong>de</strong>l triángulo J.<br />

<strong>en</strong>d if<br />

• Tamaño <strong>de</strong> la metaelipse (coor<strong>de</strong>nada Y):<br />

Se correspon<strong>de</strong> con la distancia media <strong>de</strong>s<strong>de</strong> ese punto <strong>de</strong> conexión al resto <strong>de</strong><br />

puntos <strong>de</strong> conexión directam<strong>en</strong>te conectados al mismo.<br />

• Tamaño <strong>de</strong> la metaelipse (coor<strong>de</strong>nada Z):<br />

Se correspon<strong>de</strong> con el doble <strong>de</strong> la altura <strong>de</strong>l punto <strong>de</strong> conexión <strong>de</strong> la espina dorsal<br />

asociado a la metaelipse. Es el doble, ya que la figura resultante va a ser simétrica<br />

y se ti<strong>en</strong>e la altura sólo para la coor<strong>de</strong>nada positiva, pero se necesita también la<br />

coor<strong>de</strong>nada negativa, lo cual se soluciona dando el doble <strong>de</strong> la altura a la metaelipse<br />

y situándola <strong>en</strong> el punto <strong>de</strong> conexión.<br />

• Rotación:<br />

Las aristas internas <strong>de</strong>l plano, no ti<strong>en</strong><strong>en</strong> todas la misma dirección, con lo cual, la<br />

metaelipse <strong>de</strong>be t<strong>en</strong>er la misma dirección que la arista asociada, <strong>de</strong> tal forma que<br />

se calcula el ángulo <strong>de</strong> rotación que <strong>de</strong>be t<strong>en</strong>er esta metaelipse como se <strong>de</strong>talla <strong>en</strong><br />

el algoritmo 7.<br />

De esta forma se ti<strong>en</strong>e cada metaelipse situada <strong>en</strong> el c<strong>en</strong>tro <strong>de</strong> cada punto <strong>de</strong> conexión<br />

y con las dim<strong>en</strong>siones y ángulo <strong>de</strong> rotación a<strong>de</strong>cuado (ver figura 4.23).


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 80<br />

Algoritmo 7 Rotación <strong>de</strong> una metaelipse.<br />

Se establece un c<strong>en</strong>tro <strong>de</strong> coor<strong>de</strong>nadas imaginario <strong>en</strong> el c<strong>en</strong>tro <strong>de</strong> la arista, es <strong>de</strong>cir, <strong>en</strong> el<br />

punto <strong>de</strong> conexión asociado a esa metabola (ver figura 4.22).<br />

Sea vo el vértice orig<strong>en</strong> <strong>de</strong> la arista y vd el vértice <strong>de</strong>stino.<br />

if vo.x < vd.x th<strong>en</strong><br />

Construímos el triángulo formado por los lados a, b y c (ver figura 4.22, casos 1 y 2).<br />

Por el Teorema <strong>de</strong>l Cos<strong>en</strong>o, se ti<strong>en</strong>e:<br />

a 2 = b 2 + c 2 − 2bc ∗ cos(A)<br />

b 2 = a 2 + c 2 − 2ac ∗ cos(B)<br />

c 2 = a 2 + b 2 − 2ab ∗ cos(C)<br />

Se calcula el ángulo A <strong>de</strong>spejando <strong>de</strong> la primera fórmula <strong>de</strong>l teorema.<br />

if vo.y < vd.y th<strong>en</strong><br />

else<br />

Se establece el ángulo A positivo (ver figura 4.22, caso 1).<br />

Se establece el ángulo A negativo (ver figura 4.22, caso 2).<br />

<strong>en</strong>d if<br />

else if vo.x > vd.x th<strong>en</strong><br />

Construímos el triángulo formado por los lados a, b y c (ver figura 4.22, casos 3 y 4).<br />

Se calcula el ángulo A por el Teorema <strong>de</strong>l Cos<strong>en</strong>o.<br />

if vo.y > vd.y th<strong>en</strong><br />

else<br />

Se establece el ángulo A positivo (ver figura 4.22, caso 3).<br />

Se establece el ángulo A negativo (ver figura 4.22, caso 4).<br />

<strong>en</strong>d if<br />

<strong>en</strong>d if


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 81<br />

Caso 1 Caso 2<br />

b<br />

A<br />

c<br />

a<br />

A<br />

b<br />

c<br />

a<br />

Caso 3 Caso 4<br />

b<br />

A<br />

c<br />

a<br />

A<br />

b<br />

c<br />

a<br />

Figura 4.22: Cuatro casos para hallar la rotación <strong>de</strong> la metaelipse.<br />

Problemas.<br />

En la g<strong>en</strong>eración <strong>de</strong>l objeto 3D según esta aproximación, surg<strong>en</strong> dos problemas principales:<br />

• Dados dos puntos <strong>de</strong> conexión <strong>de</strong> la espina dorsal, muy lejanos <strong>en</strong>tre sí, como<br />

el tamaño <strong>en</strong> la coor<strong>de</strong>nada y <strong>de</strong> la metaelipse se establece como un promedio,<br />

pue<strong>de</strong> que haya otros puntos conectados a éstos vértices que se <strong>en</strong>cu<strong>en</strong>tr<strong>en</strong> más<br />

cerca, y el promedio ser una distancia pequeña.<br />

Esto ti<strong>en</strong>e como efecto, la aparición <strong>de</strong> huecos <strong>en</strong> el objeto 3D por falta <strong>de</strong> metaelem<strong>en</strong>tos<br />

<strong>en</strong> esa zona (ver figura 4.24 y 4.25).<br />

• En algunas figuras creadas por el usuario (ver figura 4.24 y 4.25), se i<strong>de</strong>ntifican<br />

saltos bruscos <strong>en</strong>tre las metasuperficies, cuando <strong>en</strong> realidad, no se <strong>de</strong>bería<br />

i<strong>de</strong>ntificar visualm<strong>en</strong>te cada metaelem<strong>en</strong>to, sino que se <strong>de</strong>bería obt<strong>en</strong>er una malla<br />

suavizada. Estos saltos se reduc<strong>en</strong> cuando se aum<strong>en</strong>ta el nivel <strong>de</strong> <strong>de</strong>talle, porque a


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 82<br />

Figura 4.23: dim<strong>en</strong>siones y rotación <strong>de</strong> las metaelipses.<br />

mayor nivel <strong>de</strong> <strong>de</strong>talle, más vértices se obti<strong>en</strong><strong>en</strong>, por lo tanto son g<strong>en</strong>erados más<br />

triángulos, y más puntos <strong>de</strong> conexión <strong>en</strong> la construcción <strong>de</strong> la espina.<br />

Cuanto más nivel <strong>de</strong> <strong>de</strong>talle, las progresiones <strong>en</strong> la altura (coor<strong>de</strong>nada z) <strong>de</strong> los<br />

metaelem<strong>en</strong>tos, cambia <strong>de</strong> uno a otro <strong>de</strong> forma más progresiva.<br />

Figura 4.24: Resultado 1 <strong>de</strong> la primera aproximación.<br />

4.2.4.2. Versión final.<br />

La solución a los problemas anteriores consiste <strong>en</strong> la creación <strong>de</strong> metaelipses con dim<strong>en</strong>siones<br />

fijas y reducidas <strong>en</strong> las coor<strong>de</strong>nadas x e y, y el cálculo <strong>de</strong> un promedio para la<br />

coor<strong>de</strong>nada z.<br />

En vez <strong>de</strong> crear una metaelipse por cada punto <strong>de</strong> conexión <strong>de</strong> la espina dorsal, se crearán<br />

las necesarias para cubrir toda la superficie <strong>de</strong>l plano.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 83<br />

Figura 4.25: Resultado 2 <strong>de</strong> la primera aproximación.<br />

G<strong>en</strong>eración <strong>de</strong> las metaelipses.<br />

Cada arista <strong>de</strong>l plano, asociada a un vértice <strong>de</strong> la espina dorsal (punto <strong>de</strong> conexión),<br />

es rell<strong>en</strong>ada con metaelipses con unas dim<strong>en</strong>siones <strong>en</strong> los ejes X e Y fijas. Se calcula<br />

la longitud <strong>de</strong> la arista, y el número <strong>de</strong> metaelipses que cab<strong>en</strong> <strong>en</strong> ella, y se distribuy<strong>en</strong><br />

metaelipses a lo largo <strong>de</strong> toda la arista. Si sobra alguna porción <strong>de</strong> arista, al ser <strong>de</strong> m<strong>en</strong>or<br />

longitud que el tamaño establecido para las metaelipses, se aña<strong>de</strong> una metaelipse <strong>de</strong>l<br />

tamaño necesario.<br />

MOSKIS 3D establece un tamaño para estas metaelipses por <strong>de</strong>fecto, mediante el que se<br />

obti<strong>en</strong>e un equilibrio <strong>en</strong>tre coste computacional y nivel <strong>de</strong> <strong>de</strong>talle <strong>de</strong> la figura g<strong>en</strong>erada.<br />

Se ofrece la posibilidad al usuario <strong>de</strong> modificar el tamaño <strong>de</strong> estas metaelipses, mediante<br />

una barra <strong>de</strong> <strong>de</strong>slizami<strong>en</strong>to situada <strong>en</strong> el panel G<strong>en</strong>erate Object, que va a indicar el<br />

nivel <strong>de</strong> <strong>de</strong>talle, a más nivel <strong>de</strong> <strong>de</strong>talle seleccionado, m<strong>en</strong>or tamaño <strong>de</strong> la metaelipse.<br />

Hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que la disminución este tamaño, aum<strong>en</strong>tará el número <strong>de</strong> metaelipses<br />

creadas y este hecho aum<strong>en</strong>tará <strong>de</strong> forma elevada el coste computacional.<br />

En la figura 4.26 se pue<strong>de</strong> ver el resultado <strong>de</strong> situar metaelipses a lo largo <strong>de</strong> una arista.<br />

En el algoritmo 8 se muestra la forma <strong>de</strong> proce<strong>de</strong>r.<br />

Según el algoritmo 8, el número <strong>de</strong> aristas imaginarias g<strong>en</strong>eradas será el número <strong>de</strong><br />

metaelipses que quepan <strong>en</strong> la distancia d.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 84<br />

Algoritmo 8 G<strong>en</strong>eración <strong>de</strong>l número <strong>de</strong> metaelipses.<br />

for all t: triángulo <strong>de</strong>l plano do<br />

if t es <strong>de</strong> tipo S th<strong>en</strong><br />

d ←− distancia <strong>en</strong>tre las dos aristas (<strong>en</strong> los extremos distantes evi<strong>de</strong>ntem<strong>en</strong>te).<br />

if d > tamaño <strong>de</strong> metaelipse th<strong>en</strong><br />

G<strong>en</strong>erar aristas imaginarias (ver figura 4.27).<br />

Calcular sus puntos <strong>de</strong> conexión.<br />

<strong>en</strong>d if<br />

else if t es <strong>de</strong> tipo J th<strong>en</strong><br />

d ←− longitud <strong>de</strong> la arista mínima <strong>de</strong> t.<br />

if d > tamaño <strong>de</strong> metaelipse th<strong>en</strong><br />

G<strong>en</strong>erar aristas imaginarias (ver figura 4.27).<br />

Calcular puntos <strong>de</strong> conexión.<br />

<strong>en</strong>d if<br />

<strong>en</strong>d if<br />

<strong>en</strong>d for<br />

Rell<strong>en</strong>ar aristas <strong>de</strong>l plano + aristas imaginarias g<strong>en</strong>eradas, con metaelipses.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 85<br />

Figura 4.26: Situación <strong>de</strong> metaelipses a lo largo <strong>de</strong> una arista.<br />

El cálculo <strong>de</strong> los puntos <strong>de</strong> conexión para estas aristas imaginarias g<strong>en</strong>eradas se realiza<br />

<strong>de</strong> la forma:<br />

• La posición (x, y) <strong>de</strong>l punto <strong>de</strong> conexión será el punto medio <strong>de</strong> la arista imaginaria.<br />

• La posición z se calcula, hallando el increm<strong>en</strong>to o <strong>de</strong>crem<strong>en</strong>to que se produce<br />

<strong>en</strong>tre las dos aristas internas (no imaginarias) que las ro<strong>de</strong>an. Una vez calculado<br />

este valor, cada arista imaginaria increm<strong>en</strong>tará o <strong>de</strong>crem<strong>en</strong>tará su valor z, para<br />

producir una cambio gradual <strong>en</strong>tre un punto y otro (ver figura 4.28).<br />

Una vez calculado todo, se rell<strong>en</strong>a mediante metaelipses toda la longitud <strong>de</strong> cada arista<br />

como se pue<strong>de</strong> ver <strong>en</strong> la figura 4.26. Este proceso se realiza para todas las aristas, aristas<br />

<strong>de</strong>l plano y aristas imaginarias g<strong>en</strong>eradas.<br />

De esta forma queda cubierta toda la superficie <strong>de</strong>l plano que <strong>de</strong>fine nuestro objeto<br />

mediante metaelem<strong>en</strong>tos, aún sin altura.<br />

En las figuras 4.29 y 4.30, se pue<strong>de</strong> ver el resultado <strong>de</strong>l algoritmo <strong>de</strong>scrito hasta ahora.<br />

La figura pres<strong>en</strong>ta como se cubre la superficie <strong>de</strong>l plano mediate metaelipses, quedando<br />

la figura <strong>de</strong>finida con bastante <strong>de</strong>talle y <strong>de</strong> una forma homogénea.<br />

En la figura 4.29 aparece el objeto g<strong>en</strong>erado con una metasuperficie, sin embargo, <strong>en</strong><br />

la figura 4.30, el mo<strong>de</strong>lo obt<strong>en</strong>ido es una malla poligonal. Del paso <strong>de</strong> metasuperficie a


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 86<br />

Caso 1: Triángulo S<br />

d<br />

d<br />

Caso 2: Triángulo J<br />

d<br />

d<br />

Figura 4.27: G<strong>en</strong>eración <strong>de</strong> aristas imaginarias.<br />

Figura 4.28: Cálculo <strong>de</strong>l punto <strong>de</strong> conexión <strong>de</strong> aristas imaginarias.<br />

malla poligonal se hablará más a<strong>de</strong>lante.<br />

Tamaño <strong>de</strong> las metaelipses (coor<strong>de</strong>nada z).<br />

El sigui<strong>en</strong>te paso, es dar volum<strong>en</strong> a la figura, para ello se ti<strong>en</strong>e que dar un valor al<br />

tamaño <strong>de</strong> la metaelipse sobre el eje Z, es <strong>de</strong>cir, la altura.<br />

• Increm<strong>en</strong>to lineal <strong>de</strong> alturas.<br />

Para cada arista (<strong>de</strong>l plano + imaginarias), se ti<strong>en</strong><strong>en</strong> las tres coor<strong>de</strong>nadas <strong>de</strong>l punto<br />

<strong>de</strong> conexión asociado a ella.<br />

Suponi<strong>en</strong>do Z = 0 <strong>en</strong> las metaelipses <strong>de</strong> los extremos <strong>de</strong> una arista, y Z =


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 87<br />

Figura 4.29: Resultado 1 <strong>de</strong> MOSKIS 3D cubri<strong>en</strong>do la superficie, sin dim<strong>en</strong>sión <strong>en</strong> Z.<br />

Figura 4.30: Resultado 2 <strong>de</strong> MOSKIS 3D cubri<strong>en</strong>do la superficie, sin dim<strong>en</strong>sión <strong>en</strong> Z.<br />

coor<strong>de</strong>nada Z <strong>de</strong>l punto <strong>de</strong> conexión, <strong>en</strong> la metaelipse c<strong>en</strong>tral <strong>de</strong> la arista. Se hace<br />

un increm<strong>en</strong>to lineal <strong>de</strong>s<strong>de</strong> cada extremo <strong>de</strong> la arista, hasta el c<strong>en</strong>tro o punto <strong>de</strong><br />

conexión, dando estos valores increm<strong>en</strong>tales a la coor<strong>de</strong>nada Z <strong>de</strong> cada metaelipse<br />

situada <strong>en</strong> la arista (ver figura 4.31).<br />

Con la <strong>de</strong>cisión tomada <strong>de</strong> asignar Z = 0 <strong>en</strong> las metaelipses <strong>de</strong> los extremos <strong>de</strong><br />

las aristas, surge un problema reflejado <strong>en</strong> la 4.32.<br />

Si las aristas imaginarias <strong>de</strong> los triángulos <strong>de</strong> tipo J, ti<strong>en</strong><strong>en</strong> <strong>en</strong> los extremos una<br />

altura Z = 0, <strong>en</strong> uno <strong>de</strong> los extremos (el extremo que coinci<strong>de</strong> con la tercera arista


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 88<br />

Figura 4.31: Valores <strong>de</strong> la coor<strong>de</strong>nada Z para cada metaelipse.<br />

interna <strong>de</strong>l triángulo J) se producirá un hundimi<strong>en</strong>to <strong>en</strong>tre el punto <strong>de</strong> conexión<br />

<strong>de</strong> las aristas imaginarias y el punto <strong>de</strong> conexión <strong>de</strong> la arista interna <strong>de</strong>l triángulo<br />

J que cortan.<br />

Este efecto se pue<strong>de</strong> ver <strong>en</strong> la figura 4.33, don<strong>de</strong> p1, p2 y p3 son los puntos <strong>de</strong><br />

conexión <strong>de</strong> las aristas <strong>de</strong> un triángulo <strong>de</strong> tipo J, el paso <strong>de</strong>s<strong>de</strong> los puntos p1 y<br />

p2 hasta la arista interna que ti<strong>en</strong>e como punto <strong>de</strong> conexión el punto p3 <strong>de</strong>bería<br />

ser gradual, pero se produce un paso por Z = 0 <strong>en</strong> los extremos <strong>de</strong> las aristas<br />

imaginarias, que provoca el hundimi<strong>en</strong>to.<br />

Figura 4.32: Hundimi<strong>en</strong>tos <strong>en</strong> triángulos <strong>de</strong> tipo J.<br />

Para evitar este hundimi<strong>en</strong>to <strong>en</strong> la figura, la coor<strong>de</strong>nada Z <strong>de</strong> uno <strong>de</strong> los extremos<br />

<strong>de</strong> la arista imaginaria ya no va a valer Z = 0, va a t<strong>en</strong>er el valor <strong>de</strong> la coor<strong>de</strong>nada<br />

Z <strong>de</strong> la metaelipse (<strong>de</strong> la arista interna <strong>de</strong>l triángulo) coinci<strong>de</strong>nte con este extremo.<br />

La arista interna <strong>de</strong>l triángulo a la que pert<strong>en</strong>ece la metaelipse <strong>de</strong> la que se habla,


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 89<br />

p3<br />

p1<br />

p2<br />

Figura 4.33: Ejemplo <strong>de</strong> hundimi<strong>en</strong>to <strong>en</strong> un triángulo <strong>de</strong> tipo J.<br />

es la que es cortada por la arista imaginaria (ver figura 4.34).<br />

Para ello se haría un increm<strong>en</strong>to (o <strong>de</strong>crem<strong>en</strong>to) lineal gradual <strong>de</strong><strong>de</strong> la coor<strong>de</strong>nada<br />

Z <strong>de</strong> los puntos <strong>de</strong> conexión <strong>de</strong> las aristas imaginarias, hasta la coor<strong>de</strong>nada Z <strong>de</strong><br />

la metaelipse coinci<strong>de</strong>nte, pert<strong>en</strong>eci<strong>en</strong>te a la arista interna <strong>de</strong>l triángulo J que corta<br />

(ver figura 4.34).<br />

Esto se cumple sólo para aristas imaginarias g<strong>en</strong>eradas <strong>en</strong> un triángulo <strong>de</strong> tipo J.<br />

Para las aristas <strong>de</strong>l plano y para las aristas imaginarias <strong>de</strong> triángulos <strong>de</strong> tipo S se<br />

sigue el procedimi<strong>en</strong>to anterior.<br />

p3<br />

p1<br />

p2<br />

Figura 4.34: Ejemplo <strong>de</strong> la solución al hundimi<strong>en</strong>to <strong>en</strong> un triángulo <strong>de</strong> tipo J.<br />

Mediante esta aproximación, se obti<strong>en</strong><strong>en</strong> resultados bastante realistas (ver figuras<br />

4.35 y 4.36), pero se aprecia que <strong>en</strong> elevaciones <strong>de</strong>stacadas, es <strong>de</strong>cir, zonas muy<br />

elevadas <strong>de</strong> la figura, se g<strong>en</strong>eran porciones piramidales o picos, <strong>de</strong>bido al increm<strong>en</strong>to<br />

lineal <strong>de</strong> la coor<strong>de</strong>nada Z <strong>en</strong> las metaelipses. Este efecto se aprecia sobre<br />

todo <strong>en</strong> aristas <strong>de</strong> gran longitud y con un punto <strong>de</strong> conexión <strong>de</strong> coor<strong>de</strong>nada Z


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 90<br />

elevada (ver figura 4.31).<br />

La solución sería increm<strong>en</strong>tar la coor<strong>de</strong>nada Z <strong>en</strong> vez <strong>de</strong> linealm<strong>en</strong>te, circularm<strong>en</strong>te.<br />

Figura 4.35: Resultado 1 <strong>de</strong> la versión con increm<strong>en</strong>to lineal.<br />

Figura 4.36: Resultado 2 <strong>de</strong> la versión con increm<strong>en</strong>to lineal.<br />

• Increm<strong>en</strong>to circular <strong>de</strong> alturas.<br />

Para evitar los efectos producidos por los increm<strong>en</strong>tos lineales <strong>en</strong> el eje Z, se<br />

toma la <strong>de</strong>terminación <strong>de</strong> hacer increm<strong>en</strong>tos circulares como se muestra <strong>en</strong> la<br />

figura 4.37.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 91<br />

Figura 4.37: Valores <strong>de</strong> la coor<strong>de</strong>nada Z para cada metaelipse.<br />

Se ti<strong>en</strong><strong>en</strong> tres puntos, que son los extremos <strong>de</strong> la arista y el punto <strong>de</strong> conexión. Se<br />

necesita un arco que pase por esos tres puntos.<br />

En primer lugar se va a obt<strong>en</strong>er la ecuación <strong>de</strong> la circunfer<strong>en</strong>cia que pasa por esos<br />

tres puntos. Una vez obt<strong>en</strong>ida la ecuación, se sustituirá la coor<strong>de</strong>nada X <strong>de</strong> cada<br />

metaelipse, para obt<strong>en</strong>er, la coor<strong>de</strong>nada Z.<br />

Se ha tomado como plano para hacer este cálculo el (X, Z), aunque también se<br />

podría haber tomado el plano (Y, Z), ya que se ti<strong>en</strong><strong>en</strong> como datos, tanto la coor<strong>de</strong>nada<br />

X como la Y , y lo que interesa es la coor<strong>de</strong>nada Z.<br />

La ecuación <strong>de</strong> la circunfer<strong>en</strong>cia con c<strong>en</strong>tro <strong>en</strong> el punto (a, b) y radio c es:<br />

(x − a) 2 + (z − b) 2 = c 2 (4.3)<br />

Se necesita el c<strong>en</strong>tro <strong>de</strong>l triángulo y el radio a partir <strong>de</strong> él.<br />

El algoritmo 9 muestra como hallar c<strong>en</strong>tro <strong>de</strong> una circunfer<strong>en</strong>cia que pasa por tres<br />

puntos p1, p2 y p3.<br />

Una vez obt<strong>en</strong>ido el c<strong>en</strong>tro <strong>de</strong>l triángulo (a, b), se obti<strong>en</strong>e el radio c, como la<br />

distancia <strong>en</strong>tre (a, b) y cualquiera <strong>de</strong> los puntos p1, p2 o p3. T<strong>en</strong>i<strong>en</strong>do ya todos<br />

los datos, para calcular cada coor<strong>de</strong>nada Z, basta con sustituir <strong>en</strong> la ecuación la<br />

coor<strong>de</strong>nada X correspondi<strong>en</strong>te.<br />

Una vez obt<strong>en</strong>ido el conjunto <strong>de</strong> metabolas que conforman el objeto 3D asociado<br />

al contorno inicial que pintó el usuario, se realiza un paso mediante el API <strong>de</strong>


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 92<br />

Algoritmo 9 C<strong>en</strong>tro <strong>de</strong> una circunfer<strong>en</strong>cia que pasa por tres puntos<br />

1: Se traza el triángulo que pasa por los puntos p1, p2 y p3.<br />

2: Para dos segm<strong>en</strong>tos <strong>de</strong>l triángulo, se halla su mediatriz. La mediatriz <strong>de</strong> un segm<strong>en</strong>to<br />

corta al segm<strong>en</strong>to por su mitad y perp<strong>en</strong>dicularm<strong>en</strong>te (ver figura 4.38).<br />

3: Se halla la ecuación implícita <strong>de</strong> cada mediatriz <strong>de</strong> la forma:<br />

Z−Z 1<br />

X−X 1<br />

= Z 2−Z 1<br />

X 2 −X 1<br />

Poniéndolo <strong>en</strong> función <strong>de</strong> X y Z <strong>de</strong> la forma AX + BZ + C = 0 quedaría:<br />

A = Z 2−Z 1<br />

X 2 −X 1<br />

B = −1<br />

C = Z 1 − ( Z 2−Z 1<br />

X 2 −X 1<br />

)X 1<br />

4: Se resuelve el sistema <strong>de</strong> ecuaciones formado por las dos ecuaciones correspondi<strong>en</strong>tes a<br />

las dos mediatrices.<br />

A 1 X + B 1 Z + C 1 = 0<br />

A 2 X + B 2 Z + C 2 = 0<br />

5: El punto (X, Z) formado por la solución <strong>de</strong>l sistema <strong>de</strong> ecuaciones, será el punto c<strong>en</strong>tral<br />

<strong>de</strong> la circunfer<strong>en</strong>cia, es <strong>de</strong>cir (a, b).


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 93<br />

Figura 4.38: Mediatrices <strong>de</strong> dos segm<strong>en</strong>tos <strong>de</strong> un triángulo.<br />

Bl<strong>en</strong><strong>de</strong>r-Python, para convertir estos objetos <strong>en</strong> una malla poligonal que es el<br />

resultado <strong>de</strong>seado.<br />

Mediante esta solución, la malla obt<strong>en</strong>ida adquiere un aspecto mucho más realista,<br />

al ser más suave <strong>en</strong> las elevaciones como se pue<strong>de</strong> ver <strong>en</strong> las figuras 4.39 y 4.40.<br />

Figura 4.39: Resultado 1 <strong>de</strong> la versión con increm<strong>en</strong>to circular.<br />

Se pue<strong>de</strong> observar <strong>en</strong> las figuras com<strong>en</strong>tadas anteriorm<strong>en</strong>te, que <strong>en</strong> la v<strong>en</strong>tana <strong>de</strong> MOS-<br />

KIS3D también se muestra un mo<strong>de</strong>lo 3D semejante al que se muestra <strong>en</strong> la v<strong>en</strong>tana 3D<br />

<strong>de</strong> Bl<strong>en</strong><strong>de</strong>r. No es un mo<strong>de</strong>lo exactam<strong>en</strong>te igual, ya que ti<strong>en</strong>e una reducción <strong>de</strong> vértices<br />

mediante la función anteriom<strong>en</strong>te citada remDoubles, para po<strong>de</strong>r manejarla más<br />

fácilm<strong>en</strong>te, pero es una aproximación bastante cercana.<br />

En la figura 4.41, se pue<strong>de</strong> observar el número <strong>de</strong> vértices g<strong>en</strong>erados <strong>en</strong> la malla 3D <strong>de</strong>


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 94<br />

Figura 4.40: Resultado 2 <strong>de</strong> la versión con increm<strong>en</strong>to circular.<br />

Figura 4.41: Resultado 3 <strong>de</strong> la versión con increm<strong>en</strong>to circular.<br />

la v<strong>en</strong>tana <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r. En la sigui<strong>en</strong>te sección se hablará <strong>de</strong> como se g<strong>en</strong>era la malla<br />

3D <strong>en</strong> la v<strong>en</strong>tana <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

El dibujado <strong>de</strong> la malla <strong>en</strong> la v<strong>en</strong>tana <strong>de</strong> MOSKIS 3D, se realiza mediante Bl<strong>en</strong><strong>de</strong>r.BGL,<br />

símplem<strong>en</strong>te mediante la función que se muestra <strong>en</strong> el código fu<strong>en</strong>te 4.6.<br />

Código fu<strong>en</strong>te 4.6: Dibujar malla.<br />

d e f drawObject ( l C o l o r , d G l o b a l O b j e c t , dWindowData ,<br />

dCameraData ) :<br />

#Como l o s e j e s <strong>de</strong> coor<strong>de</strong>nadas , van a s u f r i r l a s


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 95<br />

# m o d i f i c a c i o n e s d e b i d a s a l a s o p e r a c i o n e s <strong>de</strong> r o t a c i ó n<br />

# y span ( no l a s <strong>de</strong> e s c a l a d o ) pues o b t i e n e n l o s d a t o s<br />

# d e l d i c c i o n a r i o cameraData<br />

g l L o a d I d e n t i t y ( )<br />

l C a m e r a P o s i t i o n = dCameraData [ ” c a m e r a P o s i t i o n ” ]<br />

lSpan = dCameraData [ ” span ” ]<br />

l R o t a t i o n A n g l e = dCameraData [ ” r o t a t i o n A n g l e ” ]<br />

i S c a l e d = dCameraData [ ” s c a l e d ” ]<br />

# Primero se d e s p l a z a e l o b j e t o según l o i n d i c a d o <strong>en</strong> e l<br />

# span porque es dón<strong>de</strong> e l u s u a r i o l o ha <strong>de</strong>jado c o l o c a d o<br />

g l T r a n s l a t e f ( l C a m e r a P o s i t i o n [ 0 ] + lSpan [ 0 ] ,<br />

l C a m e r a P o s i t i o n [ 1 ] + lSpan [ 1 ] ,<br />

l C a m e r a P o s i t i o n [ 2 ] + lSpan [ 2 ] )<br />

# Proce<strong>de</strong>mos a l a r o t a c i ó n d e l o b j e t o según l o s<br />

# p a r á m e t r o s i n d i c a d o s<br />

g l R o t a t e f ( l R o t a t i o n A n g l e [ 0 ] , 1 , 0 , 0 )<br />

g l R o t a t e f ( l R o t a t i o n A n g l e [ 1 ] , 0 , 1 , 0 )<br />

g l R o t a t e f ( l R o t a t i o n A n g l e [ 2 ] , 0 , 0 , 1 )<br />

g l S c a l e d ( i S c a l e d , i S c a l e d , i S c a l e d )<br />

l C e n t e r A r e a P a i n t =<br />

dWindowData [ ” c e n t e r A r e a P a i n t C o o r d s ” ]<br />

l T r i a n g l e s = d G l o b a l O b j e c t [ ” o b j e c t ” ] . g e t T r i a n g l e s ( )<br />

f o r i i n l T r i a n g l e s :<br />

l E d g e s = i . g e t E d g e s ( )<br />

f o r j i n l E d g es :<br />

drawEdge ( l C o l o r , j . getVO ( ) , j . getVD ( ) ,<br />

dWindowData , dCameraData )


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 96<br />

g l L o a d I d e n t i t y ( )<br />

4.2.4.3. Añadir la malla a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

El usuario, a la hora <strong>de</strong> g<strong>en</strong>erar el objeto 3D, ti<strong>en</strong>e la posibilidad <strong>de</strong> modificar dos parámetros:<br />

Nivel <strong>de</strong> <strong>de</strong>talle: Esta barra <strong>de</strong> <strong>de</strong>slizami<strong>en</strong>to, aum<strong>en</strong>ta o disminuye el nivel <strong>de</strong> <strong>de</strong>talle,<br />

lo que se traduce, <strong>en</strong> que disminuye el tamaño fijo <strong>en</strong> el eje X e Y <strong>de</strong> las metaelipses<br />

que compon<strong>en</strong> el objeto. Cuánto más nivel <strong>de</strong> <strong>de</strong>talle, más metaelipses, y por tanto<br />

mucho más tiempo <strong>de</strong> g<strong>en</strong>eración.<br />

El nivel <strong>de</strong> <strong>de</strong>talle establecido por <strong>de</strong>fecto, int<strong>en</strong>ta establecer un equilibrio <strong>en</strong>tre calidad<br />

y coste computacional.<br />

Smooth: Esta barra <strong>de</strong> <strong>de</strong>slizami<strong>en</strong>to, indica el número <strong>de</strong> veces que se aplicará el<br />

algoritmo <strong>de</strong> suavizado (API <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r-Python) para la malla 3D obt<strong>en</strong>ida.<br />

Este valor, se calcula automáticam<strong>en</strong>te, como media <strong>de</strong> las coor<strong>de</strong>nadas Z <strong>de</strong> todos<br />

los puntos <strong>de</strong> conexión <strong>de</strong> la espina dorsal, <strong>de</strong> esta forma, para superficies con más<br />

elevación, se aplicará más suavidad y para superficies con m<strong>en</strong>os elevación será m<strong>en</strong>os<br />

necesaria.<br />

Aún así este parámetro pue<strong>de</strong> ser modificado por el usuario, no aum<strong>en</strong>ta <strong>de</strong> forma<br />

significativa el tiempo <strong>de</strong> g<strong>en</strong>eración.<br />

Su efecto pue<strong>de</strong> ser el limado <strong>de</strong> <strong>de</strong>talles importantes si se abusa <strong>de</strong> él, o mallas <strong>de</strong>masiado<br />

rugosas <strong>en</strong> algunos casos, si no se aplica.<br />

La rugosidad <strong>en</strong> <strong>de</strong>terminadas mallas, pue<strong>de</strong> ser lo <strong>de</strong>seado <strong>en</strong> algunas ocasiones, ya<br />

que los mo<strong>de</strong>los orgánicos ti<strong>en</strong><strong>en</strong> irregularida<strong>de</strong>s y pue<strong>de</strong> dar un aspecto más realista al<br />

objeto.<br />

Cuando el usuario pulsa el botón Inflation, se <strong>de</strong>s<strong>en</strong>ca<strong>de</strong>na el algoritmo explicado <strong>en</strong> el<br />

apartado anterior, y se crea la malla <strong>en</strong> la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r sigui<strong>en</strong>do los sigui<strong>en</strong>tes<br />

pasos:


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 97<br />

1. Se crea un objeto Metaball <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

Mediante este objeto se acce<strong>de</strong>n a los datos <strong>de</strong> las metasuperficies <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

2. Se aña<strong>de</strong>n los metaelem<strong>en</strong>tos (metaelipses) al objeto Metaball (véase código fu<strong>en</strong>te<br />

4.7).<br />

El objeto final va a ser un conjunto <strong>de</strong> metaelem<strong>en</strong>tos que van a formar un objeto.<br />

Los metaelem<strong>en</strong>tos se aña<strong>de</strong>n mediante la función addMetaelem, con parámetros <strong>de</strong>stacados<br />

como:<br />

Tipo <strong>de</strong> metaelem<strong>en</strong>to: el 6 indica metaelipse.<br />

Coor<strong>de</strong>nadas <strong>de</strong> posición: posición <strong>de</strong>l metaelem<strong>en</strong>to <strong>en</strong> las coor<strong>de</strong>nadas X, Y y<br />

Z.<br />

Tamaño <strong>de</strong>l metaelem<strong>en</strong>to: tamaño <strong>de</strong>l metaelem<strong>en</strong>to <strong>en</strong> las coor<strong>de</strong>nadas X, Y y<br />

Z.<br />

Código fu<strong>en</strong>te 4.7: Código <strong>de</strong> creación <strong>de</strong>l objeto formado por metaelipses.<br />

# Creación <strong>de</strong> un o b j e t o m e t a b a l l <strong>en</strong> B l e n d e r .<br />

oOb = B l e n d e r . O b j e c t . New( ” Mball ” , ”MOSKIS” )<br />

oMb = B l e n d e r . M e t a b a l l . New ( )<br />

. . . # Se c a l c u l a n l o s d a t o s <strong>de</strong> l o s m e t a e l e m e n t o s<br />

f o r k i n l M e t a b a l l P o s :<br />

l P o s = k [ ” pos ” ]<br />

fTam = k [ ” tam ” ]<br />

f E l e v a t i o n = k [ ” e l e v a t i o n ” ]<br />

oMb . addMetaelem ( [ 6 , l P o s [ 0 ] , l P o s [ 1 ] , 0 , 2 , 1 , 2 , fTam ,<br />

fTam , f E l e v a t i o n ] )<br />

# Se aña<strong>de</strong>n l o s m e t a e l e m e n t o s segun l o s d a t o s <strong>de</strong><br />

# p o s i c i ó n y tamaño <strong>en</strong> cada coor<strong>de</strong>nada .<br />

oOb . l i n k (oMb)


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 98<br />

3. Se aña<strong>de</strong> el objeto a la esc<strong>en</strong>a actual <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r (véase código fu<strong>en</strong>te 4.8).<br />

Se obti<strong>en</strong>e la esc<strong>en</strong>a actual <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, <strong>en</strong> la que se está trabajando. Las esc<strong>en</strong>as son la<br />

forma <strong>de</strong> organizar el trabajo <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

Una vez obt<strong>en</strong>ida la esc<strong>en</strong>a actual, se aña<strong>de</strong> el objeto a la esc<strong>en</strong>a. Este paso es necesario,<br />

porque es justo <strong>en</strong> ese mom<strong>en</strong>to cuando se realizan todos los cálculos <strong>de</strong> los metaelem<strong>en</strong>tos<br />

y cuando realm<strong>en</strong>te se obti<strong>en</strong><strong>en</strong> los datos <strong>de</strong>l objeto, y se pue<strong>de</strong> acce<strong>de</strong>r a ellos.<br />

Este paso consume gran cantidad <strong>de</strong> recursos y tiempo.<br />

Código fu<strong>en</strong>te 4.8: Añadir objeto a la esc<strong>en</strong>a actual.<br />

# Obt<strong>en</strong>er l a e s c e n a a c t u a l<br />

oSc = B l e n d e r . Sc<strong>en</strong>e . g e t C u r r e n t ( )<br />

# Añadir e l o b j e t o y a c t u a l i z a r l a e sc<strong>en</strong>a<br />

oSc . l i n k ( oOb )<br />

oSc . u p d a t e ( 1 )<br />

4. Se g<strong>en</strong>era la malla poligonal a partir <strong>de</strong>l objeto <strong>de</strong> tipo Mball como un objeto NMesh<br />

(véase código fu<strong>en</strong>te 4.9).<br />

Para ello se obti<strong>en</strong>e los elem<strong>en</strong>tos <strong>de</strong> la esc<strong>en</strong>a que estén seleccionados (cuando un<br />

elem<strong>en</strong>to se aña<strong>de</strong> a la esc<strong>en</strong>a, ese elem<strong>en</strong>to queda seleccionado por <strong>de</strong>fecto), como se<br />

acaba <strong>de</strong> añadir el objeto <strong>de</strong> tipo Mball, es fácil obt<strong>en</strong>erlo.<br />

A continuación mediante la función <strong>de</strong>l API <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r GetRawFromObject, se obti<strong>en</strong>e<br />

la malla poligonal a partir <strong>de</strong>l objeto. Esta función obti<strong>en</strong>e la malla poligonal <strong>de</strong><br />

cualquier tipo <strong>de</strong> objeto <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

A continuación, se quita el objeto <strong>de</strong> tipo Mball <strong>de</strong> la esc<strong>en</strong>a y se aña<strong>de</strong> la malla poligonal.<br />

El paso anterior <strong>de</strong> añadir el objeto <strong>de</strong> tipo Mball a la esc<strong>en</strong>a, es un paso intermedio,<br />

necesario para realizar los cálculos, ya que hasta que el objeto no se visualiza <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r,<br />

no se calcula. Este paso no se aprecia visualm<strong>en</strong>te <strong>en</strong> la ejecución, pero como se<br />

ha dicho anteriorm<strong>en</strong>te ti<strong>en</strong>e un coste computacional muy alto.


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 99<br />

Código fu<strong>en</strong>te 4.9: Obt<strong>en</strong>er malla poligonal.<br />

# Se o b t i e n e n l o s o b j e t o s <strong>de</strong> l a e sc<strong>en</strong>a a c t u a l<br />

s e l e c t e d = oSc . g e t C h i l d r e n ( )<br />

f o r i i n s e l e c t e d :<br />

i f i . getType ( ) == ’ MBall ’ :<br />

# Se o b t i e n e l a malla p o l i g o n a l<br />

me = B l e n d e r . NMesh . GetRawFromObject ( i . getName ( ) )<br />

oSc . u n l i n k ( oOb ) # Se q u i t a <strong>de</strong> l a e sc<strong>en</strong>a e l o b j e t o Mball<br />

B l e n d e r . NMesh . PutRaw ( me ) # Se aña<strong>de</strong> l a malla<br />

5. Suavizado <strong>de</strong>l objeto (véase código fu<strong>en</strong>te 4.10).<br />

Para obt<strong>en</strong>er la malla final suavizada, <strong>en</strong> primer lugar se acce<strong>de</strong> a la malla poligonal,<br />

mediante el objeto Mesh <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, que se difer<strong>en</strong>cia <strong>de</strong>l objeto NMesh, <strong>en</strong> que NMesh<br />

es útil para crear mallas y añadirlas a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, mi<strong>en</strong>tras que Mesh, es<br />

útil a la hora <strong>de</strong> modificar mallas ya añadidas a la v<strong>en</strong>tana 3D, consumi<strong>en</strong>do muy pocos<br />

recursos y efectuando todas las operaciones <strong>de</strong> forma rápida.<br />

Una vez obt<strong>en</strong>ida la malla, se proce<strong>de</strong> a eliminar vértices repetidos o muy próximos<br />

sin alterar la figura. Para ello se utiliza la función remDoubles, aunque antes se <strong>de</strong>b<strong>en</strong><br />

seleccionar todos los vértices <strong>de</strong> la malla, ya que esta función se aplica a los vértices<br />

seleccionados (véase código fu<strong>en</strong>te 4.11).<br />

A continuación se aplica la función quadToTriangle, que convierte todas las caras <strong>en</strong><br />

triángulos, por si <strong>en</strong> algunos casos se ti<strong>en</strong><strong>en</strong> polígonos <strong>de</strong> cuatro lados.<br />

Una vez hecho todo esto, se proce<strong>de</strong> al suavizado <strong>de</strong>l objeto, y para esto se aplica<br />

la función smooth sobre la malla (véase código fu<strong>en</strong>te 4.12), con todos los vértices<br />

seleccionados, ya que se realiza únicam<strong>en</strong>te sobre los vértices seleccionados (véase<br />

código fu<strong>en</strong>te 4.11).<br />

Código fu<strong>en</strong>te 4.10: Suavizado <strong>de</strong>l objeto.<br />

s e l e c t e d o b = B l e n d e r . O b j e c t . G e t S e l e c t e d ( )<br />

# Se s u a v i z a e l o b j e t o


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 100<br />

f o r ob i n s e l e c t e d o b :<br />

i f ob . getType ( ) == ’Mesh ’ :<br />

the mesh = ob . g e t D a t a ( mesh=True )<br />

s e l A l l V e r t e x ( the mesh )<br />

the mesh . remDoubles ( 0 . 3 0 0 )<br />

the mesh . q u a d T o T r i a n g l e ( 0 )<br />

setSmooth ( the mesh , d B u t t o n s [ ” smoothButtonVal ” ] )<br />

Código fu<strong>en</strong>te 4.11: Selección <strong>de</strong> vértices.<br />

d e f s e l A l l V e r t e x ( oMesh ) :<br />

f o r oFace i n oMesh . f a c e s :<br />

oFace . s e l = 1<br />

f o r oVert i n oMesh . v e r t s :<br />

oVert . s e l = 1<br />

oMesh . u p d a t e ( )<br />

Código fu<strong>en</strong>te 4.12: Función <strong>de</strong> smooth.<br />

d e f setSmooth ( oMesh , numSmooth ) :<br />

f o r oFace i n oMesh . f a c e s :<br />

oFace . s e l = 1<br />

oFace . smooth = 1<br />

# Las c a r a s se v i s u a l i z a r á n s u a v i z a d a s<br />

# <strong>en</strong> v e z <strong>de</strong> con a s p e c t o s ó l i d o .<br />

i = 0<br />

w h i l e i < numSmooth :<br />

oMesh . smooth ( )<br />

i +=1<br />

# Se d e s e l e c c i o n a n l o s v é r t i c e s <strong>de</strong> l a malla<br />

f o r oFace i n oMesh . f a c e s :<br />

oFace . s e l = 0


4.2. Creación <strong>de</strong> un objeto nuevo <strong>en</strong> MOSKIS 3D. 101<br />

f o r oVert i n oMesh . v e r t s :<br />

oVert . s e l = 0<br />

oMesh . u p d a t e ( )<br />

4.2.4.4. Estructuras <strong>de</strong> datos.<br />

Para esta parte <strong>de</strong> la ejecución se ti<strong>en</strong>e el diagrama <strong>de</strong> clases <strong>de</strong> la figura 4.42<br />

Figura 4.42: Clases utilizadas para la implem<strong>en</strong>tación <strong>de</strong>l objeto.<br />

mObject: un objeto es una lista <strong>de</strong> triángulos.<br />

En mObject se almac<strong>en</strong>a también la lista <strong>de</strong> vértices y aristas, que aunque es mant<strong>en</strong>er<br />

información redundante, agiliza los cálculos.


Capítulo 5<br />

Resultados<br />

En este capítulo se muestran algunos <strong>de</strong> los resultados que se pue<strong>de</strong>n obt<strong>en</strong>er mediante la<br />

utilización <strong>de</strong> MOSKIS 3D y que <strong>de</strong>muestran su facilidad <strong>en</strong> la g<strong>en</strong>eración <strong>de</strong> mallas, planos<br />

o contornos base, rápidam<strong>en</strong>te.<br />

Notas musicales.<br />

Este ejemplo, muestra la g<strong>en</strong>eración <strong>de</strong> notas musicales a mano alzada, mediante la<br />

opción <strong>de</strong> añadir planos <strong>de</strong> la aplicación.<br />

En las figuras 5.1 y 5.2, se muestran los planos g<strong>en</strong>erados por MOSKIS 3D para cada<br />

uno <strong>de</strong> los trazos.<br />

Figura 5.1: Planos 1 g<strong>en</strong>erados.<br />

Se ha añadido el plano a la v<strong>en</strong>tana 3D y se ha extruido posteriorm<strong>en</strong>te. No se ha<br />

aplicado ningún tipo <strong>de</strong> operador posteriorm<strong>en</strong>te, para po<strong>de</strong>r apreciar la malla poligonal<br />

102


103<br />

Figura 5.2: Planos 2 g<strong>en</strong>erados.<br />

Nota musical Vértices Caras<br />

Clave <strong>de</strong> Fa 154 152<br />

Punto <strong>de</strong> la clave <strong>de</strong> Fa 21 19<br />

Dos corcheas 263 261<br />

Corchea 91 89<br />

Semicorchea 225 223<br />

Cuadro 5.1: Tabla <strong>de</strong> resultados: Notas musicales.<br />

resultante <strong>de</strong> la extrusión <strong>de</strong>l plano (véase figura 5.3).<br />

Cerezas.<br />

Este ejemplo, muestra la g<strong>en</strong>eración <strong>de</strong> dos mallas 3D para formar unas cerezas.<br />

En la figura 5.4, se muestran los trazos realizados para formar las cerezas y <strong>en</strong> la figura<br />

5.5, los trazos realizados para formar el tronco.<br />

En la figura 5.6, se muestran las cerezas una vez formadas <strong>en</strong> la pantalla. Únicam<strong>en</strong>te se<br />

les ha aplicado color, es <strong>de</strong>cir, no se ha realizado ninguna operación <strong>de</strong>s<strong>de</strong> el mo<strong>de</strong>lador<br />

Bl<strong>en</strong><strong>de</strong>r.<br />

Pato.<br />

En el ejemplo, se muestra la g<strong>en</strong>eración <strong>de</strong> la malla 3D asociada al trazo realizado <strong>en</strong><br />

la figura 5.7 y 5.8.


104<br />

Figura 5.3: Notas musicales. Resultado obt<strong>en</strong>ido.<br />

Figura 5.4: Trazo realizado para las cerezas.<br />

En la figura 5.8, se ha hecho un r<strong>en</strong><strong>de</strong>rizado <strong>de</strong> la malla sin texturizar y sin ninguna<br />

operación posterior a la g<strong>en</strong>eración <strong>de</strong>s<strong>de</strong> MOSKIS 3D.<br />

En la figura 5.9, se muestra el mo<strong>de</strong>lo <strong>de</strong>l pato, texturizado pero sin aplicar ninguna<br />

operación <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, únicam<strong>en</strong>te se han añadido dos esferas negras como ojos.<br />

Cara.<br />

En el ejemplo, se muestra la g<strong>en</strong>eración <strong>de</strong> la malla 3D asociada al trazo realizado <strong>en</strong><br />

la figura 5.10 y 5.11.<br />

En la figura 5.11, se ha hecho un r<strong>en</strong><strong>de</strong>rizado <strong>de</strong> la malla sin texturizar y sin ninguna<br />

operación posterior a la g<strong>en</strong>eración <strong>de</strong>s<strong>de</strong> MOSKIS 3D.


105<br />

Figura 5.5: Trazo realizado para el tronco.<br />

Objeto Vértices polígono Caras plano Vértices objeto Caras objeto Duración<br />

Cereza 51 49 1241 2478 7 seg<br />

Tronco 91 89 1024 2043 11 seg<br />

Cuadro 5.2: Tabla <strong>de</strong> resultados: Cerezas.<br />

En la figura 5.12, se muestra el mo<strong>de</strong>lo <strong>de</strong> la cara, texturizado y con dos ojos g<strong>en</strong>erados<br />

<strong>en</strong> Bl<strong>en</strong><strong>de</strong>r, pero sin ninguna operación aplicada a la malla g<strong>en</strong>erada por MOSKIS 3D.<br />

Pajarracos.<br />

En el ejemplo, se muestra la g<strong>en</strong>eración <strong>de</strong> la malla 3D asociada al trazo realizado <strong>en</strong><br />

la figura 5.13 y 5.14.<br />

En la figura 5.15, se ve el resultado <strong>de</strong> la malla obt<strong>en</strong>ida por MOSKIS 3D.<br />

En la figura 5.16, se ve la textura que se le va a asignar a la malla, mediante mapeado<br />

<strong>de</strong> texturas UV, proceso que se muestra <strong>en</strong> la figura 5.17.<br />

El resultado final obt<strong>en</strong>ido se pue<strong>de</strong> ver <strong>en</strong> la figura 5.18.<br />

Objeto Vértices polígono Caras plano Vértices objeto Caras objeto Duración<br />

Pato 102 100 2345 4679 18 seg<br />

Cuadro 5.3: Tabla <strong>de</strong> resultados: Pato.


106<br />

Figura 5.6: Resultado final: Cerezas.<br />

Figura 5.7: Trazo realizado para la g<strong>en</strong>eración <strong>de</strong>l pato.<br />

Figura 5.8: Malla g<strong>en</strong>erada: Pato.


107<br />

Figura 5.9: Resultado final: Pato.<br />

Figura 5.10: Trazo realizado para la g<strong>en</strong>eración <strong>de</strong> la cara.<br />

Figura 5.11: Malla g<strong>en</strong>erada: Cara.


108<br />

Objeto Vértices polígono Caras plano Vértices objeto Caras objeto Duración<br />

Cara 127 125 3282 6560 35 seg<br />

Cuadro 5.4: Tabla <strong>de</strong> resultados: Cara.<br />

Figura 5.12: Resultado final: Cara.<br />

Figura 5.13: Trazo realizado para la g<strong>en</strong>eración <strong>de</strong>l pájaro.<br />

Objeto Vértices polígono Caras plano Vértices objeto Caras objeto Duración<br />

Pajarraco 192 190 2806 5608 1min, 5 seg<br />

Cuadro 5.5: Tabla <strong>de</strong> resultados: Pajarracos.


109<br />

Figura 5.14: G<strong>en</strong>eración <strong>de</strong> la triangulación para el pájaro.<br />

Figura 5.15: Malla g<strong>en</strong>erada: Pajarracos.


110<br />

Figura 5.16: Textura a aplicar.<br />

Figura 5.17: Mapeado UV.


Figura 5.18: Resultado final: Pajarracos.<br />

111


Capítulo 6<br />

Conclusiones y propuestas futuras.<br />

6.1. Conclusiones.<br />

6.2. Propuestas futuras.<br />

6.2.1. Optimización <strong>de</strong>l tiempo <strong>de</strong> g<strong>en</strong>eración.<br />

6.2.2. Operación <strong>de</strong> extrusión.<br />

6.2.3. Carga y almac<strong>en</strong>ami<strong>en</strong>to.<br />

6.1. Conclusiones.<br />

MOSKIS 3D g<strong>en</strong>era <strong>de</strong> forma automática mallas 3D a partir <strong>de</strong> trazos 2D <strong>de</strong>l usuario<br />

<strong>de</strong>fini<strong>en</strong>do un contorno, con lo cual el objetivo principal se ha cumplido, obt<strong>en</strong>i<strong>en</strong>do una<br />

herrami<strong>en</strong>ta que:<br />

G<strong>en</strong>era <strong>de</strong> forma instantánea y automática mallas 3D simplem<strong>en</strong>te mediante un trazo,<br />

que mediante otras técnicas sería mucho más complejo y costoso.<br />

A las mallas g<strong>en</strong>eradas <strong>en</strong> MOSKIS 3D, se les pue<strong>de</strong>n aplicar todos los operadores que<br />

Bl<strong>en</strong><strong>de</strong>r proporciona, para su modificación.<br />

Por ejemplo, <strong>en</strong> la figura 6.1, se muestra la creación <strong>de</strong>l mo<strong>de</strong>lo <strong>de</strong>l Quijote <strong>en</strong> MOSKIS<br />

3D.<br />

112


6.1. Conclusiones. 113<br />

Figura 6.1: Creación <strong>de</strong>l quijote.<br />

En la figura 6.2, se muestra como los mo<strong>de</strong>los pue<strong>de</strong>n variar su pose inicial, empleando<br />

esqueletos internos (se ve que el Quijote coge la lanza y cambia la pose <strong>de</strong> las piernas<br />

y <strong>de</strong>l brazo <strong>de</strong>recho).<br />

Figura 6.2: Esqueletos internos <strong>en</strong> el Quijote.<br />

En la figura 6.3, se pue<strong>de</strong> ver el resultado final.<br />

La resolución final <strong>de</strong> la malla, se <strong>de</strong>ci<strong>de</strong> <strong>en</strong> el último paso <strong>de</strong>l algoritmo, <strong>de</strong>cidi<strong>en</strong>to el<br />

tamaño <strong>de</strong> las superficies implícitas <strong>de</strong> las que se compone la malla <strong>en</strong> su g<strong>en</strong>eración.


6.2. Propuestas futuras. 114<br />

Figura 6.3: Resultado <strong>de</strong>l Quijote.<br />

El periodo <strong>de</strong> apr<strong>en</strong>dizaje <strong>de</strong> la herrami<strong>en</strong>ta, podría acotarse <strong>en</strong> minutos, ya que es muy<br />

s<strong>en</strong>cilla <strong>de</strong> utilizar.<br />

Se obti<strong>en</strong><strong>en</strong> mo<strong>de</strong>los orgánicos realistas, dada la suavidad <strong>de</strong> la malla obt<strong>en</strong>ida, y <strong>en</strong><br />

algunos casos, un aspecto irregular que pue<strong>de</strong> dotar la mo<strong>de</strong>lo <strong>de</strong> mayor realismo.<br />

MOSKIS 3D está <strong>de</strong>sarrollado para una herrami<strong>en</strong>ta <strong>de</strong> producción profesional, este<br />

paso es importante, ya que todas las herrami<strong>en</strong>tas <strong>de</strong> este tipo se <strong>en</strong>cu<strong>en</strong>tran <strong>en</strong> investigación<br />

y no existe ninguna herrami<strong>en</strong>tas <strong>de</strong> las características <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r que incorpore<br />

este tipo <strong>de</strong> mo<strong>de</strong>lado.<br />

6.2. Propuestas futuras.<br />

6.2.1. Optimización <strong>de</strong>l tiempo <strong>de</strong> g<strong>en</strong>eración.<br />

La g<strong>en</strong>eración <strong>de</strong> la malla 3D no es inmediata. Requiere cálculos elevados y el tiempo<br />

<strong>de</strong> respuesta pue<strong>de</strong> ser alto, <strong>de</strong>p<strong>en</strong>di<strong>en</strong>do <strong>de</strong>l tamaño <strong>de</strong> la figura y <strong>de</strong>l parámetro <strong>de</strong> nivel <strong>de</strong><br />

<strong>de</strong>talle.


6.2. Propuestas futuras. 115<br />

Cuanto mayor es la figura, más metaelipses se g<strong>en</strong>erarán para su cálculo y más tiempo <strong>de</strong><br />

ejecución será necesario.<br />

Cuando mayor es el nivel <strong>de</strong> <strong>de</strong>talle, más pequeñas son las metaelipses que g<strong>en</strong>eramos,<br />

con lo cual, también aum<strong>en</strong>ta el número <strong>de</strong> metaelipses y el tiempo <strong>de</strong> ejecución.<br />

Se pret<strong>en</strong><strong>de</strong> la disminución <strong>de</strong>l número <strong>de</strong> metaelipses para una ejecución más rápida, sin<br />

el <strong>de</strong>terioro <strong>de</strong> la calidad <strong>de</strong>l mo<strong>de</strong>lo obt<strong>en</strong>ido.<br />

Se propone un estudio intermedio <strong>en</strong>tre las dos aproximaciones <strong>de</strong>talladas cuando se hablaba<br />

<strong>de</strong> la creación <strong>de</strong>l objeto mediante metasuperficies, para g<strong>en</strong>erar un número intermedio<br />

<strong>de</strong> metaelipses <strong>en</strong>tre las dos aproximaciones.<br />

El algoritmo hasta la obt<strong>en</strong>ción <strong>de</strong>l plano permanecería sin variaciones, y se g<strong>en</strong>eraría el<br />

perfil <strong>de</strong> alturas <strong>de</strong> igual forma que se <strong>de</strong>tallaba anteriorm<strong>en</strong>te.<br />

Una vez g<strong>en</strong>erado el plano, para cada triángulo <strong>de</strong>l plano, se añadirán un conjunto <strong>de</strong><br />

metaelipses <strong>de</strong> difer<strong>en</strong>tes tamaños, <strong>de</strong> forma que las metaelipses <strong>de</strong> mayor tamaño permanecies<strong>en</strong><br />

<strong>en</strong> el c<strong>en</strong>tro <strong>de</strong> cada triángulo y fuese disminuy<strong>en</strong>do el tamaño <strong>en</strong> metaelipses situadas<br />

<strong>en</strong> los vértices, según el ángulo formado. Es una aproximación adaptativa.<br />

Esto ti<strong>en</strong>e s<strong>en</strong>tido, ya que <strong>en</strong> los extremos <strong>de</strong> los triángulos <strong>de</strong>l plano, es dón<strong>de</strong> más se<br />

<strong>de</strong>talla la figura.<br />

6.2.2. Operación <strong>de</strong> extrusión.<br />

Se pret<strong>en</strong><strong>de</strong> la incorporación <strong>de</strong> la operación <strong>de</strong> extrusión mediante la misma técnica <strong>de</strong><br />

trazos, utilizada para la creación.<br />

Bl<strong>en</strong><strong>de</strong>r ya posee extrusión, pero lo que se pret<strong>en</strong><strong>de</strong>, es po<strong>de</strong>r seleccionar con un trazo la<br />

zona <strong>de</strong> la malla a extruir, y mediante otro trazo, el camino que va a seguir esa extrusión.<br />

Este método pret<strong>en</strong><strong>de</strong> hacer más s<strong>en</strong>cillo, más rápido y <strong>de</strong> forma homogénea esta operación<br />

sobre el objeto que se ha creado.<br />

Trazo base.<br />

En primer lugar, el usuario realizará un trazo, seleccionando la zona <strong>de</strong>l objeto 3D a<br />

extruir. Este trazo se llamará trazo base (véase figura 6.4).


6.2. Propuestas futuras. 116<br />

El trazo se proyectará sobre la figura para ver qué puntos <strong>de</strong> la figura forman parte <strong>de</strong><br />

este trazo. Al proyectar el trazo, para cada punto <strong>de</strong> éste, se obt<strong>en</strong>drán dos puntos <strong>de</strong> la<br />

figura, uno más cercano (el que nos interesa) y otro más lejano (véase 6.4).<br />

Figura 6.4: Selección <strong>de</strong>l trazo base.<br />

Trazo <strong>de</strong> extrusión.<br />

A continuación, el usuario realizará un trazo, llamado trazo <strong>de</strong> extrusión, con la forma<br />

que <strong>de</strong>sea conseguir con la operación.<br />

El usuario pue<strong>de</strong> <strong>de</strong>sear una extrusión positiva, es <strong>de</strong>cir, una prolongación <strong>de</strong>l objeto<br />

3D hacia el exterior, sigui<strong>en</strong>do la forma <strong>de</strong>l trazo realizado; o una extrusión negativa,<br />

es <strong>de</strong>cir, una concavidad <strong>en</strong> el interior <strong>de</strong>l objeto 3D con la forma indicada.<br />

En la figura 6.5, se observa a la izquierda un trazo <strong>de</strong> extrusión para una extrusión<br />

positiva y a la <strong>de</strong>recha, el trazo realizado para una extrusión negativa.<br />

G<strong>en</strong>eración <strong>de</strong> la extrusión.<br />

Para la g<strong>en</strong>eración <strong>de</strong> la extrusión se sigu<strong>en</strong> los sigui<strong>en</strong>tes pasos:<br />

1. Se recupera el objeto 3D formado por metaelem<strong>en</strong>tos (el que se t<strong>en</strong>ía <strong>en</strong> la esc<strong>en</strong>a<br />

antes <strong>de</strong>l paso a malla poligonal).<br />

2. Se g<strong>en</strong>era un polígono a partir <strong>de</strong>l trazo base realizado por el usuario.


6.2. Propuestas futuras. 117<br />

Figura 6.5: Selección <strong>de</strong>l trazo <strong>de</strong> extrusión.<br />

3. Se proce<strong>de</strong>rá a la triangularización básica <strong>de</strong>l polígono resultante.<br />

A continuación se realizará la optimización basada <strong>en</strong> Delaunay com<strong>en</strong>tada anteriorm<strong>en</strong>te,<br />

para repartir la superficie <strong>en</strong> triángulos <strong>de</strong> forma homogénea (véase<br />

figura 6.6).<br />

Se continuará <strong>de</strong>tectando la espina dorsal <strong>de</strong>l polígono, obt<strong>en</strong>i<strong>en</strong>do una serie <strong>de</strong><br />

puntos conectados, formando el eje c<strong>en</strong>tral <strong>de</strong> la superficie seleccionada (véase<br />

figura 6.6).<br />

No se realizarán los cálculos para la elevación <strong>de</strong> la espina dorsal, porque no se<br />

quiere crear un objeto 3D a partir <strong>de</strong>l trazo base, sino extruir la forma <strong>de</strong>l trazo,<br />

a lo largo <strong>de</strong>l trazo <strong>de</strong> extrusión, por lo que no ti<strong>en</strong>e s<strong>en</strong>tido el cálculo <strong>de</strong>l objeto<br />

3D asociado a esa forma, y por tanto, no ti<strong>en</strong>e s<strong>en</strong>tido el paso <strong>de</strong> elevación <strong>de</strong> la<br />

espina dorsal.<br />

4. Una vez obt<strong>en</strong>ido el plano correspondi<strong>en</strong>te al trazo base, y la espina dorsal <strong>de</strong><br />

dicho plano, se proce<strong>de</strong>rá a rell<strong>en</strong>ar el plano con metaelipses.<br />

Con este paso, se obti<strong>en</strong><strong>en</strong> un conjunto <strong>de</strong> metaelem<strong>en</strong>tos que <strong>de</strong>fin<strong>en</strong> la superficie<br />

<strong>de</strong>limitada por el trazo base.<br />

En el caso <strong>de</strong> una extrusión positiva, las metaelipses g<strong>en</strong>eradas t<strong>en</strong>drán una atracción<br />

positiva. En el caso <strong>de</strong> una extrusión negativa, las metaelipses g<strong>en</strong>eradas<br />

t<strong>en</strong>drán una atracción negativa.


6.2. Propuestas futuras. 118<br />

Figura 6.6: Triangulación y espina <strong>de</strong>l trazo base.<br />

5. Se g<strong>en</strong>era un polígono a partir <strong>de</strong>l trazo <strong>de</strong> extrusión.<br />

6. Se proce<strong>de</strong> a la extrusión <strong>de</strong>l trazo base a lo largo <strong>de</strong>l trazo <strong>de</strong> extrusión.<br />

Se realizan proyecciones <strong>de</strong>l conjunto <strong>de</strong> metaelipses, <strong>de</strong> forma que cada una <strong>de</strong><br />

las proyecciones resultantes, que<strong>de</strong>n situadas perp<strong>en</strong>dicularm<strong>en</strong>te con respecto al<br />

trazo <strong>de</strong> extrusión y se redim<strong>en</strong>sion<strong>en</strong> para ajustarse al tamaño <strong>de</strong>l trazo (véase<br />

figura 6.7).<br />

Figura 6.7: Proyecciones.<br />

El número <strong>de</strong> proyecciones <strong>de</strong>p<strong>en</strong><strong>de</strong>rá <strong>de</strong>l nivel <strong>de</strong> <strong>de</strong>talle con el cual se haya<br />

g<strong>en</strong>erado el polígono <strong>de</strong>l trazo <strong>de</strong> extrusión.<br />

En los casos, <strong>en</strong> los que la distancia <strong>en</strong>tre los vértices <strong>de</strong>l polígono <strong>de</strong> extrusión,


6.2. Propuestas futuras. 119<br />

sea muy gran<strong>de</strong>, se producirán huecos. Para evitar los huecos se g<strong>en</strong>erarán proyecciones<br />

intermedias.<br />

7. Se vuelve a g<strong>en</strong>erar la malla polígonal a partir <strong>de</strong>l objeto 3D g<strong>en</strong>erado (objeto<br />

anterior+operación <strong>de</strong> extrusión).<br />

6.2.3. Carga y almac<strong>en</strong>ami<strong>en</strong>to.<br />

Sería <strong>de</strong>seable que el trabajo realizado <strong>de</strong>s<strong>de</strong> MOSKIS 3D pudiese concluir <strong>en</strong> varias<br />

sesiones.<br />

Para conseguir este objetivo se propon<strong>en</strong> dos opciones:<br />

Carga <strong>de</strong> mallas <strong>de</strong>s<strong>de</strong> la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

El problema <strong>de</strong> esta proposición, es que si se cargan mallas no g<strong>en</strong>eradas con MOS-<br />

KIS 3D, se t<strong>en</strong>dría que calcular el objeto mediante metasuperficies para po<strong>de</strong>r aplicar<br />

<strong>de</strong>spués sucesivas extrusiones.<br />

Pero una implem<strong>en</strong>tación que consiguiese esto, permitiría la modificación <strong>de</strong> cualquier<br />

malla, g<strong>en</strong>erada <strong>en</strong> Bl<strong>en</strong><strong>de</strong>r o por MOSKIS 3D.<br />

Almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong>l trabajo.<br />

Se podría almac<strong>en</strong>ar el trabajo realizado para cargarlo <strong>de</strong>s<strong>de</strong> MOSKIS 3D y continuarlo<br />

hasta su finalización, aunque <strong>en</strong> el caso <strong>en</strong> el que se consiguiese cargar cualquier malla<br />

<strong>de</strong>s<strong>de</strong> la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, y posteriorm<strong>en</strong>te aplicar la operación <strong>de</strong> extrusión, la<br />

opción <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to no sería necesaria.


Bibliografía<br />

[BBr97] BBrush. http://grafit.netpositive.hu/cont<strong>en</strong>t/view/135/26/, 1997.<br />

[CC78] E. Catmull and J. Clark. Recursively g<strong>en</strong>erated b-spline surfaces on arbitrary<br />

topological meshes. Computer-Ai<strong>de</strong>d Design, 10(6):350–355, 1978.<br />

[el06] Wikipedia: La <strong>en</strong>ciclopedia libre. http://es.wikipedia.org, 2006.<br />

[Fer05]<br />

[GG04]<br />

[GM05a]<br />

[GM05b]<br />

Marcos Fernán<strong>de</strong>z. Mo<strong>de</strong>los <strong>de</strong> repres<strong>en</strong>tación <strong>de</strong> objetos 3d. Universidad <strong>de</strong><br />

Val<strong>en</strong>cia, 2005.<br />

I. Gijón and C. González. <strong>Sistema</strong> <strong>de</strong> mo<strong>de</strong>lado tridim<strong>en</strong>sional <strong>basado</strong> <strong>en</strong> trazos<br />

libres: Moskis 3d. Jornadas <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r, 2004.<br />

Carlos González Morcillo. Introducción. síntesis <strong>de</strong> la imag<strong>en</strong> 3d. Animación<br />

para la Comunicación, 2005.<br />

Carlos González Morcillo. Mo<strong>de</strong>lado. construcción <strong>de</strong> geometría 3d. Animación<br />

para la Comunicación, 2005.<br />

[Iga95] Takeo Igarashi. http://www-ui.is.s.u-tokyo.ac.jp/ takeo/in<strong>de</strong>x.html, 1995.<br />

[IM99]<br />

[Ker00]<br />

T. Igarashi and S. Matsuoka. Teddy: A sketching interface for 3d freeform <strong>de</strong>sign.<br />

ACM SIGGRAPH’99, 1999.<br />

I. Victor Kerlow. The art of 3D computer animation and imaging. John Wiley &<br />

Sons, 2000.<br />

[NR00] L.Ñarváez and I. Rudoming. Mod3d: Mo<strong>de</strong>lador 3d <strong>basado</strong> <strong>en</strong> trazos 2d. 2000.<br />

[Ram05a] Ricardo Ramos. Esquemas <strong>de</strong> mo<strong>de</strong>lado sólido. Universidad <strong>de</strong> Oviedo, 2005.<br />

[Ram05b] Ricardo Ramos. Informática gráfica: Perspectiva g<strong>en</strong>eral. Universidad <strong>de</strong> Oviedo,<br />

2005.<br />

[Ram05c] Ricardo Ramos. Introducción al mo<strong>de</strong>lado sólido. Universidad <strong>de</strong> Oviedo, 2005.<br />

[Rem05] Inmaculada Remolar. Mo<strong>de</strong>lado 3d. Universidad <strong>de</strong> Jaume, 2005.<br />

[RZK96]<br />

Hughes J. R.C. Zeleznik K.H. Sketch: An interface for sketching 3d esc<strong>en</strong>es. ACM<br />

SIGGRAPH’99, pages 163–170, 1996.<br />

120


BIBLIOGRAFÍA 121<br />

[T.94]<br />

Bau<strong>de</strong>l T. A mark-based interaction paradigm for free-hand drawing. Confer<strong>en</strong>ce<br />

UIST’94, pages 185–192, 1994.<br />

[ZBr97] ZBrush. http://www.pixologic.com/zbrush/home/home.html, 1997.


Anexo A<br />

Instalación <strong>de</strong> la aplicación.<br />

Para la instalación <strong>de</strong>l sistema se sigu<strong>en</strong> los sigui<strong>en</strong>tes pasos:<br />

• Instalación <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r 2.41.<br />

Es necesaria esta versión <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r (la última hasta el mom<strong>en</strong>to), ya que <strong>en</strong> la<br />

última versión <strong>de</strong>l API Bl<strong>en</strong><strong>de</strong>r-Python, han sido introducidos nuevos módulos<br />

utilizados <strong>en</strong> MOSKIS 3D, que hac<strong>en</strong> que no sea compatible con versiones anteriores<br />

<strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

• Copia <strong>de</strong> archivos.<br />

Se copian los archivos <strong>de</strong> la ruta software/moskis3d <strong>de</strong>l cd adjunto, <strong>en</strong> la carpeta<br />

.bl<strong>en</strong><strong>de</strong>r/scripts <strong>de</strong> la aplicación Bl<strong>en</strong><strong>de</strong>r.<br />

Para la ejecución <strong>de</strong>l sistema se sigu<strong>en</strong> los sigui<strong>en</strong>tes pasos:<br />

• Abrir la aplicación Bl<strong>en</strong><strong>de</strong>r.<br />

• Configurar el área <strong>de</strong> trabajo <strong>de</strong> forma cómoda, por ejemplo dividi<strong>en</strong>do la v<strong>en</strong>tana<br />

3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r que aparece por <strong>de</strong>fecto <strong>en</strong> dos (véase figura A.1).<br />

• Pulsar el botón situado a la izquierda <strong>de</strong> una <strong>de</strong> las v<strong>en</strong>tanas. Se <strong>de</strong>splegará un<br />

m<strong>en</strong>ú para seleccionar el tipo <strong>de</strong> v<strong>en</strong>tana. Seleccionar Text Editor (véase figura<br />

A.1).<br />

• Pulsar la opción File, y a continuación Op<strong>en</strong>, situada a continuación <strong>de</strong>l m<strong>en</strong>ú <strong>de</strong><br />

selección <strong>de</strong> tipos <strong>de</strong> v<strong>en</strong>tanas (véase figura A.2).<br />

122


123<br />

Figura A.1: Selección <strong>de</strong>l tipo <strong>de</strong> v<strong>en</strong>tana.<br />

Buscar y abrir el archivo mMain.py <strong>en</strong> la ruta .bl<strong>en</strong><strong>de</strong>r/scripts <strong>de</strong>l programa Bl<strong>en</strong><strong>de</strong>r.<br />

Aparecerá el código <strong>de</strong>l archivo seleccionado.<br />

Figura A.2: Abrir archivo.<br />

• Ejecutar la aplicación.<br />

Para ello, seleccionar <strong>de</strong>l mismo m<strong>en</strong>ú File citado anteriorm<strong>en</strong>te, la opción Run<br />

Python Script, o ejecutar Alt+P.<br />

En este mom<strong>en</strong>to aparecerá <strong>en</strong> la pantalla la interfaz <strong>de</strong> MOSKIS 3D.


Anexo B<br />

Manual <strong>de</strong> usuario.<br />

Inicio <strong>de</strong> la aplicación.<br />

• Detail View: si está activado, se proce<strong>de</strong>rá a una ejecución paso a paso, permiti<strong>en</strong>do<br />

la modificación <strong>de</strong> <strong>de</strong>terminados parámetros. Si no está activado, se g<strong>en</strong>erará<br />

automáticam<strong>en</strong>te el objeto 3D a partir <strong>de</strong> un trazo <strong>en</strong> el área <strong>de</strong> dibujo (véase<br />

figura B.1).<br />

• Área <strong>de</strong> dibujo: área <strong>en</strong> la que se dibuja el contorno 3D.<br />

Si el botón Detail View está <strong>de</strong>sactivado, cuando el usuario termine <strong>de</strong> g<strong>en</strong>erar el<br />

contorno, se pasará a la g<strong>en</strong>eración <strong>de</strong>l objeto y durante los cálculos, se podrá ver<br />

<strong>en</strong> la parte superior <strong>de</strong> la v<strong>en</strong>tana, el estado <strong>de</strong> la ejecución <strong>de</strong>l algoritmo (véase<br />

figura B.1).<br />

Figura B.1: G<strong>en</strong>eración automática.<br />

124


125<br />

En la figura B.1, se muestran los tres estados que se pue<strong>de</strong>n observar según la<br />

barra <strong>de</strong> progreso situada <strong>en</strong> la parte superior <strong>de</strong> la aplicación.<br />

Si el botón Detail View está activado, se pasará a la pantalla <strong>de</strong> opciones <strong>de</strong> un<br />

polígono (véase figura B.2) que se <strong>de</strong>talla a continuación.<br />

Opciones <strong>de</strong>l polígono.<br />

• Opciones <strong>de</strong> visualización.<br />

◦ Vertex: visualizar los vértices.<br />

◦ Ext. Edges: visualizar las aristas <strong>de</strong>l polígono.<br />

◦ Obj. Axes: visualizar los ejes <strong>de</strong> coor<strong>de</strong>nadas.<br />

Figura B.2: Opciones Polígono.<br />

• Paneles.<br />

◦ Polygon:<br />

⋄ Detail: permite la modificación <strong>de</strong>l nivel <strong>de</strong> <strong>de</strong>talle <strong>de</strong>l polígono (véase<br />

figura B.2).<br />

◦ Add:<br />

⋄ Contour: aña<strong>de</strong> el polígono a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r (véase figura B.3).<br />

◦ Window:<br />

⋄ Next: pasa a la pantalla <strong>de</strong> opciones <strong>de</strong>l plano.<br />

Opciones <strong>de</strong>l plano.


126<br />

Figura B.3: Opciones Polígono.<br />

• Opciones <strong>de</strong> visualización.<br />

◦ Vertex: mostrar vértices <strong>de</strong>l plano.<br />

◦ Ext. Edges: mostrar aristas externas, es <strong>de</strong>cir, las aristas <strong>de</strong>l polígono.<br />

◦ Faces: mostrar las caras g<strong>en</strong>eradas por la triangulación.<br />

◦ Int. Edges: mostrar las aristas internas, es <strong>de</strong>cir, las g<strong>en</strong>eradas <strong>en</strong> el proceso<br />

<strong>de</strong> triangulación.<br />

◦ Obj. Axes: mostrar los ejes <strong>de</strong> coor<strong>de</strong>nadas.<br />

• Área <strong>de</strong> dibujo:<br />

◦ Desplazami<strong>en</strong>to: mediante el botón <strong>de</strong>recho <strong>de</strong>l ratón, y su movimi<strong>en</strong>to se<br />

pue<strong>de</strong> mover el objeto <strong>de</strong> un lado a otro.<br />

◦ Rotación: mediante el botón c<strong>en</strong>tral <strong>de</strong>l ratón, se pue<strong>de</strong> rotar el objeto.<br />

◦ Escalado: girando la rueda <strong>de</strong>l ratón se pue<strong>de</strong> escalar el objeto.<br />

• Paneles (véase figura B.4).<br />

◦ Plane.<br />

⋄ Delaunay: si está activado, está calculada la triangulación basada <strong>en</strong> Delaunay.<br />

⋄ Spine: si está activado, se muestra la espina dorsal <strong>de</strong>l plano.


127<br />

◦ G<strong>en</strong>erate Object.<br />

⋄ Detail: permite graduar el nivel <strong>de</strong> <strong>de</strong>talle <strong>de</strong>l objeto 3D que se pret<strong>en</strong><strong>de</strong><br />

obt<strong>en</strong>er. Aum<strong>en</strong>tarlo pue<strong>de</strong> elevar <strong>en</strong> gran medida el coste computacional.<br />

⋄ Smooth: permite graduar el nivel <strong>de</strong> suavizado <strong>de</strong> la malla a obt<strong>en</strong>er. Se<br />

calcula automáticam<strong>en</strong>te según la figura, pero pue<strong>de</strong> modificarse para<br />

obt<strong>en</strong>er otros aspectos.<br />

⋄ Inflation: g<strong>en</strong>era el objeto 3D.<br />

◦ Add.<br />

⋄ Contour: aña<strong>de</strong> el contorno (polígono) a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

⋄ Plane: aña<strong>de</strong> el plano a la v<strong>en</strong>tana 3D <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r.<br />

Figura B.4: Opciones Plano.<br />

◦ Window.<br />

⋄ Back: vuelve a la pantalla <strong>de</strong> opciones <strong>de</strong>l polígono.<br />

Opciones <strong>de</strong>l objeto (véase imag<strong>en</strong> B.5).<br />

• Opciones <strong>de</strong> visualización.<br />

◦ Plane: muestra el plano original para comparar el objeto obt<strong>en</strong>ido.<br />

◦ Object: muestra el objeto 3D.


128<br />

◦ Obj. Axes: muestra los ejes <strong>de</strong> coor<strong>de</strong>nadas <strong>de</strong>l objeto.<br />

• Área <strong>de</strong> dibujo: permite las opciones <strong>de</strong> rotado, escalado y <strong>de</strong>splazami<strong>en</strong>to <strong>de</strong>l<br />

objeto igual que <strong>en</strong> el caso anterior.<br />

• Paneles:<br />

Figura B.5: Opciones Objeto.<br />

◦ G<strong>en</strong>erate Object: mismas opciones <strong>de</strong> Detail, Smooth y Inflation que <strong>en</strong> la<br />

fase <strong>de</strong> opciones <strong>de</strong>l plano.<br />

◦ Add: mismas opciones <strong>de</strong> Contour y Plane que <strong>en</strong> la fase <strong>de</strong> opciones <strong>de</strong>l<br />

plano.<br />

◦ Window:<br />

⋄ Back: este botón vuelve a la fase <strong>de</strong> opciones <strong>de</strong>l plano.


Anexo C<br />

Diagramas <strong>de</strong> clases.<br />

En la figura C.1 se muestran los diagramas <strong>de</strong> clases más importantes <strong>de</strong>l sistema.<br />

Figura C.1: Diagrama <strong>de</strong> clases <strong>de</strong> objetos.<br />

Hay que <strong>de</strong>stacar, que las clases mPolygon, mSpine y mObject, manti<strong>en</strong><strong>en</strong> información<br />

redundante para agilizar los cálculos y permitir un fácil acceso.<br />

En la figura C.2 se muestran los diagramas <strong>de</strong> las clases <strong>de</strong> utilida<strong>de</strong>s que están implicadas<br />

<strong>en</strong> la creación <strong>de</strong> un objeto nuevo.<br />

En la figura C.3, se muestran otras clases, incluída la clase principal, mMain.<br />

129


130<br />

Figura C.2: Diagrama <strong>de</strong> utilida<strong>de</strong>s.<br />

Figura C.3: Otras clases.


Anexo D<br />

Diagramas <strong>de</strong> casos <strong>de</strong> uso.<br />

Los diagramas <strong>de</strong> casos <strong>de</strong> uso <strong>de</strong>scrib<strong>en</strong> <strong>de</strong> una manera rápida y clara la funcionalidad<br />

<strong>de</strong>l sistema y la interacción <strong>de</strong>l usuario con él.<br />

En la figura D.1 se muestra el diagrama <strong>de</strong> casos <strong>de</strong> uso para la ejecución <strong>de</strong> la vista<br />

<strong>de</strong>tallada <strong>de</strong> la aplicación.<br />

Figura D.1: Ejecución vista <strong>de</strong>tallada.<br />

En la figura D.2, se muestra el diagrama <strong>de</strong> casos <strong>de</strong> uso para la ejecución <strong>de</strong> la vista<br />

automática.<br />

El usuario dibuja un contorno y el sistema g<strong>en</strong>era el objeto 3D asociado, permiti<strong>en</strong>do una<br />

131


132<br />

vez g<strong>en</strong>erado, la modificación <strong>de</strong> parámetros como el nivel <strong>de</strong> <strong>de</strong>talle y el suavizado para<br />

modificar la g<strong>en</strong>eración obt<strong>en</strong>ida. También se permite añadir el contorno y el plano g<strong>en</strong>erado.<br />

Figura D.2: Ejecución vista automática.


Anexo E<br />

Diagramas <strong>de</strong> compon<strong>en</strong>tes.<br />

Un diagrama <strong>de</strong> compon<strong>en</strong>tes muestra las organizaciones y <strong>de</strong>p<strong>en</strong><strong>de</strong>ncias lógicas <strong>en</strong>tre<br />

compon<strong>en</strong>tes software, como ficheros y paquetes.<br />

En la figura E.1 se muestra el diagrama <strong>de</strong> compon<strong>en</strong>tes <strong>de</strong> los ficheros <strong>de</strong> la aplicación.<br />

Figura E.1: Diagrama 1 <strong>de</strong> compon<strong>en</strong>tes.<br />

En la figura E.2, se muestra el diagrama <strong>de</strong> compon<strong>en</strong>tes <strong>de</strong> los ficheros <strong>de</strong> la aplicación,<br />

con paquetes <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r y Python.<br />

133


Figura E.2: Diagrama 2 <strong>de</strong> compon<strong>en</strong>tes.<br />

134


Anexo F<br />

CD adjunto.<br />

El cd adjunto, t<strong>en</strong>drá la sigui<strong>en</strong>te estructura <strong>de</strong> directorios:<br />

Software<br />

• Bl<strong>en</strong><strong>de</strong>r: <strong>en</strong> este directorio se <strong>en</strong>cu<strong>en</strong>tra la versión 2.41 <strong>de</strong> Bl<strong>en</strong><strong>de</strong>r para distintas<br />

plataformas.<br />

• Código fu<strong>en</strong>te MOSKIS 3D: <strong>en</strong> este directorio se <strong>en</strong>cu<strong>en</strong>tra el código fu<strong>en</strong>te <strong>de</strong><br />

MOSKIS 3D.<br />

Docum<strong>en</strong>tación<br />

• Memoria: <strong>en</strong> este directorio se <strong>en</strong>cu<strong>en</strong>tra la memoria <strong>de</strong>l proyecto, junto con las<br />

imág<strong>en</strong>es incorporadas <strong>en</strong> ella.<br />

• Mo<strong>de</strong>los resultados: <strong>en</strong> este directorio se <strong>en</strong>cu<strong>en</strong>tran los resultados <strong>de</strong> los mo<strong>de</strong>los<br />

realizados con MOSKIS 3D.<br />

Dada la ext<strong>en</strong>sión <strong>de</strong>l código fu<strong>en</strong>te (más <strong>de</strong> 5000 líneas) no se imprimirá <strong>en</strong> este docum<strong>en</strong>to,<br />

pue<strong>de</strong> <strong>en</strong>contrarse <strong>en</strong> el cd, <strong>en</strong> la ruta Software/Código fu<strong>en</strong>te MOSKIS 3D.<br />

135

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!