Sistema de Modelado Tridimensional basado en Trazos Libres ...
Sistema de Modelado Tridimensional basado en Trazos Libres ...
Sistema de Modelado Tridimensional basado en Trazos Libres ...
- 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