Animación 3D del Raquis Cervical : aplicación para la valoración de cervicalgias
Full text
PFC: Animación 3D del Raquis Cervical. Aplicación para la Valoración de Cervicalgias Febrero 2010 Pablo Silvestre Soler Tutor en la empresa: Carlos Chirivella Moreno Tutor en ETSINF: Javier Lluch Crespo
ÍNDICE Agradecimientos...................................................................................... 5 Resumen................................................................................................. 6 1.- Introducción...................................................................................... 8 1.1.- Origen del trabajo.................................................................. 8 1.2.- Antecedentes generales.......................................................... 9 1.2.1.- Información anatómica: Cervicalgias............................... 9 1.2.2.- Sistemas de valoración funcional.................................... 11 1.3.- Antecedentes técnicos............................................................ 15 1.3.1.- Modeladores gráficos 3D............................................... 16 1.3.1.1.- Blender.......................................................... 16 1.3.1.2.- Maya............................................................. 17 1.3.1.3.- 3ds Max......................................................... 18 1.3.2.- Motores gráficos 3D...................................................... 19 1.3.2.1.- Ogre.............................................................. 19 1.3.2.2.- 3D Game Studio.............................................. 22 1.3.2.3.- Crystal Space.................................................. 23 1.4.- Objetivos del trabajo............................................................... 25 1.5.- Plan de trabajo....................................................................... 26 2.- Material y métodos........................................................................... 28 2.1.- Requerimientos....................................................................... 31 2.1.1.- Gestión de ficheros de prueba........................................ 32 2.1.1.1.- Abrir fichero de prueba..................................... 33 2.1.1.2.- Borrar fichero de prueba................................... 34 2.1.2.- Visualización de la animación......................................... 35 2.1.2.1.- Cargar prueba................................................. 36 2.1.3.- Modificación del momento de animación.......................... 37 2.1.3.1.- Reproducir prueba........................................... 38 2.1.3.2.- Rebobinar prueba............................................ 39 2.1.3.3.- Pausar prueba................................................. 40 2.1.3.4.- Cambiar posición de reproducción de prueba........ 41 2.1.3.5.- Limitar rango de reproducción........................... 42 2.1.4.- Modificación de cámaras................................................ 43 2.1.4.1.- Cambiar cámara.............................................. 44 2.1.4.2.- Cambiar posición............................................. 45 2.1.4.3.- Cambiar orientación......................................... 46
2.2.- Diseño de la aplicación............................................................. 47 2.2.1.- Arquitectura del proyecto.............................................. 47 2.2.1.1.- Animación Ogre............................................... 48 2.2.1.2.- Interfaz.......................................................... 48 2.2.1.3.- Recursos externos........................................... 48 2.2.2.- Arquitectura de clases................................................... 49 2.2.2.1.- Clases Ogre.................................................... 49 2.2.2.2.- Clases Interfaz................................................ 51 2.2.2.3.- Clases externas............................................... 51 2.2.3.- Ficheros de prueba de pacientes..................................... 52 2.2.3.1.- Tipo y nomenclatura........................................ 52 2.2.3.2.- Estructura del contenido................................... 55 2.2.4.- Interfaz de usuario....................................................... 56 2.2.4.1.- Diseño y elementos.......................................... 57 2.3.- Desarrollo de la aplicación......................................................... 60 2.3.1.- Blender....................................................................... 60 2.3.1.1.- Modelado de la malla........................................ 62 2.3.1.2.- Esqueleto....................................................... 64 2.3.1.3.- Mapeado de texturas........................................ 66 2.3.1.4.- Exportación del modelo.................................... 67 2.3.2.- Ogre.......................................................................... 72 2.3.2.1.- Cargar el modelo............................................. 72 2.3.2.2.- Añadir materiales al modelo texturizado.............. 76 2.3.2.3.- Animación del modelo....................................... 78 2.3.2.4.- Interacción con el usuario................................. 81 2.3.3.- Visual Studio 2005: MFC............................................... 83 2.3.3.1.- Desarrollo básico de la interfaz.......................... 83 2.3.3.2.- Gestión de ficheros de pacientes........................ 87 2.3.3.3.- Cargar animación de Ogre................................. 88 2.3.3.4.- Capturar eventos de la interfaz.......................... 91 2.3.3.5.- Measurement Studio........................................ 94 3.- Resultados y discusión................................................................... 100 3.1.- Análisis de resultados obtenidos.............................................. 101 4.- Conclusiones.................................................................................. 109 BIBLIOGRAFÍA..................................................................................... 111 Listado de ilustraciones.............................................................................. 114 ANEXO.................................................................................................. 116 a) Manual del instalador................................................................. 116 b) Manual de usuario..................................................................... 123
5 Animación 3D del Raquis C ervical AGRADECIMIENTOS Quiero dar mi más sincero agradecimiento al personal del Instituto de Biomecánica de Valencia (IBV), centro que me ha permitido desarrollar este proyecto final de carrera en sus instalaciones y me ha formado y guiado para llevarlo a cabo con éxito. También debo agradecer a mis tutores de proyecto, tanto de la Facultad de Informática (ETSINF) de la Universidad Politécnica de Valencia como del IBV, sus consejos y directrices que han permitido trazar una línea de proyecto marcada por la fluidez en la elaboración de dicha tarea. Gracias a todos los que han hecho esto posible.
6 Animación 3D del Raquis C ervical RESUMEN El proyecto definido en la memoria se engloba dentro del ámbito del diagnóstico a través de una valoración funcional y, de forma más concreta, en la valoración de cervicalgias. Se trata de una herramienta de apoyo que otorga, a la persona encargada de realizar un diagnóstico, de un punto de vista alejado de la rigidez de representación de los datos, pero totalmente fiel a los mismos. Esto se basa en una gran premisa: una imagen vale más que mil palabras. Extrapolar esta afirmación al proyecto actual es inmediato: una animación en tres dimensiones en muchas ocasiones es mucho más útil de cara al usuario de un programa que un gran compendio de datos numéricos. La forma y velocidad en la que la información es recibida es totalmente distinta. Mientras que para sacar conclusiones de unos datos es preciso realizar un procesamiento y una interpretación de los mismos, una animación permite obtener una conclusión de forma prácticamente instantánea. Sin ser un experto cualificado en la materia a través de una animación se puede comprobar si el movimiento realizado por un paciente es relativamente normal o no, hecho que en algunas ocasiones no es posible al contemplar los datos en primera instancia. Para que la animación tenga una física realista, se emplean ángulos calculados en función del tiempo, a través de unos marcadores que se le colocan al paciente en puntos estratégicos y que permiten describir de forma matemática los movimientos cervicales. Por tanto mediante la interpolación de estos ángulos, se obtiene un movimiento fluido sobre un modelo en tres dimensiones, que dispone de la estructura necesaria para describir de forma precisa los movimientos del raquis cervical. Otro aspecto a tener en cuenta es la posibilidad de interacción con la animación. A diferencia de un vídeo en el que sólo es posible cambiar el momento de reproducción, la aplicación añade una variable más: la posibilidad de cambiar la orientación y posición espacial de la cámara que permite la visualización de la animación. De esta forma es posible comprobar desde la mejor posición posible un determinado gesto o movimiento realizado por el paciente sin necesidad de que repita la prueba o se coloque una cámara en la posición de visualización deseada. En consecuencia y tras establecer las bases que describen el proyecto, los contenidos de la memoria están estructurados siguiendo un orden cronológico y causal argumentando los pasos para la realización del mismo. En primer lugar se describe el ámbito en el que se encapsula el tema del proyecto elegido (cervicalgias y sistemas de valoración funcional) y se analizan las herramientas que permiten desarrollar dicha actividad de la mejor forma posible. A continuación, una vez elegidas las herramientas para realizar el proyecto (Ogre como motor gráfico y Blender como modelador 3D), se plantea una serie requerimientos que se deben cumplir que conforman la funcionalidad básica de que dispondrá la aplicación a crear. El siguiente paso es el análisis y la justificación de diseño, formato, nomenclatura y otros aspectos vinculados con el aspecto y la estructura de la aplicación. En este punto se define la arquitectura general del proyecto y cómo se organiza la información, con el fin último de mejorar la usabilidad y hacerla atractiva para el usuario.
7 Animación 3D del Raquis C ervical Tras establecer un diseño, se analiza detenidamente y de forma lineal todas las estrategias y pasos seguidos para llevar a cabo la aplicación. Se parte de aspectos y opciones relativas al modelado gráfico con Blender, la utilización del modelo en Ogre y, por último, su vinculación con una interfaz funcional. Los últimos pasos de la memoria defienden, muestran y analizan los resultados que se pueden obtener con la utilización de esta aplicación. Se muestra la validez de dicha aplicación, basándose en ejemplos para detectar posibles anomalías en pacientes con algún tipo de afección cervical. Posteriormente también se incluyen posibles ampliaciones consideradas y conclusiones a las que se ha llegado tras la realización de la misma. Por último se incluye el conjunto de documentos y enlaces que se han empleado para llevar a cabo el proyecto, así como un anexo con un manual de instalación de la aplicación y un manual de usuario explicando los aspectos básicos para utilizar eficientemente la aplicación.
INTRODUCCIÓN Origen del trabajo 8 Animación 3D del Raquis C ervical 1.- Introducción 1.1.- Origen del trabajo Las cervicalgias, dolor en la región cervical, son una afección muy frecuente en la población actual. Alrededor del 50% de la población adulta sufre en algún momento de su vida una cervicalgia. Son descritas en los códigos CIE-9 en el epígrafe 723 y según el manual elaborado por la Seguridad Social en el año 2008, sobre tiempos estándar de baja laboral, el tiempo medio que un trabajador permanece de baja en España se sitúa en los 43 días, y en relación a las cervicalgias se sitúa en torno a 20 días, lo que repercute sobre el coste económico que deriva de dicha situación tanto a nivel personal como empresarial. Las causas para su aparición tienen diferentes orígenes, pero las más frecuentes derivan de mantener una postura incorrecta forzada y mantenida durante mucho tiempo que provoca una alteración funcional que se manifiesta mediante dolor. Sin embargo hay un gran problema para su diagnóstico: no siempre existe una correlación entre los síntomas clínicos y las manifestaciones radiológicas. Esto implica que una persona con una estructura ósea impecable puede presentar dolores y limitación de movilidad cervical. El origen de este problema radica en deficiencias musculares (sobreesfuerzo, estrés, deficiente higiene postural…). Del mismo modo se pueden encontrar alteraciones patológicas en pacientes que no han manifestado síntomas de cervicalgia, generalmente detectadas al realizar pruebas radiológicas a pacientes asintomáticos. Por este motivo en muchas ocasiones hay grandes dificultades para determinar un diagnóstico correcto y sobre todo en el ámbito de la patología laboral, a la hora de valorar una incapacidad laboral ya sea transitoria o permanente. Con este propósito principal se ha creado NedCervical/IBV. Se trata de una aplicación que permite la valoración funcional del raquis cervical basándose en el estudio de la cinemática de los movimientos que realiza el sujeto durante unas pruebas. De esta forma el personal encargado de realizar la valoración obtiene más información sobre el estado del paciente pudiendo determinar de una forma más eficiente el grado y la etiología de la afección. Además es posible determinar el grado de colaboración del paciente durante el estudio, por lo que se dispone una herramienta muy útil en la medicina del trabajo para apoyar la decisión de otorgar una incapacidad laboral. Las bajas laborales suponen una gran pérdida económica para las empresas españolas. Se calcula que en España se producen más de tres mil bajas laborales diarias, lo que ha provocado que se endurezcan las penas contra las bajas debidas a presentar una sintomatología simulada o fingida. Además el trastorno musculoesquelético sustituyó hace unos años al accidente clásico (caídas, cortes, etc.) como primera causa de baja laboral. Por ello es necesario determinar en la medida de lo posible la veracidad o no de estas dolencias. NedCervical/IBV es, por tanto, una herramienta muy útil para los profesionales de la salud laboral y en especial para las mutuas aseguradoras, que ayuda a obtener un diagnóstico real de pacientes con posibles cervicalgias.
INTRODUCCIÓN Antecedentes generales 9 Animación 3D del Raquis C ervical 1.2.- Antecedentes generales Un análisis del mercado referente a todo lo que conlleva el estudio de las cervicales basado en la cinemática y la capacidad de movimiento de las mismas precisa definir dos aspectos fundamentales: su disposición física, que condiciona los tipos de movimientos que se pueden realizar; y la objetivación de dichos movimientos para obtener patrones que se toman de referencia para estudios biomecánicos. De este modo, estos son los dos puntos de partida: describir la anatomía ósea de la región cervical y definir los sistemas de valoración funcional. 1.2.1.- Información anatómica: Cervicalgias La columna vertebral está compuesta por 33 o 34 vértebras dispuestas a lo largo del esqueleto axial. Se estructura en 5 segmentos: - Cervical: 7 vértebras - Dorsal: 12 vértebras - Lumbar: 5 vértebras - Sacro: 5 vértebras - Coxígeo: 3 ó 4 vértebras En conjunto se encarga de transmitir y amortiguar las cargas, permitir una relación óptima de grado de movilidad y rigidez, y proteger las estructuras neuronales contenidas en el canal. Un análisis más profundo de la morfología de las siete vértebras cervicales permite diferenciar entre las vértebras C1, C2 y un grupo con características similares formado por las vértebras de la C3 a la C7. La primera vértebra cervical (C1) o atlas tiene forma de anillo y se articula en su parte superior con el hueso occipital. La segunda vértebra cervical (C2) o axis presenta como característica principal una prolongación ósea vertical que nace del cuerpo del axis y penetra dentro del atlas (apófisis odontoides). Esta particular estructura permite, de manera efectiva, la rotación del cráneo. El resto de vértebras cervicales (C3-C7) poseen todas ellas de un foramen transverso del que carecen las vértebras del segmento dorsal y lumbar. Figura 2: Columna cervical y vértebras C1 y C2 Figura 1: Columna vertebral
INTRODUCCIÓN Antecedentes técnicos 16 Animación 3D del Raquis C ervical 1.3.1.- Modeladores gráficos 3D 1.3.1.1.- Blender Blender es un programa informático multiplataforma de software libre, dedicado especialmente al modelado, animación y creación de gráficos tridimensionales. Las características principales de este programa son: - Multiplataforma, libre, gratuito y con un tamaño de origen realmente pequeño comparado con otros paquetes de 3D, dependiendo del sistema operativo en el que se ejecuta. - Capacidad para una gran variedad de primitivas geométricas, incluyendo curvas, mallas poligonales, vacíos, NURBS y metaballs. - Junto a las herramientas de animación se incluyen cinemática inversa, deformaciones por armadura o cuadrícula, vértices de carga y partículas estáticas y dinámicas. - Edición de audio y sincronización de video. - Características interactivas para juegos como detección de colisiones, recreaciones dinámicas y lógica. - Posibilidades de renderizado interno versátil e integración externa con potentes trazadores de rayos o "raytracer" libres como kerkythea, YafRay o Yafrid. - Lenguaje Python para automatizar o controlar varias tareas. - Blender acepta formatos gráficos como TGA, JPG, Iris, SGI o TIFF. También puede leer ficheros Inventor. - Motor de juegos 3D integrado, con un sistema de ladrillos lógicos. Para más control se usa programación en lenguaje Python. - Simulaciones dinámicas para softbodies, partículas y fluidos. - Modificadores apilables, para la aplicación de transformación no destructiva sobre mallas. - Sistema de partículas estáticas para simular cabellos y pelajes, al que se han agregado nuevas propiedades entre las opciones de shaders para lograr texturas realistas. Dispone de una interfaz gráfica poco intuitiva y no basada en el clásico sistema de ventanas, por lo que ha sido bastante criticada. Sin embargo permite la personalización absoluta facilitando el trabajo y la disposición de los menús para el usuario. Blender posee una herramienta muy útil para aumentar la personalización: incorpora un intérprete de Python totalmente funcional. Esto le permite a cualquier usuario añadir funcionalidades a Blender escribiendo un simple script de Python. Figura 8: Interfaz al iniciar Blender
INTRODUCCIÓN Antecedentes técnicos 17 Animación 3D del Raquis C ervical 1.3.1.2.- Maya Maya es un programa que proporciona potente solución integrada para el modelado, la animación, la creación de efectos visuales y la renderización en 3D distribuido por la empresa Autodesk. Está basado en una arquitectura abierta que permite programar o generar archivos de comandos para todo su trabajo con una API (interfaz de programación de aplicaciones) completa y bien documentada, mediante uno de los dos lenguajes de comandos incorporados: Maya Embedded Language (MEL) o Python. Este carácter abierto, combinado con un conjunto de herramientas 3, le ayuda a hacer realidad una visión creativa para cine, televisión, desarrollo de juegos y proyectos de diseño. Las características principales de la versión 2009 de Maya Autodesk son: - Programa multiplataforma implementado por Autodesk con una experiencia de 10 años respecto de la salida al mercado de la primera versión. - Se caracteriza por su potencia y las posibilidades de expansión y personalización de su interfaz y herramientas. Está diseñado para permitir incorporar software de terceros, el cual puede cambiar completamente la apariencia de Maya. - Se comercializa en dos variantes: "Maya Complete" (una versión básica que incluye los módulos de modelado, animación, render, dinámicas/partículas) y "Maya Unlimited" (la versión más avanzada, que dispone de los módulos de la versión "Maya Complete", más los de Fluids, Hair, Cloth, el nuevo NCloth etc.). - Maya trabaja con cualquier tipo de superficie NURBS, Polygons, Subdivision Surfaces e incluye la posibilidad de convertir entre todos los tipos de geometría. - Respecto a anteriores versiones, las novedades incorporadas por la versión estudiada son: o Un sistema de selección flexible y un resaltado de preselección que implica un uso más eficiente y sencillo del mismo. o Mejor flujo de modelado: ofrece mejoras de modelado intuitivas y productivas, como un modelado simétrico con uniones flexibles, un modo de ajuste para realizar modificaciones rápidas y una nueva fusión de vértices que permite combinar partes de una malla. o Maya Assets: es una herramienta que permite organizar, compartir, referenciar y presentar eficazmente los datos complejos. o Animación por capas: un nuevo y potente paradigma de animación por capas, basado en tecnología de Autodesk MotionBuilder, aumenta la flexibilidad al crear y editar animaciones de una forma no destructiva. o Maya nParticles: basado en el marco de simulación unificado Maya Nucleus, este conjunto de herramientas ofrece un flujo de trabajo intuitivo y eficiente para simular gran variedad de efectos complejos, incluidos líquidos, nubes, humo, aerosol y polvo. o Maya Muscle: permite crear movimientos realistas de músculos y piel. o Mejoras en la disposición UV: nuevas opciones de despliegue y disposición de UV y optimización de su funcionamiento. o Render Proxy: permite sustituir elementos de la escena por una simple malla de baja resolución y cargar sólo los datos reconvertidos cuando hacen falta para renderizar. o Mejoras en Render Pass: permite un control exacto de la salida de renderización.
INTRODUCCIÓN Antecedentes técnicos 18 Animación 3D del Raquis C ervical 1.3.1.3.- 3ds Max 3ds Max, anteriormente conocido como 3D Studio Max, es un programa de creación de gráficos y animación 3D desarrollado por Autodesk. Aunque creado por la misma compañía que Maya, tienen orígenes distintos y se presumía que se iban a fusionar en un híbrido; sin embargo se ha mantenido como un producto independiente. Es uno de programas de animación 3D más utilizados. Aunque generalmente se encuentra vinculado a desarrolladores de videojuegos, se emplea también en el desarrollo de proyectos de animación como películas o anuncios de televisión, efectos especiales y en arquitectura. Las características principales de la versión 2009 de este programa son: - Sólida capacidad de edición, una omnipresente arquitectura de plugins y una larga tradición en plataformas Microsoft Windows. - La primera versión data de 1990, lo que contribuye a un grado de perfeccionamiento muy alto por la gran experiencia acumulada. - Además de las características básicas de cualquier herramienta de modelado, da soporte a sombreadores avanzados (como la oclusión del ambiente y la dispersión de superficies), simulación dinámica, sistemas de partículas, creación y renderizado de mapas… - Dispone de una interfaz intuitiva y totalmente personalizable y un lenguaje de script propio. - Está abierto para incorporar plugins de renderización de terceros, tales como V-Ray, Brazil r / s, Maxwell Render y finalRender. - Las mejoras respecto a versión anteriores son: o Renderización con Reveal: este sistema proporciona el control exacto necesario para refinar rápidamente las renderizaciones. Permite renderizar una escena entera excepto un determinado objeto, renderizar un único objeto o incluso una región específica del búfer de fotograma. o Mejoras de Biped: esta técnica permite animar de forma más sencilla personajes cuadrúpedos. o Mejor compatibilidad con OBJ y FBX: la mayor fidelidad al convertir el formato OBJ, junto con más opciones de exportación, facilitan el intercambio de datos entre 3ds Max y Mudbox, además de otras aplicaciones de esculpido digital. También ofrece mejor gestión de memoria de FBX y nuevas opciones de importación que garantizan la interoperabilidad entre 3ds Max y otros productos de Autodesk, como Maya y MotionBuilder. o Edición rápida de texturas UV: incorpora avanzadas herramientas de mapeado fáciles de usar. La nueva función de mapeado de spline permite mapear objetos tubulares y tipo spline, como una carretera sobre un terreno. o Compatibilidad con .NET en el SDK que permite utilizar las API de interfaz de usuario de alto nivel de Microsoft para ampliar el software. o ProMaterials: 3ds Max cuenta con una nueva biblioteca de materiales basados en la física y fáciles de utilizar. o Mejoras de iluminación fotométrica.
INTRODUCCIÓN Antecedentes técnicos 19 Animación 3D del Raquis C ervical 1.3.2.- Motores gráficos 3D 1.3.2.1.- Ogre Ogre (Object-oriented Graphics Rendering Engine) es una librería gráfica de código abierto multiplataforma con un flexible motor gráfico. Está diseñada con el objetivo principal de permitir a los programadores producir aplicaciones utilizando gráficos en 3D acelerados por hardware. Sin embargo, para aplicar otras características, como sonido, networking, AI, colisión, leyes físicas… se necesita vincular Ogre con otras librerías. Es, por tanto, un motor gráfico base que provee un API muy amigable, apto para integraciones, permitiendo que el programador escoja otras librerías si así lo desea. Está construido de forma que no se compromete con una API en particular, puesto que el motor soporta tanto el uso de DX9 como de OpenGL. Teniendo en cuenta estos aspectos, no existen límites intrínsecos del motor, pudiendo resultar algo confuso en un primer momento. El equipo programador base encargado del desarrollo de este motor es un grupo pequeño, compuesto por ingenieros de software experimentados. Además la creciente comunidad de usuarios de Ogre, unida a la creación de parches por parte de ésta, permite crear una estructura fuerte entorno a este motor. Cada parche es sometido a una estricta prueba para confirmar su calidad y coherencia con el resto de los componentes del motor. Otro aspecto a comentar es que Ogre no asume qué tipo de programa (simulación, juego, demo…) se desea crear de antemano. Utiliza una flexible jerarquía de clases, la cual permite diseñar plugins para especializar la organización de escenas con el fin de crear cualquier tipo de programa que se desee. En definitiva, Ogre posee las siguientes características principales: - Diseño orientado a objetos. Interfaz simple y fácil de usar, diseñada para que requiera poco esfuerzo el renderizado de escenas en tres dimensiones. - Arquitectura basada en plugins muy flexible que permite extender las funcionalidades del motor. - Sistema de Carga/Respaldo. Soporte de zip/pk3 para archivar. - Diseño limpio y bien documentado de las clases del motor. - Independiente de la API gráfica, se puede utilizar OpenGL o DirectX. Además también ofrece soporte en los siguientes elementos de un motor gráfico: - Renderizado o Material LOD. o Soporta la gama completa de operaciones de función fija como multitextura y multipass. o Blending y coordinación de generación de texturas. o Soporte para múltiples técnicas de materiales. o Objetos transparentes gestionados automáticamente. o Sistema de fuentes con fuentes TrueType y texturas pre creadas. o Sistema de GUI 2D con botones, listas, cajas de edición, barras de desplazamiento, etc. (Usando CEGUI).
INTRODUCCIÓN Antecedentes técnicos 20 Animación 3D del Raquis C ervical - Gestión de escena o Altamente personalizable. Flexible gestión de escena no vinculada a ningún tipo de escena. Se puede usar las clases predefinidas o crear subclases propias para obtener un control total sobre la organización de la escena. o Grafo de escena jerárquico. o BSP, Octrees, Occlusion Culling y LOD. - Texturizado o Básico, multi-texturizado, bumpmapping, mipmapping, texturas volumétricas y proyectadas. o Texturizado proyectivo automático entre vínculos con texturas unitarias a instancias Frustum. o Puede registrar texturas de fuentes externas. o Soporta PNG, JPEG, TGA, BMP y DDS como archivos de imagen. - Iluminación o Por vértice, por pixel y Lightmapping. o Puede tener un número ilimitado de luces en la escena. o Soporte a través de programas de vértices y de fragmentos. - Sombras o Shadow mapping y shadow volume. o Técnicas soportadas: modulative stencil, additive stencil y modulative projective. o Múltiples esténcils para optimizaciones de sombras, incluyendo programas de vértices de extrusión, luz y sombras inteligentes, integración con la malla LOD, métodos zpass y zfail, esténcils de doble cara y saturación de recorte de región. o Textura sombras que se desvanecen a larga distancia. - Shaders o Vertex y pixel shaders de alto nivel. o Soporta programas de vértices y de fragmentos de bajo nivel escritos en ensamblador, y programas de alto nivel en Cg, HLSL, y GLSL. - Animación o Cinemática inversa, animación esquelética y animación de mezcla. o Animación del esqueleto, incluyendo la mezcla de múltiples animaciones y de peso variable de skinning de huesos. - Mallas o Cargado de malla, skinning y progresivo. o Aceleración de skinning por hardware. o Flexibilidad en los formatos de malla de datos aceptados. o Exportadores para muchas herramientas de modelado incluidas Milkshape3D, 3D Studio, Max, Maya, Blender y Wings3D. - Curvas y superficies o Splines. o Caminos Bezier bicuadrados para superficies curvas - Efectos especiales o Cartografía de medio ambiente, billboarding, sistema de partículas, motion blur, cielo, agua y niebla.
INTRODUCCIÓN Antecedentes técnicos 21 Animación 3D del Raquis C ervical o Sistemas de partículas, incluyendo emisores fácilmente extensibles y affectors (personalizable mediante plugins). Los sistemas pueden ser definidos mediante scripts para un ajuste fácil. o Soporte para skyboxes, skyplanes y skydomes. - Scripting o El lenguaje de script permite mantener los materiales fuera del código mediante archivos .material. o Scripts de renderizado multipaso. - Física o Física básica, detección de colisiones y cuerpos rígidos. o Controladores que permiten organizar fácilmente los valores entre los objetos derivados. o Incluye bindings para múltiples sistemas de colisión/física de terceras partes, como ODE o Newton.
INTRODUCCIÓN Antecedentes técnicos 22 Animación 3D del Raquis C ervical 1.3.2.2.- 3D GameStudio 3D GameStudio es un kit de desarrollo para la realización de aplicaciones 2D y 3D. Está provisto de un motor 3D, un motor 2D, un editor de niveles y modelos, compilador de scripts y librerías de modelos, texturas, etc. El principal objetivo que esta aplicación persigue es que el creador del juego no necesite ser un programador experimentado. Aboga por reducir al máximo el esfuerzo del creador a costa de perder flexibilidad en el diseño del juego. Ofrecen tres posibilidades para crear un juego: - Juegos diseñados a base únicamente de ratón, para usuarios sin conocimientos de programación. - Juegos o efectos diseñados con algo de programación utilizando C-scripts. - Juegos o efectos programados en C++ o Delphi, para programadores con experiencia. Las características de renderizado principales que implementa esta motor son: - Modelado o LOD geométrico. o Modelado de terreno. - Visibilidad o Árboles BSP, portales y PVS. - Iluminación o Fuentes de luz estáticas y dinámicas. o Sombras estáticas y dinámicas. - Texturas o Texture Mapping y procedural para agua y lava. o Mip-mapping trilineal. - Efectos o Partículas, niebla coloreada y transparencia. o Transformación y deformación suave de mallas. - Otros o Efecto de movimiento lento/rápido. o Detección de colisiones. Otras características de este motor son: - Importa multitud de formatos de ficheros gráficos y de audio. - Requiere DirectX8 o superior para hacer rendering por hardware. - Requiere DirectX5 o superior para hacer rendering por software. - No hay planeado soporte para OpenGL. En cuanto a la posibilidad de incorporar archivos de algún modelador 3D, permite incorporar un plugin para crear modelos animados creados con 3ds Max.
INTRODUCCIÓN Antecedentes técnicos 23 Animación 3D del Raquis C ervical 1.3.2.3.- Crystal Space Cristal Space es un kit de desarrollo de juegos 3D con licencia LGPL y portable escrito en C++. Se puede ejecutar en multitud de sistemas (GNU/ Linux, Windows, Windows NT, OS/2, BeOS, NextStep, OpenStep, MacOS/X Server, DOS, Macintosh…) y da soporte a soporte para visualización a 8-bits, 16-bits y 32-bits, Direct3D, OpenGL, Glide, etc. Cristal Space, además, soporta seis grados de libertad, luces de colores, mipmapping, portales, espejos, transparencias, superficies reflectivas, sprites 3D (basados en frames o animaciones de esqueleto), texturas procedurales, radiosidad, sistemas de partículas, halos, niebla volumétrica, lenguaje de script (Python y otros). Las características principales de renderizado que incorpora son: - Modelado o Motor de terreno. o Motor de física. o Mallas 3D con animación. Conversores desde los formatos Quake MDL and Quake II MD2 a Crystal Space. Importadores de objetos 3DS, MDL, MD2, OBJ, POV, y ASE. Las mallas son multirresolución “progressive meshes” permitiendo LOD dinámicos. o Permite representar superficies curvas (nurbs, Bezier…). o Modelado LOD general. - Visibilidad o Sistema de visibilidad basado en la combinación de portales, octrees, arboles BSP y c-buffer (coverage buffer). o Futuro trabajo en PVS. - Iluminación o Cielo iluminado dinámicamente, sol en movimiento. o Espejos. o Superficies brillantes y con reflejos con espejos y alpha mapping. o Luces estáticas de colores con sombras reales (sombras precalculadas). o Luces dinámicas, de colores con sobras suaves. o Radiosidad precalculada sobre los ligthmaps. o Niebla volumétrica. o Luces con halo y lens-flares. - Texturas o Texturas de cualquier dimensión y formatos GIF, TGA, PNG, BMP, JPG y otros. o Corrección perspectiva con interpolación cada 16 pixels. o Texturas con canal alpha. o Mipmapping. o Soporte para texturas dinámicas. o Multitexuras con OpenGL.
INTRODUCCIÓN Antecedentes técnicos 24 Animación 3D del Raquis C ervical - Efectos o 2D sprites y sistemas de partículas utilizando esos sprites. - Otros o Plugins para fuentes. o Sistema de detección de colisiones jerárquico. o Soporte para sonido 3D (DS3D, EAX, A3D) en varios formatos: WAV, MP3, Ogg/Vorbis, AU, AIFF, IFF y MOD. o Movimiento de objetos con un lenguaje de script. o Soporte de red simple para Windows, GNU/Linux y Unix (basado en sockets). En cuanto a la posibilidad de importar modelos realizados con algún modelador 3D, Crystal Space incorpora un conversor de 3ds y permite añadir varios scripts importar mapas y modelos realizados en Blender.
INTRODUCCIÓN Objetivos del trabajo 25 Animación 3D del Raquis C ervical 1.4.- Objetivos del trabajo El objetivo principal del proyecto actual es generar una aplicación, preparada para ejecutarse en un entorno Windows, que otorgue al usuario responsable de detectar la afección de cervicalgia de una visión amigable de la prueba realizada, más allá de datos o gráficas, mediante una animación 3D. El hecho de disponer de un medio con el que mediante un breve vistazo permita recordar o visualizar los movimientos realizados en la prueba del paciente es de gran ayuda para obtener un diagnóstico de una forma rápida y eficaz. Por ello las herramientas a utilizar deben permitir determinar opciones en cuanto a la visualización de la animación. El usuario elige la posición en que comienza la reproducción de la animación y debe poder situar el cursor en el momento que considere más oportuno, al igual que cambiar la orientación y posición de la cámara que enfoca al modelo 3D para detectar un determinado movimiento de la forma más precisa posible. La animación 3D estará acompañada de una gráfica que, además de representar los ángulos en los tres ejes principales (x,y,z) en función del tiempo, permita establecer una referencia objetiva a la animación presentada a través de la representación numérica de los resultados de las pruebas. Además es interesante incluir elementos interactivos en la gráfica que afecten al momento de la reproducción de la animación, tanto para facilitar la usabilidad de la aplicación como para hacerla más atractiva y dinámica.
MATERIAL Y MÉTODOS Requerimientos 32 Animación 3D del Raquis C ervical 2.1.1.- Gestión de ficheros de prueba Este módulo debe permitir importar ficheros de prueba a la aplicación, así como eliminar algunos ficheros que ya se encuentren cargados en la misma. Figura 11: Caso de uso de gestión de fichero de prueba Gestión de ficheros de prueba Abrir fichero de prueba Borrar fichero de prueba Usuario
MATERIAL Y MÉTODOS Requerimientos 33 Animación 3D del Raquis C ervical 2.1.1.1.- Abrir fichero de prueba El usuario selecciona las pruebas a cargar a través de un diálogo y, en caso de tratarse de ficheros válidos, se importan al programa. Detalles del caso de uso Nombre: Abrir fichero de prueba. Actores: Usuario. Precondiciones: Ninguna. Postcondiciones: Los ficheros de prueba se cargan en la interfaz del sistema. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario pulsa el botón de Abrir Fichero. 2. El sistema abre un diálogo de tipo “Examinar…”. 3. El usuario selecciona los ficheros a abrir. 4. El sistema valida los ficheros seleccionados (nomenclatura y contenido). 5. El sistema notifica al usuario el número de pruebas válidas. 6. El sistema extrae la información necesaria de los ficheros válidos. 7. El sistema incorpora la información de los ficheros a la interfaz. Extensiones síncronas #1 En 3 el usuario no selecciona ningún fichero y pulsa Abrir: El sistema vuelve a mostrar el diálogo. #2 En 4 el sistema no encuentra ningún fichero válido: El sistema se lo notifica al usuario y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 34 Animación 3D del Raquis C ervical 2.1.1.2.- Borrar fichero de prueba El usuario selecciona una prueba cargada en la interfaz y la elimina de la misma. Detalles del caso de uso Nombre: Borrar fichero de prueba. Actores: Usuario. Precondiciones: El fichero a borrar debe estar cargado en la interfaz. Postcondiciones: Las pruebas borradas se eliminan de la interfaz. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario selecciona la prueba a borrar. 2. El usuario pulsa el botón de Borrar Prueba. 3. El sistema elimina la prueba de la interfaz. 4. El sistema actualiza la posición del resto de pruebas en la lista. Extensiones síncronas #1 En 3 la prueba a borrar está cargada actualmente en la animación: El sistema muestra un error y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 35 Animación 3D del Raquis C ervical 2.1.2.- Visualización de la animación Este módulo debe poseer la funcionalidad de interpretar los datos de los ficheros de prueba cargados y transformarlos en una animación que permita una visualización en pantalla. Figura 12: Caso de uso para la visualización de la animación Visualización de la animación Cargar prueba Usuario
MATERIAL Y MÉTODOS Requerimientos 36 Animación 3D del Raquis C ervical 2.1.2.1.- Cargar prueba El usuario selecciona una prueba cargada en la interfaz y presiona el botón correspondiente a la carga de la prueba, visualizándose ésta en la ventana de Ogre. Detalles del caso de uso Nombre: Cargar prueba. Actores: Usuario. Precondiciones: Los ficheros con los datos de las pruebas a cargar deben estar previamente cargados en la interfaz. Postcondiciones: En la ventana de Ogre se visualiza el modelo y el inicio de la animación. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario selecciona una prueba de la interfaz. 2. El usuario presiona el botón de Cargar Prueba. 3. El sistema lee el contenido del fichero de prueba y almacena los datos. 4. El sistema carga la gráfica con los datos almacenados. 5. El sistema interpreta los datos y crea la animación. 6. El sistema activa los elementos y eventos que pueden interactuar con la animación. 7. Se carga la cámara libre por defecto. 8. Se inicia el bucle de renderizado. Extensiones síncronas #1 En 2 el usuario presiona el botón Cargar Prueba sin tener un fichero seleccionado: El sistema muestra un error y acaba el caso de uso. #2 En 2 el usuario presiona el botón Cargar Prueba teniendo el diálogo de apertura de pruebas abierto: El sistema muestra un error y acaba el caso de uso. #3 En 3 el sistema tiene animaciones previas cargadas: El sistema libera recursos relacionados con las mismas y sigue su ejecución. #4 En 5 se produce algún error al emplear los recursos para la creación de la animación: El sistema muestra un error y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 37 Animación 3D del Raquis C ervical 2.1.3.- Modificación del momento de animación Este modulo encapsula toda la interacción que el usuario realiza con la animación para variar la reproducción de la misma. Figura 13: Caso de uso encargado de la modificación del momento de animación Modificación del momento de animación Reproducir prueba Rebobinar prueba Pausar prueba Cambiar posición de reproducción de prueba Limitar rango de reproducción Usuario
MATERIAL Y MÉTODOS Requerimientos 38 Animación 3D del Raquis C ervical 2.1.3.1.- Reproducir prueba El usuario pulsa en el botón correspondiente a reproducir una prueba y comprueba los movimientos que realiza el modelo en función de la prueba que se encuentre cargada. Detalles del caso de uso Nombre: Reproducir prueba. Actores: Usuario. Precondiciones: Debe haber una animación cargada en el programa. Postcondiciones: La ventana de Ogre reproduce la animación. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario presiona el botón Reproducir Prueba. 2. El sistema interpola entre los datos interpretados de las pruebas para generar movimiento en la animación. 3. El sistema enlaza el momento de reproducción con elementos de la interfaz. Extensiones síncronas #1 En 1 el usuario presiona el botón Reproducir Prueba encontrándose el momento de reproducción al final de la animación: El sistema reinicia el momento de reproducción y vuelve a comenzar. #2 En 2 ocurre un problema al modificar el estado de la reproducción en Ogre: El sistema muestra un error y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 39 Animación 3D del Raquis C ervical 2.1.3.2.- Rebobinar prueba El usuario pulsa en el botón correspondiente a rebobinar una prueba y comprueba los movimientos reproducidos en sentido inverso que realiza el modelo en función de la prueba que se encuentre cargada. Detalles del caso de uso Nombre: Rebobinar prueba. Actores: Usuario. Precondiciones: Debe haber una animación cargada en el programa. Postcondiciones: La ventana de Ogre reproduce la animación en sentido inverso. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario presiona el botón Rebobinar Prueba. 2. El sistema interpola entre los datos interpretados de las pruebas para generar los movimientos en sentido inverso en la animación. 3. El sistema enlaza el momento de reproducción con elementos de la interfaz. Extensiones síncronas #1 En 1 el usuario presiona el botón Rebobinar Prueba encontrándose el momento de reproducción al principio de la animación: El sistema lleva al final el momento de reproducción el momento de reproducción y sigue su ejecución. #2 En 2 ocurre un problema al modificar el estado de la reproducción en Ogre: El sistema muestra un error y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 40 Animación 3D del Raquis C ervical 2.1.3.3.- Pausar prueba El usuario pulsa en el botón correspondiente a pausar la reproducción de una prueba y la animación se detiene. Detalles del caso de uso Nombre: Pausar prueba. Actores: Usuario. Precondiciones: Debe haber una animación reproduciéndose en el programa. Postcondiciones: El sistema mantiene fijo el momento de reproducción de la animación. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario presiona el botón Pausar Prueba. 2. El sistema detiene el momento de reproducción si la animación se encuentra en estado de reproducir o rebobinar prueba. 3. El sistema enlaza esa detención del momento de reproducción con elementos de la interfaz. Extensiones síncronas #1 En 2 ocurre un problema al modificar el estado de la reproducción en Ogre: El sistema muestra un error y acaba el caso de uso.
MATERIAL Y MÉTODOS Requerimientos 41 Animación 3D del Raquis C ervical 2.1.3.4.- Cambiar posición de reproducción de prueba El usuario interactúa con la barra de reproducción o con la gráfica modificando el momento de reproducción de la prueba cargada. Detalles del caso de uso Nombre: Cambiar posición de reproducción de prueba. Actores: Usuario. Precondiciones: Debe haber una animación cargada en el programa. Postcondiciones: El sistema varía el momento de reproducción de la prueba. Flujo de eventos a Intención de Usuario Obligaciones del Sistema 1. El usuario pulsa con el botón izquierdo del ratón sobre un punto de la gráfica o la barra de reproducción. 2. El sistema calcula la correspondencia entre el punto pulsado y el tiempo de animación correspondiente. 3. El sistema traslada el momento de reproducción al tiempo calculado. 4. Se actualizan los elementos de la interfaz atendiendo al momento de reproducción actual. Extensiones síncronas #1 En 1 la acción de pulsado se puede sustituir por pulsación y arrastre, ejecutándose el caso de uso por cada variación de pulsación del ratón. #2 En 1 también se puede modificar la posición de reproducción de la prueba pulsando en los botones correspondientes a ir al comienzo o ir al final. #3 En 1 el momento de reproducción también se puede variar mediante la interacción con la rueda del ratón. #4 En 1 el usuario pulsa en una región inactiva de la gráfica: El sistema traslada el momento de reproducción a la posición correspondiente al cursor límite más cercano. #5 En 1 se encuentra activo el modo de rebobinar o reproducir prueba: El sistema da preferencia al caso de uso actual y, al finalizar la interacción con éste, prosigue con el modo de reproducción que se encontraba en ejecución.
MATERIAL Y MÉTODOS Diseño de la aplicación 48 Animación 3D del Raquis C ervical 2.2.1.1.- Animación Ogre Este módulo se encarga de todas las funcionalidades del programa que estén relacionadas con la animación 3D. Por tanto su rango de actuación se define: - Inicialización del motor Ogre con la carga de todos los recursos necesarios para su ejecución. - Carga de los recursos externos como la malla, el esqueleto y los materiales de los que dispondrá el modelo. - Lectura de los parámetros enviados por la interfaz y actualización de la animación en función de éstos. - Captura de eventos de teclado que permiten modificar la animación. 2.2.1.2.- Interfaz Este módulo es el que está en contacto directo con el usuario de la aplicación. Las funcionalidades principales son: - Inicializa las librerías necesarias para la ejecución del programa. - Define el aspecto visual del programa y la disposición de sus elementos. - Captura eventos producidos por el usuario. - Envía parámetros al módulo de Animación Ogre en función de la interpretación de estos eventos. - Permite la interacción entre la gráfica de Measurement Studio y los elementos de la interfaz. - Actualiza elementos de la interfaz relacionados con la animación 3D. 2.2.1.3.- Recursos Externos El contenido de este módulo se ciñe a los archivos necesarios para la carga del modelo 3D con el que trabaja el módulo de Animación Ogre: - Archivos .mesh: modelación del objeto 3D. - Archivos .skeleton: encargados de definir la deformación de las mallas y sus posibilidades de movimiento. - Archivos .material: su función es la definición de los materiales a mostrar, así como su variación dependiendo del punto de vista o localización de la cámara. - Por tanto se trata de un módulo que únicamente se emplea como fuente y no tiene parámetro alguno.
MATERIAL Y MÉTODOS Diseño de la aplicación 49 Animación 3D del Raquis C ervical 2.2.2.- Arquitectura de clases Las clases utilizadas siguen la arquitectura del proyecto y se organizan de manera análoga. Se distingue entre los módulos de Interfaz y de Animación de Ogre. Figura 16: Arquitectura de clases 2.2.2.1.- Clases Ogre Para realizar toda la funcionalidad el módulo de Animación Ogre se han empleado las siguientes clases: - FrameListener: clase creada por defecto en las librerías de Ogre. Esta clase permite la recepción de notificaciones para eventos generados. Incorpora los siguientes métodos: o frameStarted: se ejecuta cuando un frame está en situación de ser renderizado. o frameRenderingQueued: se ejecuta cuando todos los objetivos han emitido una señal de que su renderizado ha acabado pero antes de que se muestre el renderizado en pantalla. o frameEnded: se ejecuta cuando un frame ha sido renderizado. - MyFrameListener: clase que hereda de FrameListener donde se han implementado todos los eventos que pueden modificar el estado de la animación o la visualización de la misma. Incorpora los siguientes métodos seguidos de su funcionalidad: o frameStarted: método heredado y sobreescrito de FrameListener. En este método se ha implementado la funcionalidad para realizar el núcleo de la animación. ANIMACIÓN OGRE FrameListener COgreApplication MyFrameListener INTERFAZ CDialog CProyectoDlg CAboutDlg COSFDialog
MATERIAL Y MÉTODOS Diseño de la aplicación 50 Animación 3D del Raquis C ervical o resetAnimation: sitúa el momento de animación en el cursor izquierdo (por defecto en el inicio). o finalAnimation: sitúa el momento de animación en el cursor derecho (por defecto al final). o playAnimation: inicia la animación. Si se encuentra en el instante final en el momento de su ejecución vuelve al inicio. o rewAnimation: inicia la animación en sentido inverso. Si se encuentra en el instante inicial en el momento de su ejecución vuelve al final. o pauseAnimation: pausa la animación. o sliderControl: permite la modificación del momento de animación mediante la manipulación del slider situado en la interfaz. o spinControl: permite la modificación de la posición de la cámara mediante la manipulación de los spins situados en la interfaz. o wheelMouseControl: modifica la profundidad de la cámara. o cameraControl: modifica la orientación de la cámara. o resetCameraPosition: devuelve la cámara libre a su posición y orientación por defecto (posición frontal). o viewAnimation: permite visualizar u ocultar las mallas y los ejes asociados a la animación. - COgreApplication: clase donde se inicializan todos los recursos necesarios para la ejecución de Ogre, además de cargar el modelo 3D y obtener los datos necesarios para la realización de la animación. Contiene la declaración de los métodos siguientes: o createRoot: método donde se crea el elemento raíz que se utiliza como base para configurar Ogre. o defineResources: encargado de la carga del archivo de configuración y de definir la localización de los recursos mediante la lectura del fichero resources.cfg obtenido tras la instalación de la librería Ogre. o setupRenderSystem: define todas las opciones de visualización que tiene la ventana Ogre a mostrar (pantalla completa, resolución, nivel de detalle, tarjeta gráfica que cargará la información…). o createRenderWindow: creación de la ventana de Ogre con las opciones de configuración descritas. o initializeResourceGroups: inicialización de recursos. o setupScene: creación de elementos básicos de la escena: cámara principal, punto de vista y director o gestor de la escena. o setupInputSystem: inicialización de eventos de entrada. En este caso sólo se manejaran eventos de teclado puesto que los de ratón se manejan desde la interfaz. o createScene: carga de las mallas del modelo, de una luz inicial e inicialización de las cámaras de las que constará la animación. o readFile: lectura de un fichero de pruebas y rellenado de la estructura con los datos de los ángulos en función del tiempo. o createAnimation: creación de la animación mediante los datos obtenidos en la estructura. o destroyAnimation: liberación de los recursos generados al crear una animación. o destroyAllAnimations: liberación de los recursos generados por todas las animaciones creadas. o createFrameListener: llamada al constructor de la clase MyFrameListener para interactuar con la animación creada. o startRenderLoop: comienzo de la renderización y llamada al método frameStarted de la clase MyFrameListener.
MATERIAL Y MÉTODOS Diseño de la aplicación 51 Animación 3D del Raquis C ervical 2.2.2.2.- Clases Interfaz La definición de la interfaz gráfica en este proyecto incorpora las siguientes clases: - CDialog: clase básica para la creación y muestra por pantalla de diálogos mediante MFC. Existen dos tipos de diálogos: modal y modeless. o Un diálogo de tipo modal debe ser cerrado por el usuario antes de que la aplicación continúe su ejecución. o Un diálogo de tipo modeless permite al usuario mostrar el diálogo y seguir con otra tarea sin cancelar o cerrar el diálogo mostrado. En este proyecto se ha empleado el tipo de diálogos modeless debido a su versatilidad de utilización. Sin embargo, un objeto de tipo CDialog no se puede definir por sí mismo. Un objeto de tipo CDialog es una combinación de una plantilla de diálogo y una clase derivada de CDialog. - CProyectoDlg: clase derivada de CDialog que crea el diálogo principal de la interfaz. Sobre esta clase se ha implementado toda la funcionalidad que incorpora la interfaz de usuario. Se han controlado todo tipo de eventos, excepto los eventos de teclado que se han controlado en el módulo de Ogre, que permiten al usuario interactuar con la aplicación. Los métodos implementados los podemos dividir en: o Eventos de la interfaz: métodos ejecutados cuando el usuario interactúa de alguna forma especificada con los elementos situados en la interfaz (pulsación de botones, movimiento del ratón, temporizadores…). Estos métodos poseen una cabecera por defecto. o Funciones propias: métodos creados para obtener algunos datos necesarios que proporcionan algunos elementos de la interfaz. En algunas ocasiones se implementan para facilitar la lectura del código y obtener funciones más diversificadas. o Eventos de Measurement Studio: métodos ejecutados cuando el usuario interactúa de alguna forma con la gráfica mostrada. Los métodos disponibles dependen del modo de recepción de eventos en el que se encuentre la gráfica generada. - CAboutDlg: clase creada en el contenido de CProyectoDlg y que también deriva de CDialog. Es una clase creada por defecto al emplear MFC y se encarga de mostrar un diálogo con información relativa a las herramientas utilizadas. 2.2.2.3.- Clases externas Las clases externas corresponden a clases no implementadas en el proyecto actual que se han descargado para incorporar la funcionalidad de la que disponen a este proyecto. - COSFDialog: esta clase incorpora la funcionalidad necesaria para utilizar los diálogos tipo de apertura y guardado de ficheros. En este proyecto sólo se ha empleado la funcionalidad de apertura con el fin de cargar las pruebas seleccionadas. Además incorpora las siguientes opciones: o Modificación del aspecto de los diálogos mostrados para la apertura y salvado de ficheros. o Posibilidad de selección múltiple. o Filtrado de las extensiones de fichero a mostrar. o Obtención de las rutas de los ficheros seleccionados.
MATERIAL Y MÉTODOS Diseño de la aplicación 52 Animación 3D del Raquis C ervical 2.2.3.- Ficheros de prueba de pacientes Los ficheros que se muestran en la aplicación son obtenidos de pacientes reales y están proporcionados por el Instituto de Biomecánica de Valencia (IBV). Estos ficheros se obtienen fruto del proceso que realiza el programa NedCervical de los datos muestreados con el sistema de vídeo digital Kinescan/IBV. Así mediante las coordenadas 3D de cada uno de los marcadores obtenidas por este sistema, es posible realizar el cálculo de los ángulos en los ejes X, Y, Z en función del tiempo para establecer los movimientos realizados por el paciente en cuestión. 2.2.3.1.- Tipo y nomenclatura Los ficheros generados son simples archivos de texto con extensión .txt para facilitar la lectura e interpretación de los datos. La lectura de los datos incluidos en los ficheros se realiza mediante el uso de librerías que incorporan utilidades para la manipulación de ficheros (véase fstream para el caso del lenguaje C++ en el que se ha realizado el proyecto). Sin embargo y según un convenio obtenido con personas vinculadas a la empresa donde se ha realizado el proyecto, estos ficheros deben recibir una nomenclatura específica según la prueba de la que se trate. De esta forma se distinguen 9 tipos de pruebas: - Prueba de flexo-extensión (1): el paciente realiza movimientos variando fundamentalmente el eje X (similar a una afirmación continuada). Este fichero puede recibir los nombres: angulos_1.txt o v2_1.txt. - Prueba de flexo-extensión (2): el paciente realiza los mismos movimientos que la prueba anterior para corroborar su cinemática. Este fichero puede recibir los nombres: angulos_2.txt o v2_2.txt. Figura 17: Movimiento de flexo-extensión en un paciente sano - Prueba de flexión lateral (1): el paciente realiza movimientos variando fundamentalmente el eje Z (balance de la cabeza a los lados manteniendo hombros rectos y mirada al frente). Este fichero puede recibir los nombres: angulos_3.txt o v2_3.txt. X Y Z
MATERIAL Y MÉTODOS Diseño de la aplicación 53 Animación 3D del Raquis C ervical - Prueba de flexión lateral (2): el paciente realiza los mismos movimientos que la prueba anterior para corroborar su cinemática. Este fichero puede recibir los nombres: angulos_4.txt o v2_4.txt. Figura 18: Movimiento de flexión lateral en un paciente sano - Prueba de rotación (1): el paciente realiza movimientos variando fundamentalmente el eje Y (similar a una negación continuada). Este fichero puede recibir los nombres: angulos_5.txt o v2_5.txt. - Prueba de rotación (2): el paciente realiza los mismos movimientos que la prueba anterior para corroborar su cinemática. Este fichero puede recibir los nombres: angulos_6.txt o v2_6.txt. Figura 19: Movimiento de rotación en un paciente sano X Y Z X Y Z
MATERIAL Y MÉTODOS Diseño de la aplicación 54 Animación 3D del Raquis C ervical - Prueba funcional (1): el paciente mira a una lámpara situada arriba a su izquierda, después mira un cuestionario situado en sus rodillas y por último mantiene la mirada al frente. Este fichero puede recibir los nombres: angulos_9.txt o v2pf_1.txt. Figura 20: Movimiento de la prueba funcional 1 en un paciente sano - Prueba funcional (2): el paciente mira a una lámpara situada encima de su cabeza, después mira un cuestionario situado en sus rodillas y por último mantiene la mirada al frente. Este fichero puede recibir los nombres: angulos_8.txt o v2pf_2.txt. Figura 21: Movimiento de la prueba funcional 2 en un paciente sano X Y Z X Y Z
MATERIAL Y MÉTODOS Diseño de la aplicación 55 Animación 3D del Raquis C ervical - Prueba funcional (3): el paciente mira a una lámpara situada arriba a su derecha, después mira un cuestionario situado en sus rodillas y por último mantiene la mirada al frente. Este fichero puede recibir los nombres: angulos_7.txt o v2pf_3.txt. Figura 22: Movimiento de la prueba funcional 3 en un paciente sano 2.2.3.2.- Estructura del contenido Todos los ficheros responden a un mismo patrón en cuanto a la disposición de los datos. Este patrón se obtiene fruto de un convenio con la empresa que proporciona los datos de estas pruebas. De esta forma el patrón y orden en que se obtiene es el siguiente: • Tiempo de obtención de los ángulos (segundos). • Valor del ángulo X (grados). • Valor del ángulo Z (grados). • Valor del ángulo Y (grados). La posición de los marcadores se actualiza con una frecuencia de 25 Hz (cada 0.04 segundos), ya que es la velocidad a la que trabajan las cámaras de Kinescan/IBV. Por tanto, en las pruebas se obtiene un valor de los ángulos en los tres ejes cada intervalo de tiempo comentado. Figura 23: Ejemplo del contenido de un fichero de pruebas X Y Z
MATERIAL Y MÉTODOS Diseño de la aplicación 56 Animación 3D del Raquis C ervical 2.2.4.- Interfaz de usuario La interfaz gráfica de usuario ha sido diseñada teniendo en cuenta, fundamentalmente, aspectos relacionados con la usabilidad. La aplicación desarrollada en este proyecto va a ser utilizada generalmente por personas que no están en la obligación de poseer conocimientos informáticos avanzados y, partiendo de esta base, la interacción con el usuario debe ser simple, intuitiva y clarificadora. El usuario recibe en todo momento una respuesta del programa en torno a operaciones consideradas como inválidas, indicándole cómo llevarlas a cabo de manera correcta mediante mensajes. Considerar la usabilidad como pilar fundamental a partir del cual construir la capa que interactúa con el usuario atiende, sin lugar a dudas, a la calidad de uso. El hecho de utilizar la aplicación debe favorecer el objetivo que el usuario busca con su ejecución y fomentar su uso; en ningún caso debe ser una experiencia ardua o que requiera una iniciación previa. Debe permitir alcanzar objetivos específicos con efectividad, eficiencia y satisfacción. Además y partiendo del hecho de considerar la usabilidad como primer factor para el desarrollo de la interfaz, la estética no se ha descuidado. Se ha utilizado un estilo de ventanas “tipo” habitual en las aplicaciones ejecutadas en Windows con el fin de que el usuario se sienta cómodo con su visualización. El hecho de mantener este estilo permite dar cierta confianza y seguridad al considerar los elementos que contiene la interfaz como cotidianos. 2.2.4.1.- Diseño y elementos La disposición y elección de los elementos a utilizar está estudiada para fomentar también la facilidad de uso de la aplicación. El simple hecho de colocar los botones generales en la parte superior derecha de la ventana, los archivos cargados en la parte superior o la posibilidad de interactuar con los elementos mostrados de forma directa no atiende a una razón trivial: todo se basa en facilitar la labor de uso de la aplicación.
MATERIAL Y MÉTODOS Diseño de la aplicación 57 Animación 3D del Raquis C ervical Figura 24: Disposición y señalado de elementos de la interfaz Se distinguen las siguientes zonas en la representación de la interfaz: - Zona de botones generales (1): estos botones son los iniciadores de las funciones que se pueden realizar en la interfaz. Son los elementos principales que condicionan los datos mostrados por el resto de elementos. Permiten la apertura de ficheros de prueba, el borrado de los mismos, cargar la animación correspondiente a un fichero seleccionado y salir de la aplicación. - Zona de ficheros importados (2): se trata de un List Control que contiene información de las pruebas importadas de los pacientes. La información a mostrar se divide en: nombre de la prueba, ruta de la que se obtiene, duración de la misma (en segundos) y fecha de modificación del fichero (día y hora). Este elemento permite la selección de los ficheros importados para realizar su carga o su borrado. - Ventana de animación (3): esta ventana incorpora toda la funcionalidad vinculada con el motor Ogre. Muestra la animación del fichero cargado actualmente y con ella pueden interactuar las zonas marcadas como 4, 5 y 6. Además permite la modificación de la orientación de la cámara o su profundidad mediante eventos de ratón. - Zona de control de cámaras (4): incorpora la funcionalidad relacionada con la posición de las cámaras de la ventana de animación. Permite la variación de la posición de una cámara libre mediante el control de Spins, así como la selección de 4 cámaras fijas para detectar de forma adecuada la cinemática de los movimientos representados. 1 2 4 3 6 5
MATERIAL Y MÉTODOS Desarrollo de la aplicación 64 Animación 3D del Raquis C ervical 2.3.1.2.- Esqueleto Una vez se ha completado el modelado de la malla, habrá que dotarla de un esqueleto para que pueda realizar los movimientos deseados. A este proceso se le conoce normalmente como skinning y se fundamenta en la creación de una estructura jerárquica de componentes con el fin de obtener articulaciones que poder manipular. Por tanto el proceso a seguir a grandes rasgos es el siguiente: - Creación de un armature o esqueleto mediante una jerarquía de huesos o bones. - Asignación de vértices de la malla a los huesos del modelo. - Comprobación de movimientos realizados por las articulaciones. Cabe comentar que los dos últimos pasos del proceso constituyen un bucle que únicamente finalizará en el caso de que el movimiento realizado sea el correcto. A continuación se describen cada uno de los pasos de forma más detallada: Creación de un armature o esqueleto mediante una jerarquía de huesos o bones El primer aspecto a tener en cuenta es la posibilidad de movimientos que hay que otorgar al modelo. En este caso y puesto que los movimientos se reducen a la zona del cuello y las cervicales, únicamente necesitamos dos huesos: un hueso que haga referencia a la cabeza y otro referente al resto del cuerpo. Por tanto el hueso de la cabeza es el que realiza las rotaciones sobre el hueso que trabaja como punto de referencia, es decir el referente al resto del cuerpo, que permanece fijo. De esta forma al añadir un hueso en Blender en la ventana del Visor 3D apreciamos un polígono que representa el hueso añadido. Se puede modificar su orientación y posición para colocarlo en el lugar adecuado de la malla. En este caso se coloca, con la ayuda de las cámaras que por defecto presenta el programa, el hueso de la cabeza de forma vertical pasando por el centro de la cabeza, mientras que el hueso del cuerpo justo debajo con la misma orientación. Figura 33: Posición de los huesos en el modelo Una vez colocados se modifica su jerarquía asignando el hueso del cuerpo como “hueso padre” del hueso de la cabeza. Con ello se consigue que los movimientos realizados por el hueso de la cabeza dependan siempre de la posición y orientación del hueso del cuerpo.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 65 Animación 3D del Raquis C ervical Asignación de vértices de la malla a los huesos del modelo Con los huesos ya colocados estratégicamente, se procede a vincularlos a los vértices que forman la malla. Con ello, además del movimiento del modelo se consigue el efecto denominado “deformación de la malla” que otorga un mayor realismo a la cinemática del movimiento. Las variaciones producidas por el movimiento de unos vértices tendrán un reflejo gradual en sus vértices próximos, dependiendo siempre de la proximidad de éstos y de la estructura ósea que presente el modelo en cuestión. Por tanto y tras seleccionar un hueso, Blender posee una herramienta para enlazar vértices de la malla al hueso seleccionado. Valiéndose de la ayuda de las cámaras se realiza la selección de los vértices afectados por el movimiento y que, por tanto, formarán parte de la articulación. Figura 34: Vértices asociados al hueso de la cabeza (izquierda) y al cuerpo (derecha) En el modelo implementado, se han distribuido los vértices en grupos en función de la posición de los mismos en el modelo. Así los grupos de vértices son los que se han enlazado a los huesos del esqueleto correspondientes para obtener una animación correcta. Para evitar futuros problemas de exportación hay que tener en cuenta: - Todos los vértices de la malla deben estar enlazados a algún hueso. En caso de que esta norma no se siga, se producirán mensajes de advertencia durante la exportación del modelo. En este modelo todos los vértices de la malla que no forman parte de la cabeza o cuello se han asignado al hueso del cuerpo para evitar este problema. - Generalmente no es problemático tener un mismo vértice asignado a ambos huesos; estará afectado por los movimientos de ambos. En este caso y puesto que un hueso permanece fijo, a los vértices asignados a ambos huesos sólo les afectarán los movimientos realizados por el hueso de la cabeza. Esta característica facilita en gran medida la asignación de vértices ya que no exige un proceso tan minucioso cuando, como es el caso, se dispone de una enorme cantidad de vértices.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 66 Animación 3D del Raquis C ervical Comprobación de movimientos realizados por las articulaciones La asignación de los vértices de la malla a los huesos es un proceso vinculado a procesos más bien artísticos y que, al igual que la mayor parte del modelado, dependen de la pericia del diseñador más que de procesos sistemáticos. De esta forma este paso consiste en la visualización del movimiento realizado por la articulación y la detección de errores que se hayan podido producir: vértices mal enlazados por una deformación incorrecta de la malla, posibles deficiencias en la colocación general de los huesos, movimientos imposibles debidos a una mala jerarquía de huesos… Figura 35: Ejemplo de un movimiento incorrecto (izquierda) y correcto (derecha) Estos son algunos de los errores más comunes que se pueden detectar en este apartado y que obligan a volver al paso anterior, mediante un proceso similar a “prueba y error”, para conseguir un movimiento lo más fidedigno posible a una física realista. 2.3.1.3.- Mapeado de texturas El siguiente paso para obtener un modelo realista es añadirle las texturas necesarias con el fin de poder incorporar un mayor grado de detalle que el dispuesto mediante la adición de materiales planos. Para ello se realiza el mapeado de texturas del modelo o también conocido como mapeado UV. Esta técnica consiste, a grandes rasgos, en la adición de una textura 2D dividida en función de la malla, con el fin de adaptarla lo más fielmente posible al perfil del modelo. La función principal de este tipo de técnica es la de otorgar al modelo los detalles que la geometría en sí no puede proporcionarle. A continuación se realiza una descripción de cada uno de los pasos para poder aplicar dicha técnica al modelo en Blender. En primer lugar, se selecciona la malla de la cual se desea obtener su mapeado UV y se crea una imagen sobre la que se va a colocar el desplegado de la malla. Con la malla seleccionada se emplea la función Unwrap y ya se obtiene la malla desplegada sobre la imagen creada.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 67 Animación 3D del Raquis C ervical Figura 36: Desplegado de la malla correspondiente a la cabeza del modelo El siguiente paso consiste en colorear la textura para dotarla de los detalles que se quieren añadir al modelo. Para esta función existen multitud de programas de dibujado avanzados que se pueden emplear; sin embargo Blender incorpora un modo llamado Texture Paint que permite pintar la textura UV sobre la malla, de forma equivalente a como en la realidad se pintaría una escultura. Así a medida que se va coloreando sobre el modelo, se hace la correspondencia con las coordenadas de la textura desplegada y se va obteniendo la textura final. Figura 37: Textura UV coloreada de la malla correspondiente a la cabeza del modelo 2.3.1.4.- Exportación del modelo En este momento se dispone de un modelo completo texturizado con todo el abanico de posibilidades de movimiento que se la ha querido otorgar; sin embargo, hay que prepararlo para una exportación satisfactoria. Para ello y puesto que el fin es utilizar el modelo junto con el motor gráfico Ogre, se ha incorporado el script Ogre Meshes Exporter que permite exportar el modelo realizado en Blender a archivos reconocibles por Ogre. Se instala en una carpeta de Blender y de inmediato se puede acceder a su funcionalidad a través de Blender.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 68 Animación 3D del Raquis C ervical Ogre Meshes Exporter Este script permite la exportación de “meshes” (mallas) y “armatures” (esqueletos) a un fichero en formato Ogre (XML / binary mesh). Además también permite exportar: - Mallas con vértices coloreados, múltiples materiales y texturas UV. - Una gran cantidad de propiedades referidas a los materiales tales como: ambiental, difusa, especular, emisivo... - Animaciones basadas en keyframes enlazadas al esqueleto del modelo. - Animaciones basadas en keyframes asociadas a la colocación y deformación de mallas. Figura 38: Script Ogre Meshes Exporter Al visualizar la Figura 38 se puede comprobar que se exporta únicamente las mallas seleccionadas en Blender, pudiendo presionar el botón Update para actualizar las mallas que se exportarán. Otras opciones que proporciona la ventana principal son la exportación de un fichero de materiales. Para esta exportación se pueden seleccionar las siguientes propiedades: seleccionar color ambiente del modelo o copiar texturas del modelo y, a elegir una entre tres, renderizar materiales, obtener materiales del Game Engine (materiales asociados al motor gráfico) o materiales por defecto. Por último nos da la opción de intercambiar ejes X e Y, nombrar los esqueletos exportados de la misma forma que las mallas y la posibilidad de usar conjuntamente a la exportación el script OgreXMLConverter. Cabe tener muy en cuenta esta última acción: los archivos exportados no se pueden usar directamente en Ogre, necesitan de otro script para convertirlos a archivos .mesh. En este punto existen dos opciones: exportar el modelo seleccionado a .xml y posteriormente usar el script OgreXMLConverter desde una línea de comandos; o seleccionar en Preferences la ruta del script y permitir que al hacer la exportación se conviertan de forma automática. Si se sigue el primer caso y se exportan conjuntamente materiales, esqueletos y mallas se dispone de tres tipos de archivos: archivos “.material”, archivos “.skeleton.xml” y archivos “.mesh.xml”.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 69 Animación 3D del Raquis C ervical Figura 39: Ejemplos de tipos de archivo obtenidos al exportar Los archivos .material se pueden enlazar de forma automática con la librería gráfica Ogre, mientras que los otros tipos de archivo obtenidos requieren una transformación previa realizada por OgreXMLConverter. Figura 40: OgreXMLConverter desde línea de comandos Como resultado de esta acción, que sería el mismo si se selecciona la segunda opción comentada al exportar, se obtienen los siguientes tipos de archivos de archivo .skeleton y .mesh que ya se podrán utilizar con la librería Ogre. Figura 41: Archivos .mesh y .skeleton Una vez se ha realizado una inicialización al funcionamiento básico del script de exportación a Ogre, se han contemplado tres estrategias de exportación de mallas: - Exportación íntegra de las mallas y esqueleto del modelo. - Exportación por partes o zonas afectadas por las articulaciones. - Exportación por mallas con distintas texturas. A continuación se analiza cada posibilidad comentando aspectos favorables y adversos para su elección como forma de exportación idónea: Exportación íntegra de las mallas y esqueleto del modelo Para realizar esta exportación basta con seleccionar todo el modelo y exportarlo con Ogre Meshes Exporter. - Aspectos favorables: o Forma más simple de exportación. o No se producen más archivos que los necesarios para exportar el modelo.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 70 Animación 3D del Raquis C ervical - Aspectos adversos: o Requiere un paso previo de asignación de materiales a las mallas. o Los materiales exportados por Blender son muy simples y no responden a aspectos como las sombras o el punto de vista de la cámara; se reducen a colores planos. Se requiere un postproceso de los materiales. o El fichero generado que representa a la malla del modelo tiene un tamaño demasiado grande para ser interpretado por el script Ogre Meshes Exporter, ya que genera problemas de memoria. Exportación por partes o zonas afectadas por las articulaciones Esta exportación se divide en dos secciones: exportar en primer lugar la zona del cuello y la cabeza, partes que están afectadas por el movimiento reproducido; y en segundo lugar exportar el resto de elementos, zonas que permanecen fijas. Para ello basta con seleccionar la zona de la cabeza, actualizar en Ogre Meshes Exporter la zona a exportar y, posteriormente, realizar el mismo proceso para el resto del cuerpo. - Aspectos favorables: o División clara de mallas en ficheros diferenciando los que estarán afectados por el movimiento y los que no. o Se producen pocos ficheros de mallas (uno para la cabeza y otro para el resto del cuerpo). - Aspectos adversos: o Mismos problemas que los comentados en el tipo de exportación anterior, a pesar de que el fichero de malla tiene un tamaño menor al estar dividido. Exportación por mallas con distintas texturas Esta forma de exportar el modelo se basa en exportar cada malla que disponga de una textura distinta a sus vecinas en un fichero distinto. Para ello se selecciona cada vez la zona que se desea exportar y se actualiza dicha selección mediante Ogre Meshes Exporter. - Aspectos favorables: o División por mallas con distintas texturas que permite realizar un postproceso de los materiales ajeno a la exportación. o Creación, asignación y tratamiento sencillo de los scripts de materiales de las mallas. o Enlace de los ficheros .skeleton únicamente a las mallas necesarias que reproducen movimiento. - Aspectos adversos: o Generación de bastantes ficheros de mallas. o No se distingue entre las mallas que tienen vinculadas un esqueleto y las que no. o Enlace por partes de los materiales al modelo (un enlace por cada malla creada). Por tanto y comprobadas las ventajas e inconvenientes de cada tipo de exportación, la estrategia elegida para exportar el modelo es una combinación del segundo y tercer tipos comentados. Con esta elección, se obtiene una malla que representa a la cabeza y tendrá asociada un esqueleto, y una malla por cada mapeado de textura distinto realizado sobre los elementos fijos del modelo. De esta manera se obtienen cinco archivos .mesh asociados a la cabeza, los brazos, la camiseta, los pantalones y los zapatos respectivamente, y un archivo .skeleton asociado a la malla de la cabeza que contiene los elementos necesarios para permitir el movimiento deseado en el modelo.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 71 Animación 3D del Raquis C ervical Teniendo en cuenta la estrategia de exportación comentada, únicamente queda definir el resto de parámetros de exportación en el script Ogre Meshes Exporter, asociados en su gran mayoría a la forma de exportación de los materiales. Los parámetros que permiten exportar las texturas UV implementadas se resumen en seleccionar la opción de copiar texturas y utilizar el modo de visualización Game Engine como base para el renderizado de materiales. Figura 42: Opciones de exportación
MATERIAL Y MÉTODOS Desarrollo de la aplicación 72 Animación 3D del Raquis C ervical 2.3.2.- Ogre El motor gráfico Ogre permite la manipulación y tratado de gráficos 3D que, generalmente, se han creado mediante modeladores como Blender. Por tanto, para continuar con este apartado se dispone ya de un modelo con una estructura ósea predefinida para realizar determinados movimientos que impliquen deformar las mallas creadas. Sin embargo cabe indicar que, aunque no sea el caso del proyecto actual, Ogre también otorga la posibilidad de definir el esqueleto del modelo como un paso posterior y ajeno al programa encargado del modelado del mismo. 2.3.2.1.- Cargar el modelo La información que contiene todos los datos de la malla del modelo generado en Blender se almacena en dos tipos de archivo: archivos .mesh y archivos .skeleton. Estos tipos de archivo permiten la carga de mallas y manipulación de esqueletos mediante la utilización de la librería proporcionada por Ogre. Si se observa su estructura, se trata de simples archivos de texto con una estructura definida que Ogre puede interpretar para obtener los datos necesarios de la misma. La estructura general de estos dos tipos de archivo es la siguiente: Un archivo .mesh.xml tiene las siguientes propiedades asociadas a la malla: - Definición de caras (<face>). - Definición de vértices (<vertex>) con su posición, normal, color y coordenadas UV. - Asignación de vértices a huesos (<vertexboneassignment>). - Enlace a un esqueleto (<skeletonlink>). Figura 43: Estructura general de un archivo .mesh.xml
MATERIAL Y MÉTODOS Desarrollo de la aplicación 73 Animación 3D del Raquis C ervical Por otro lado, en un fichero .skeleton.xml se distinguen los siguientes campos: - Definición de huesos (<bone>) con su posición y ángulo de rotación. - Jerarquía de huesos (<bonehierarchy>). Figura 44: Estructura general de un archivo .skeleton.xml Nota: Cabe recordar que estos archivos deben ser transformados mediante el script OgreXMLConverter para poder utilizarlos en Ogre de manera directa. Para poder cargarlos, estos archivos se deben incluir en el directorio adecuado de la librería (“Directorio_de_Ogre\Samples\Media\models”). En este directorio también se encuentran otros archivos .mesh y .skeleton creados por defecto al instalar la librería. Con los archivos almacenados en las rutas comentadas, hay que describir la estructura de elementos que permiten la manipulación de escenas en Ogre. En Ogre existen tres elementos fundamentales a considerar: Entity, SceneNode y SceneManager. - Entity o entidad: corresponde a todos los elementos que se pueden dibujar en pantalla. Cualquier modelo, malla u objeto que carguemos es considerado una entidad; sin embargo no son entidades las cámaras, las luces… Se puede considerar a las entidades como la abstracción que representa un objeto en pantalla. Cabe comentar que la posición y la orientación geométrica de las entidades no es una característica de las mismas, estos parámetros son controlados por otra estructura; sin embargo, por ejemplo el material o la textura que cargan sí lo es. - SceneNode o nodo de la escena: se encargan de las manipular las características de las entidades. Se trata de una especie de contendores en los que se engloban las entidades, cámaras y luces para modificar sus propiedades. Es posible crear una jerarquía de nodos de la escena ya que un nodo puede ser padre de otro. Como es coherente, la posición siempre es relativa a la de los nodos padre. - SceneManager o controlador de nodos: es el nodo raíz de todo lo que se dibuja y tiene que ver en la escena. Siempre se sitúa como nodo raíz en la jerarquía de nodos y, por tanto, a través de él siempre es posible acceder a cualquier entidad o nodo creado en la escena.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 80 Animación 3D del Raquis C ervical - Interpolación de rotaciones. Los cuaterniones incorporan dos métodos de interpolación: lineal y cúbica. La interpolación lineal realiza un cálculo más eficiente pero no consigue la fluidez de resultados que implementa la interpolación cúbica. Sin embargo y con el fin de facilitar la creación de cuaterniones, Ogre permite su generación a partir de matrices de rotación mediante el método FromRotationMatrix. El hecho de que también incorpore una implementación de matrices 3x3 (mediante la clase Matrix3) y tenga sobrecargado el operador ‘*’ para realizar el producto de matrices favorece en gran parte la utilización de esta técnica. Una vez aclarados los aspectos matemáticos para el tratamiento de rotaciones en Ogre, el foco de atención se debe centrar en la implementación de la estructura o técnica que permita realizar la animación deseada. Los datos ya se encuentran organizados y se conoce la forma de interpretarlos, falta un método que permita encapsularlos en un movimiento. La técnica utilizada es la implementación de una línea de tiempo en la que se definen una serie de KeyFrames o fotogramas clave. Los fotogramas clave son eventos o acciones que ocurren en un momento determinado dentro de los límites de una línea de tiempo definida. De esta forma en el caso del proyecto actual es simple determinar cómo se emplea esta técnica: la línea de tiempo de cada animación está vinculada al valor de tiempo almacenado en la estructura; mientras que los eventos o acciones que representan los KeyFrames se corresponden al ángulo de giro que debe tener la articulación del cuello del modelo. En consecuencia se dispone de un intervalo entre los fotogramas clave equivalente a la frecuencia con la que se toman las muestras (0.04 segundos) que Ogre se encarga de interpolar, según un patrón de interpolación marcado, con el objetivo de conseguir una animación fluida. Figura 52: Línea de tiempo tipo de una animación Teniendo toda la base teórica para realizar una animación, el último paso se centra en vincular la animación al modelo cargado. Para ello hay que emplear el esqueleto generado en Blender y exportado en el fichero .skeleton correspondiente. Mediante la entidad que define la malla que debe realizar el movimiento es posible obtener el esqueleto mediante el método getSkeleton(). Este esqueleto contiene la definición de los huesos que forman las articulaciones del modelo, accesibles mediante el método getBone(“nombre_del_hueso”). En este punto es importante recordar los nombres puestos en Blender a cada uno de los huesos puesto que son 0.08 T f : Tiempo total de animación T f T f – 0.04 0.0 T f – 0.08 T f – 0.12 0.04 . . .
MATERIAL Y MÉTODOS Desarrollo de la aplicación 81 Animación 3D del Raquis C ervical necesarios para realizar su manipulación, hecho que se produce poniendo a true el método setManuallyControlled(bool) relativo al hueso obtenido. En este momento ya se puede controlar de forma manual el hueso considerado, que en el proyecto actual se trata únicamente del hueso correspondiente a la cabeza. El último paso para finalizar el proceso de creación de la animación es vincular el hueso obtenido a una línea de tiempo dividida en fotogramas clave. En primer lugar se crea la animación que posee como argumentos un nombre y un tiempo total de reproducción. En segundo, se permite que el manejador del hueso considerado y el hueso en sí sean controlados por la animación creada a través del método createNodeTrack(manejador_del_hueso,hueso). En tercero y último, se declara un estado de animación con un nombre que representa a la misma en el bucle de renderizado. A partir de este momento se rellenan los fotogramas clave: se sitúan en un tiempo igual a la frecuencia con la que se obtienen las muestras y tienen un valor obtenido por la multiplicación de las matrices de rotación, encapsulado en los cuaterniones correspondientes. Con todos los datos necesarios para generar la animación, únicamente queda realizar su renderizado en escena para comprobar los resultados. Ogre utiliza un bucle o ciclo de renderizado llamado de forma continua que permite ir actualizando los momentos de animación (el método startRendering inicia este renderizado). A partir de este momento la función a la que se accede y permite el control de parámetros de la animación (reproducción de un momento de animación concreto, modificación de cámaras y luces…) es frameStarted(const FrameEvent &evt). Como se comprueba en la cabecera, este método responde a “eventos de frame”, es decir, se ejecuta cada vez que un frame está en disposición de ser renderizado. Por tanto para dar la sensación de movimiento fluido, se hace variar el momento de la animación en función de estos eventos mediante el método addTime(evt.timeSinceLastFrame) asociado al estado de la animación declarado de forma previa. 2.3.2.4.- Interacción con el usuario La interacción con el usuario en el caso de la animación en Ogre está limitada en cuanto a sus posibilidades debido a que se va a integrar como una ventana adicional en otra interfaz. Sin embargo, cabe comentar que Ogre permite la captura de todo tipo de eventos: eventos de ratón, de teclado e incluso la posibilidad de incorporar joysticks son contemplados por este motor gráfico. En contraposición, en el proyecto actual únicamente se ha considerado la captura de eventos de teclado como función del motor gráfico; el resto de eventos están vinculados a las acciones que se lleven a cabo en la interfaz y se trasfieren mediante métodos vinculados a dicho motor gráfico. En consecuencia, junto con la carga de la ventana se debe iniciar un recurso que implemente un manejador de eventos de teclado, enlazado como es coherente a los eventos que sucedan en la misma ventana (método setupInputSystem). NOTA: una breve descripción de los recursos inicializados por Ogre se encuentra en el apartado 2.2.2.1 como métodos de la clase COgreApplication. Posteriormente en esta memoria se explica de forma más detallada cada uno de ellos.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 82 Animación 3D del Raquis C ervical Con el fin de dividir la funcionalidad referida a la carga de recursos de la ventana Ogre y la captura de eventos sobre la misma se ha creado la clase MyFrameListener. En esta clase se incorporan todos los métodos vinculados a acciones de la interfaz, reproducción de la animación y, por supuesto, eventos de teclado. La función que representa el ciclo de animación es el lugar destinado a controlar la pulsación de teclas, puesto que al ser ejecutada de forma continua, permite una respuesta en tiempo real de los elementos modificables en la animación. La pulsación de teclas contemplada se ha implementado con el fin de variar la posición de la cámara presente en la escena. Aunque esta funcionalidad también se incorpora a la interfaz, la facilidad que proporciona el teclado es lo suficientemente atractiva e intuitiva como para considerar su incorporación. Se ha vinculado funcionalidad a las siguientes teclas: D, : aumenta coordenada X A, : disminuye coordenada X Q, Re Pág: aumenta coordenada Y E, Av Pág: disminuye coordenada Y S, : aumenta coordenada Z W, : disminuye coordenada Z Figura 53: Teclas empleadas y sentido en el cambio de posición de la cámara D A W S Q E X Y Z
MATERIAL Y MÉTODOS Desarrollo de la aplicación 83 Animación 3D del Raquis C ervical 2.3.3.- Visual Studio 2005: MFC El entorno de desarrollo elegido para implementar la interfaz de usuario y la estructura general del programa es Visual Studio 2005. La facilidad de uso, la incorporación de buenas herramientas de soporte para el lenguaje C++, la gran cantidad de documentación y comunidades de que dispone, así como la variedad de plugins desarrollados lo convierten en el entorno de programación ideal para el proyecto actual. Además para el desarrollo de la interfaz se ha utilizado un conjunto de clases que facilitan de manera notable y evitan reticencias en el acceso al API de Windows: las clases MFC (Microsoft Foundation Classes). 2.3.3.1.- Desarrollo básico de la interfaz Visual Studio 2005 permite la creación de un proyecto que ya incorpora las clases base de una interfaz que emplea MFC. Para ello basta con seleccionar como tipo de proyecto una aplicación MFC y establecer sus parámetros o características iniciales. Figura 54: Aplicación MFC y propiedades iniciales Tras realizar este paso, ya se dispone de la base de una interfaz con un diálogo principal, un diálogo secundario habitual del tipo “Acerca de…” y de algunos botones por defecto. Además se implementan de forma automática las clases y archivos de encabezamiento necesarios para tener una estructura sólida sobre la que comenzar a programar los elementos que componen la interfaz. Un aspecto a comentar que proporcionan las clases MFC es la posibilidad de modificar el aspecto de la interfaz mediante un entorno de ventanas. En la vista de recursos de Visual Studio es posible seleccionar el diálogo que se desea modificar y mediante las opciones disponibles en el cuadro de herramientas, añadir algún elemento de forma muy intuitiva.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 84 Animación 3D del Raquis C ervical Figura 55: Elementos que proporcionan las MFC Además tras añadir un elemento, en la ventana de propiedades asociada al mismo se puede consultar y modificar sus características iniciales que se encuentran agrupadas en tres módulos: apariencia, comportamiento y varios. Figura 56: Características iniciales asociadas a un botón La interfaz de la aplicación está compuesta por los siguientes elementos físicos: - Botones (ya sean de pulsación o de marcado alternativo) - Una lista de control - Marcos de grupo - Cuadros de texto - Una barra de reproducción - Controles mediante flechas - Subventana de la gráfica - Subventana de la animación Esta enumeración tan general de los componentes que forman la aplicación se puede jerarquizar de la siguiente forma en función de su origen y funcionalidad: Elementos propios de las MFC: - Control de archivos cargados o Botones de pulsación o Lista de control - Elección de cámaras o Botones de marcado alternativo - Variación de la posición de la cámara libre o Controles mediante flechas o Botón de pulsación Marco de grupo de cámaras
MATERIAL Y MÉTODOS Desarrollo de la aplicación 85 Animación 3D del Raquis C ervical - Control del momento de animación o Barra de reproducción o Botones de pulsación - Muestra de datos o Cuadros de texto Elementos ajenos a las MFC: - Animación 3D o Ventana de Ogre - Gráfica con los valores de los ángulos en función del tiempo o Elemento de Measurement Studio En el apartado actual se va a realizar un análisis de los elementos propios de las clases MFC incluidos. - Control de archivos cargados o Botones de pulsación: en la aplicación hay tres botones que se encargan de la gestión de los archivos cargados en el programa: Botón salir: sale de la aplicación con una ventana de confirmación sólo si hay una animación cargada. Botón abrir: su pulsación abre un diálogo de abrir archivo y, si el archivo es válido, se añade a la lista de control. Botón borrar: elimina de la lista de control los archivos seleccionados, tras mostrar un mensaje de confirmación. Botón cargar: carga el contenido del archivo y genera la animación. Para ello la ventana Ogre se inicializa de forma previa. No se permite cargar un archivo si el diálogo de apertura de pruebas está abierto. Figura 57: Botones de pulsación para control de archivos o Lista de control: contiene información de las pruebas que están en disposición de ser cargadas en el programa. La información a mostrar es la siguiente: Prueba: nombre de la prueba realizando una correspondencia entre el nombre del archivo y la misma, como se indica en el apartado 2.2.3.1 de la memoria actual. Ruta: ruta donde se encuentra el fichero a cargar. Duración: tiempo en segundos que dura la prueba a cargar. Fecha de modificación: fecha de modificación de los ficheros cargados. Este dato permite realizar un seguimiento del mismo paciente pudiendo comparar las fechas en las que se realizaron las pruebas. Cabe comentar que no se han descartado pruebas idénticas, es decir, no se ha omitido la carga de ficheros exactamente iguales siempre y cuando se traten de ficheros válidos. Marco de grupo de animación
MATERIAL Y MÉTODOS Desarrollo de la aplicación 86 Animación 3D del Raquis C ervical Otro aspecto a comentar de la lista de control es que permite la carga de ficheros, además de mediante la pulsación del botón cargar, haciendo “dobleclick” sobre un elemento de la lista de control. Figura 58: Lista de control - Elección de cámaras o Botones de marcado alternativo: estos botones o Radio-button se caracterizan porque sólo es posible mantener presionado uno, dejando sin presionar los demás. Esto permite cargar distintas posiciones de la cámara de visualización de la animación. Se han dispuesto 4 botones que representan cámaras fijas y uno que representa una cámara libre. La correspondencia entre las cámaras fijas y su orientación es la siguiente: Cámara 1: vista frontal del modelo. Cámara 2: vista trasera del modelo. Cámara 3: vista de la parte derecha del modelo. Cámara 4: vista de la parte izquierda del modelo. Figura 59: Botones de marcado alternativo - Variación de la posición de la cámara libre o Controles mediante flechas: estos botones o Spin Control permiten variar la posición de la cámara de forma equivalente a la realizada con el teclado, comentada en el apartado 2.3.2.4. Se dispone de tres controles, uno por cada uno de los ejes (X, Y, Z). Estos controles sólo estarán activos si la cámara dispuesta es la cámara libre. Figura 60: Controles mediante flechas o Botón de pulsación: este botón permite devolver a la cámara libre a su posición por defecto (vista central del modelo). Como es coherente, sólo estará disponible si está activa la cámara libre. Figura 61: Botón de pulsación de cámara libre - Control del momento de animación o Barra de reproducción: la barra de reproducción o Slider Control permite variar el momento de reproducción actual. Funciona de forma
MATERIAL Y MÉTODOS Desarrollo de la aplicación 87 Animación 3D del Raquis C ervical equivalente a cualquier reproductor de vídeo: la variación de su punto de reproducción está sincronizado con el momento de la animación cargada. Además también está sincronizado con el cursor de reproducción de la gráfica y los cuadros de texto con información del tiempo y los ángulos. Cabe comentar también la posibilidad de interactuar con este control mediante la rueda del ratón: aplicar un giro a la rueda, modifica la posición del punto de reproducción de la barra. Figura 62: Barra de reproducción o Botones de pulsación: estos botones permiten interactuar con el momento de animación mediante los clásicos eventos de reproducción, rebobinado, pausado, reiniciado y finalización (play, rewind, pause, reset y final). Facilitan en gran medida obtener el momento de reproducción deseado. Figura 63: Botones de reproducción - Muestra de datos o Cuadros de texto: se utilizan para mostrar información relativa a la animación actual: tiempo de animación y valores de los ángulos en los tres ejes X, Y, Z. Figura 64: Cuadros de texto 2.3.3.2.- Gestión de ficheros de pacientes Apertura de pruebas Los ficheros que representan las pruebas realizadas a los pacientes deben poseer una nomenclatura y estructura determinadas (descritas en el apartado 2.2.3.2), para así comprobar si se trata de archivos válidos y agregarlos a la lista de control. Se ha utilizado para ello un típico diálogo de abrir ficheros, mediante la utilización de la clase externa COSFDialog (clase comentada en el apartado 2.2.2.3), que permite seleccionar los archivos de texto que contienen las pruebas a cargar. Una vez obtenidos los ficheros que se pretende cargar, se realizan las siguientes comprobaciones: - Se comprueba que el nombre del fichero sea válido. - Se realiza una lectura del fichero comprobando que los valores de tiempo siempre sean crecientes. En caso de que no se obtenga un fichero válido, el fichero no se carga en la lista de control y se muestra el siguiente mensaje:
MATERIAL Y MÉTODOS Desarrollo de la aplicación 88 Animación 3D del Raquis C ervical Figura 65: Mensaje de fichero de pruebas incorrecto En caso contrario, se obtiene un mensaje con el directorio en el que se cargan los archivos y el número de archivos que se van a añadir a la lista de control. Figura 66: Mensaje obtenido al cargar pruebas correctas Cabe tener en cuenta que si se realiza una selección múltiple, únicamente se muestra el número de archivos válidos que se añaden a la lista de control, junto al ya nombrado directorio de los mismos. Borrado de pruebas La aplicación permite seleccionar múltiples pruebas para eliminarlas todas a la vez. Para comprobar que no se trata de un error del usuario, siempre se muestra un mensaje con el número de pruebas a borrar pidiendo la confirmación del usuario. Figura 67: Mensaje obtenido al intentar borrar pruebas del list control En el caso de que la prueba a borrar esté actualmente en carga, tanto la animación como la gráfica vuelven a un estado inactivo. Del mismo modo el resto de elementos de la interfaz asociados a la manipulación de la animación, también deshabilitan su estado. 2.3.3.3.- Cargar animación de Ogre Hasta ahora, la animación de Ogre se ha implementado como una ventana independiente de la interfaz base de la aplicación. El objetivo principal de este apartado es enlazar dicha ventana para que se integre como un elemento más en dicha estructura de componentes. Para ello se distinguen dos procesos: inicialización de la ventana de Ogre y carga de la animación con el modelo 3D.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 89 Animación 3D del Raquis C ervical Inicialización de la ventana de Ogre Supone la carga de recursos iniciales para poder generar la ventana. Con tal fin, se realiza la siguiente secuencia de pasos: - Cargar la configuración inicial obtenida tras instalar la librería de Ogre mediante la lectura del fichero resources.cfg. - Definir las opciones de renderizado de que dispondrá la ventana. Se han contemplado las siguientes: o Utilizar Direct3D9 Rendering Subsystem como sistema de renderizado. o No reproducción a pantalla completa. o Resolución 800x600 con color de 32 bits. o Sin técnica de antialiasing. o Emplear la tarjeta gráfica mostrada en al archivo resources.cfg. - Crear la ventana físicamente. Para ello es necesario el manejador de la ventana principal de la aplicación con el fin de establecer la ventana Ogre como ventana hija de la misma. Además se establece el tamaño y la posición respecto a su ventana padre, eligiendo un tamaño de 400x300 y situándola aproximadamente en la parte inferior izquierda. - Inicializar recursos de grupo. - Crear elementos básicos de la escena como el controlador de nodos, una cámara y un punto de vista. - Inicializar eventos de entrada de teclado. Este proceso también precisa del manejador de la ventana principal con el fin de asociar dichos eventos de entrada de teclado a la misma. - Carga de las entidades y nodos que componen el modelo. Aunque se carguen estos elementos, el modelo no es visible hasta que no se ejecute el bucle de renderizado de la animación. Esto permite que posteriormente sea menos costoso ejecutar una animación ya que el modelo se encuentra cargado de forma previa. Este proceso de inicialización se realiza únicamente la primera vez que se carga el programa ya que será la base que posteriormente se emplea para soportar las distintas animaciones que se pueden cargar. Figura 68: Aspecto de la interfaz tras la inicialización de la ventana Ogre
MATERIAL Y MÉTODOS Desarrollo de la aplicación 96 Animación 3D del Raquis C ervical El último paso para representar los trazos es considerar como eje de abscisas el vector de tiempos y como eje de ordenadas los tres vectores con los valores de los ángulos. Con esta descripción ya se dispone de la base que forma la gráfica; sin embargo hay que considerar la programación de otros componentes como los cursores y la región activa. Programación de cursores En la gráfica se distingue dos tipos de cursores: cursores para limitar el rango de reproducción y un cursor que representa el momento de animación (de colores amarillo y blanco respectivamente). La representación de los cursores que limitan el rango de reproducción se puede considerar trivial: el cursor izquierdo se sitúa en el instante inicial de reproducción (por defecto 0.0 segundos) mientras que el cursor derecho se coloca en el último dato de tiempo que presenta la prueba almacenada (varía en función de la duración de la prueba). Un aspecto a considerar que facilita la representación de estos cursores es que la gráfica es de tipo autoescalable, es decir, que ante unos datos de entrada ajusta de forma automática los ejes de representación para mostrar la información de la forma más clara posible. Por otra parte, el cursor que representa el momento de animación en la gráfica requiere un seguimiento mayor de la ejecución del programa: debe actualizar su posición ante cualquier cambio de reproducción del momento de animación actual. Por tanto cualquier evento lanzado por la barra de reproducción tiene su repercusión en este cursor de animación, al que se obliga a actualizar su posición. Programación de la región activa La región de reproducción activa se señala en la gráfica mediante un fondo negro, mientras que la zona de reproducción inactiva está señalada con un fondo gris. Este efecto se programa en la gráfica a través de anotaciones. Las anotaciones permiten añadir a la gráfica multitud de elementos tales como texto, dibujos, fondos… y tienen una gran cantidad de características modificables. Por tanto se trata de una anotación en la que se establece el tamaño de representación a través de dos valores en X y dos valores en Y. De esta forma es trivial idealizar de forma teórica su representación: los valores del eje Y corresponden al tamaño de representación de la gráfica, mientras que los valores en el eje X corresponden a los cursores que limitan el rango de reproducción. Capturar eventos de la gráfica Uno de los motivos por los que se han elegido las clases incorporadas por el paquete de Measurement Studio para la representación de la gráfica es la interactividad que permiten sus elementos. El elemento CWGraph Control incorpora una gran cantidad de eventos que es posible capturar y manejar para obtener un comportamiento deseado ante una acción del usuario.
MATERIAL Y MÉTODOS Desarrollo de la aplicación 97 Animación 3D del Raquis C ervical Figura 77: Eventos del elemento CWGraph Control Las posibles interacciones con CWGraph Control que incorpora la aplicación se resumen en: - Pinchar y arrastrar los cursores que delimitan el rango de reproducción de la gráfica. - Pinchar y arrastrar el cursor de animación. - Pinchar en alguna zona de la gráfica ajena a los cursores. La principal dificultad para implementar las tres funcionalidades de manera simultánea es el modo en el que se configura el elemento CWGraph Control: dispone de una opción que permite seleccionar el tipo de eventos a los que es sensible. Figura 78: Modos de selección de eventos disponibles en CWGraph Control Se distinguen cuatro modos fundamentales de selección de eventos: - Cursors: únicamente es sensible a eventos de pinchado y arrastrado de cursores. - Pan & Zoom Events: eventos relacionados con el cambio de profundidad y tamaño de las gráficas. - Plot Area Events: sensible a eventos de ineracción del ratón en la gráfica (no considera modificación de cursores).
MATERIAL Y MÉTODOS Desarrollo de la aplicación 98 Animación 3D del Raquis C ervical - Plot & Cursor Events: considera los eventos controlados por Plot Area Events y los eventos de pulsación sobre cursores (no incluye eventos para controlar la pulsación y arrastre de cursores). Por tanto, el modo de actuar para conseguir una respuesta satisfactoria ante las tres funcionalidades de manera simultánea es variar entre los modos Cursors y Plot Area Events en función de la situación del ratón en la gráfica. Cuando el ratón se sitúa sobre un cursor el modo de selección de eventos es Cursors, mientras que en cualquier otra posición el modo de selección es Plot Area Events. Cabe comentar que con el fin de facilitar la manipulación de los cursores, se ha considerado un rango de acción vinculado a la posición de los mismos con el fin de no tener que pulsar exactamente en el centro del cursor deseado para seleccionarlo. Teniendo en cuenta estos aspectos, se va a realizar un análisis de cada una de las funcionalidades implementadas distinguiendo la relación con el comportamiento de otros elementos de la interaz, así como comportamientos no deseados considerados en los mismos. Pinchar y arrastrar sobre cursores que delimitan el rango de reproducción Cambiar el rango de reproducción de la animación afecta a los momentos inicial y final de reproducción de la animación. Estos cambios tienen una repercusión en los siguientes elementos: - En la animación en sí ya que mediante los botones de reproducción únicamente se puede acceder a este rango delimitado. - La barra de reproducción debe modificar su dispoción para actualizar su tamaño total al nuevo rango definido por estos cursores de la gráfica. - La región activa modifica su tamaño en función de la posición que adopten ambos cursores. - En caso de que alguno de los cursores supere al cursor de animación dejándolo en una posición de región inactiva, el cursor de animación varía su posición de forma equivalente al cursor que se está modificando. Un comportamiento no deseado al modificar este tipo de cursores es que se intenten intercambiar de posición, es decir, que el cursor izquierdo intente colocarse en una posición temporal mayor que el cursor derecho o viceversa. Este comportamiento muestra un mensaje de error advirtiendo al usuario y coloca la disposición de los cursores por defecto: el cursor izquierdo en el momento inicial de animación, el cursor derecho en el final y el cursor de animación al comienzo de la misma. Figura 79: Error mostrado al intercambiar cursores
MATERIAL Y MÉTODOS Desarrollo de la aplicación 99 Animación 3D del Raquis C ervical Pinchar y arrastrar el cursor de animación Esta acción cambia el momento de reproducción de la animación y, en consecuencia, afecta a los siguientes elementos de la interfaz: - A la animación en sí puesto que varía la posición temporal de la animación, actualizándose consecuentemente los movimientos del modelo. - La barra de reproducción ya que está correlacionada con este cursor: un cambio en uno de estos dos elementos y el otro refleja la misma modificación. - La información mostrada por los cuadros de texto con los datos del tiempo y los valores de los ángulos. Un comportamiento no deseado tratado es la modificación de la posición del cursor de animación a una posición perteneciente a la región inactiva. En caso de superar este rango de reproducción, el cursor de animación permanece fijo en la misma posición en la que se encuentra el cursor límite superado. Pinchar en alguna zona de la gráfica ajena a los cursores Este evento desplaza el momento de animación representado a la zona de tiempo de la gráfica en la que se haya pulsado el botón izquierdo del ratón. Esta acción esta relacionada con los siguientes elementos de la interfaz: - La animación se actualiza dependiendo del momento de animación en el que se pulse sobre la gráfica. - El cursor de animación se sitúa en el tiempo correspondiente a la posición en la que se haya pulsado sobre la gráfica. - La barra de reproducción se actualiza de forma equivalente al cursor de animación. - Los valores de los cuadros de texto se actualizan también en función del momento de animación mostrado. Un comportamiento no deseado se produce al pulsar sobre una zona correspondiente a una región inactiva. La respuesta de la aplicación es situar el cursor de animación en la misma posición del cursor límite más cercano, evitando esta situación anómala.
RESULTADOS Y DISCUSIÓN 100 Animación 3D del Raquis C ervical 3.- Resultados y discusión El software generado posee todos los fundamentos para tener gran aplicación y difusión en los ámbitos de valoración y diagnóstico de cervicalgias. Combinado con el proyecto NedCervical, que le otorga toda la base estadística de diagnóstico y seguimiento de pacientes, facilita en gran medida la labor del médico encargado de tratar este tipo de dolencias. La facilidad de uso, el feedback o respuesta continua ante interacciones del usuario, la solidez ante posibles datos de entrada incorrectos y lo intuitivo que resulta utilizar el programa son algunas de las normas en las que se ha basado su desarrollo. Cualquier persona cualificada sin una gran experiencia en la utilización de componentes informáticos puede otorgar un sentido útil y práctico al manejo del programa. Son estos aspectos los considerados fundamentales para el éxito de este programa: la usabilidad del mismo y la posibilidad de obtener de una forma ágil un diagnóstico etiológico correcto. Estas dos características adquieren una mayor importancia ante el siguiente dato: se estima que más de la mitad de la población padece algún tipo de cervicalgia en algún momento de su vida. Por tanto el número de pacientes a consultar está sobredimensionado en comparación a los recursos que presenta la sanidad pública actual; es necesario el impulso y desarrollo de herramientas que permitan agilizar todo este proceso. Existen otros datos quizá más impactantes que justifican el empleo de herramientas como la presentada en esta memoria: según un estudio realizado por la Universidad Politécnica de Valencia, que obtuvo sus datos de dos mutuas de accidentes de trabajo de la ciudad de Murcia, la mitad de los pacientes con diagnóstico y baja laboral por cervicalgia tienen una estructura de personalidad desadaptativa y con un claro perfil neurótico. Este tipo de personalidad está vinculado a personas que presentan una inestabilidad emocional, escasos recursos para afrontar las situaciones de estrés y dificultades para adaptarse e implicarse activamente en el trabajo. Ciñéndose a las cifras, el 61.9% de los sujetos participantes en el estudio muestran una personalidad inapropiada para tener éxito laboral. Además el 49.1% posee un malestar psicológico que se focaliza en la presencia de síntomas somáticos. Este tipo de datos obliga a resolver una cuestión: la necesidad de establecer en la medida de lo posible si la etiología presentada por el paciente tiene su origen en una cervicalgia o se debe a otro tipo de dolencias, ya sean físicas o psicológicas. Cabe comentar que el programa NedCervical está preparado para hacer frente a algunos casos problemáticos: es capaz de detectar casos de no colaboración del paciente con un acierto del 95%. Todo este compendio de datos conlleva una consecuencia lógica: el programa presentado, debido a su estructura y siempre acompañado del proyecto NedCervical desarrollado por el Instituto de Biomecánica de Valencia, tiene posibilidades en el mercado de la valoración médica actual.
RESULTADOS Y DISCUSIÓN Análisis de resultados obtenidos 101 Animación 3D del Raquis C ervical 3.1.- Análisis de resultados obtenidos A continuación se va a proceder a realizar un análisis para detectar movimientos anómalos entre algunos de los pacientes a los que se les han realizado las pruebas. Se va a realizar una comparación con los resultados obtenidos en pacientes sanos con el fin de observar de una forma clara las diferencias entre ellos. Paciente sano Las pruebas registradas a este paciente son las que se tomarán como referencia, ya que los parámetros de todos los movimientos se encuentran dentro de los rangos de normalidad establecidos. Las gráficas a mostrar corresponden a las de las 3 pruebas de movimientos con variación principal en cada uno de los tres ejes (flexo-extensión, eje X; rotación, eje Y; y flexión lateral, eje Z) y las de las 3 pruebas funcionales obtenidas con la aplicación. Flexo-extensión: la flexo-extensión mostrada varía entre unos valores de los ángulos que se pueden catalogar como normales. Se caracteriza por no presentar apenas variación respecto de los valores de los ángulos Y y Z, mientras que la variación en el valor del ángulo respecto del eje X tiene una gran amplitud. Por esta razón se considera que el paciente no presenta limitaciones funcionales en este movimiento. Figura 80: Prueba de flexo-extensión en un paciente sano
RESULTADOS Y DISCUSIÓN Análisis de resultados obtenidos 102 Animación 3D del Raquis C ervical Rotación: la prueba de rotación mostrada presenta un comportamiento funcional normal. Se caracteriza por presentar una gran variación en el valor del ángulo referido al eje Y, además de por unas pequeñas ondulaciones continuas en los valores de los ángulos referidos a los ejes X y Z. Figura 81: Prueba de rotación en un paciente sano Flexión lateral: la flexión lateral o lateralización mostrada se produce dentro de los rangos catalogados como normales. Además se acompaña de un sistemático ángulo menor de rotación típico al pretender realizar el gesto de la forma más amplia posible, hecho que proporciona detalles de que no posee ninguna afección visible en este movimiento. Figura 82: Prueba de flexión lateral en un paciente sano
RESULTADOS Y DISCUSIÓN Análisis de resultados obtenidos 103 Animación 3D del Raquis C ervical Prueba funcional 1: la gráfica mostrada para esta prueba funcional no presenta ningún índice que permita identificar una afección. Esta prueba se caracteriza por una variación hacia valores positivos de los ángulos en los tres ejes en un primer momento, seguida de una variación fundamental en el eje X y de un retorno a la posición original. Figura 83: Prueba funcional 1 realizada a un paciente sano Prueba funcional 2: la gráfica dispuesta para este tipo de prueba funcional posee un comportamiento funcional normal. Esta prueba se caracteriza por presentar una variación positiva del valor del ángulo referido al eje X, seguida de una variación negativa y mantenida del mismo y de su retorno a la posición original. Los valores de los ángulos de los otros ejes permanecen constantes durante toda la prueba. Figura 84: Prueba funcional 2 realizada a un paciente sano
RESULTADOS Y DISCUSIÓN Análisis de resultados obtenidos 104 Animación 3D del Raquis C ervical Prueba fucional 3: la gráfica mostrada a continuación que refleja la información obtenida en este tipo de prueba funcional presenta unos parámetros calificados como normales. Sus características básicas son, en un primer momento, unos valores de los ángulos elevados y con signo negativo para el eje Y, al igual que para el eje Z aunque con un valor mucho menor, acompañado de una ligera extensión. A continuación se produce un movimiento de flexión pronunciado acompañado de una rotación hacia valores positivos, seguido de un retorno a la posición origen. Figura 85: Prueba funcional 3 realizada a un paciente sano Si se desea comprobar las animaciones para cada uno de estos movimientos, se pueden localizar en los archivos incluidos en la carpeta llamada “Paciente 1”: - Flexo-extensión: angulos_2.txt - Rotación: angulos_6.txt - Flexión lateral: angulos_3.txt - Prueba funcional 1: angulos_9.txt - Prueba funcional 2: angulos_8.txt - Prueba funcional 3: angulos_7.txt A continuación se va a realizar una comparación entre los datos mostrados y los obtenidos en otros pacientes que presentan algún tipo de anomalía en las pruebas. NOTA: Al visualizar las gráficas mostradas hay que recordar que disponen de un sistema autoescalable para apreciar mejor pequeños cambios en los valores de los ángulos.
RESULTADOS Y DISCUSIÓN Análisis de resultados obtenidos 105 Animación 3D del Raquis C ervical Pacientes con movimientos anómalos Paciente 3: este paciente no puede realizar de forma correcta ninguna de las pruebas mostradas. Los movimientos mostrados están muy limitados y, comparándolo con las gráficas del paciente sano, se puede comprobar que existe un déficit completo de movilidad cervical. Figura 86: Comparación de flexo-extensión entre paciente 3 (izqda.) y sano (dcha.) Figura 87: Comparación de rotación entre paciente 3 (izqda.) y sano (dcha.) Figura 88: Comparación de flexión lateral entre paciente 3 (izqda.) y sano (dcha.)
112 Animación 3D del Raquis C ervical OGRE 3D : - Gregory Junker, Founder/Lead Developer of OGRE 3D. Pro OGRE 3D Programming. 2006. - Comunidad oficial Ogre 3D. [Visitado: 27/01/10] http://www.ogre3d.org - Alejandro Woywood. [Visitado: 27/01/10] http://www2.ing.puc.cl/~iic3686/Tutorial_Ogre1/ogre1.htm - Blog de gazzell. [Visitado: 27/01/10] http://gazzell.wordpress.com/2008/03/19/uso-bsico-de-compositores-enogre/ BLENDER : - Página oficial de Blender 3d [Visitado: 28/01/10] http://www.blender.org/ - Niel 3d-Comunidad de Blender 3d en español [Visitado: 27/01/10] http://www.niel3d.com - Blog de fisicolomolon. Curso de creación de videojuegos [Visitado: 28/01/10] http://fisicomolon.blogspot.com/2009/06/curso-creacion-de-videojuegosen.html - Wikilibros. Blender 3D [Visitado: 28/01/10] http://es.wikibooks.org/wiki/Blender_3D:_novato_a_profesional/blender_inte rfaz - Foro soliman. Apuntes de Blender [Visitado: 28/01/10] http://apuntesdeblender3.iespana.es/ TEXTURAS UV: o Foro 3DPoder [Visitado: 28/01/10] http://www.foro3d.com/f240/mapas-uv-79726.html http://www.foro3d.com/f240/mapeado-texturas-79727.html o Claudio Andaur, Maleficio 3D [Visitado: 28/01/10] http://www.malefico3d.org/viejos-tutoriales/UVmap.html o Usuario Garman, Youtube [Visitado: 28/01/10] http://www.youtube.com/watch?v=6O8HC3n5wWE&feature=related o Derek Marsh, UV Mapping a Human Head Mesh Utilizing LSCM [Visitado: 28/01/10] http://bgdm.katorlegaz.com/lscm_tute/lscm_tute.htm
113 Animación 3D del Raquis C ervical EXPORTACIÓN A OGRE: o Blog de Antonio Serrano [Visitado: 28/01/10] http://www.aserrano.com/2007/12/19/blender-exportar-modelos-aogre/ o Source forge, Ogre Meshes Exporter[Visitado: 28/01/10] http://ogre.svn.sourceforge.net/viewvc/ogre/trunk/Tools/BlenderExp ort/ogrehelp/ogremeshesexporter.html#Armature%20Animations o ToM’s Blog [Visitado: 28/01/10] http://thomas.trocha.com/wp/?page_id=248 o Blog de Juan Diego Uran, Valtovar [Visitado: 28/01/10] http://valtovar.blogspot.com/2009/06/formatos-mesh-y-skeleton-dediversas.html INTERFAZ GRÁFICA: - The Code Project, Development Resource [Visitado: 28/01/10] http://www.codeproject.com/ - Function X [Visitado: 28/01/10] http://www.functionx.com/visualc/ - Microsoft msdn [Visitado: 28/01/10] http://social.msdn.microsoft.com/ - Jodrell Bank Centre for Astrophysics [Visitado: 28/01/10] http://www.jb.man.ac.uk/~slowe/cpp/lastmod.html - Foro Wreckedgames [Visitado: 28/01/10] http://www.wreckedgames.com/forum/index.php?topic=1046.0 - Kelvin Sung, Microsoft Foundation Classes Tutorial [Visitado: 28/01/10] http://depts.washington.edu/cmmr/biga/chapter_tutorials/mfc_tutorial/ MEASUREMENT STUDIO o Página oficial de National Instruments [Visitado: 28/01/10] http://www.ni.com/es/
114 Animación 3D del Raquis C ervical Listado de ilustraciones Figura 1: Columna vertebral ............................................................................... 9 Figura 2: Columna cervical y vértebras C1 y C2 ....................................................... 9 Figura 3: Grados de movilidad normal de la columna cervical ..................................... 10 Figura 4: Sistema general Kinescan/IBV... .................... ....................................... 12 Figura 5: Prueba real en el laboratorio y localización de los marcadores en el paciente...... 12 Figura 6: Informe personalizado que emite la aplicación NedCervical/IBV (parte 1)........... 13 Figura 7: Informe personalizado que emite la aplicación NedCervical/IBV (parte 2)........... 14 Figura 8: Interfaz al iniciar Blender............................................................................. 16 Figura 9: Versión de Blender empleada y ventana de comandos al iniciar Blender............. 28 Figura 10: Interfaz de ventanas mediante el uso de MFC en Visual Studio 2005................ 30 Figura 11: Caso de uso de gestión de fichero de prueba................................................ 32 Figura 12: Caso de uso para la visualización de la animación......................................... 35 Figura 13: Caso de uso encargado de la modificación del momento de animación............. 37 Figura 14: Casos de uso que controlan la modificación de las cámaras............................ 43 Figura 15: Esquema de la arquitectura del proyecto...................................................... 47 Figura 16: Arquitectura de clases............................................................................... 49 Figura 17: Movimiento de flexo-extensión en un paciente sano.................................... 52 Figura 18: Movimiento de flexión lateral en un paciente sano......................................... 53 Figura 19: Movimiento de rotación en un paciente sano................................................. 53 Figura 20: Movimiento de la prueba funcional 1 en un paciente sano............................... 54 Figura 21: Movimiento de la prueba funcional 2 en un paciente sano............................... 54 Figura 22: Movimiento de la prueba funcional 3 en un paciente sano............................... 55 Figura 23: Ejemplo del contenido de un fichero de pruebas............................................ 55 Figura 24: Disposición y señalado de elementos de la interfaz........................................ 57 Figura 25: Ejemplo de gráfica con cursores y región activa............................................ 59 Figura 26: Iconos principales de la aplicación............................................................... 59 Figura 27: Ventana Visor 3D con la escena por defecto................................................. 60 Figura 28: Ventana de botones.................................................................................. 61 Figura 29: Barra de menú general (User Preferences)................................................... 61 Figura 30: Tipos de ventanas..................................................................................... 61 Figura 31: Comparación entre modelo inicial (izquierda) y modelo final (derecha)............. 63 Figura 32: Niveles del algoritmo de Catmull-Clark ordenados de izquierda a derecha......... 63 Figura 33: Posición de los huesos en el modelo............................................................ 64 Figura 34: Vértices asociados al hueso de la cabeza (izquierda) y al cuerpo (derecha)....... 65 Figura 35: Ejemplo de un movimiento incorrecto (izquierda) y correcto (derecha)............. 66 Figura 36: Desplegado de la malla correspondiente a la cabeza del modelo...................... 67 Figura 37: Textura UV coloreada de la malla correspondiente a la cabeza del modelo........ 67 Figura 38: Script Ogre Meshes Exporter...................................................................... 68 Figura 39: Ejemplos de tipos de archivo obtenidos al exportar........................................ 69 Figura 40: OgreXMLConverter desde línea de comandos................................................ 69 Figura 41: Archivos .mesh y .skeleton......................................................................... 69 Figura 42: Opciones de exportación............................................................................ 71 Figura 43: Estructura general de un archivo .mesh.xml................................................. 72 Figura 44: Estructura general de un archivo .skeleton.xml............................................. 73 Figura 45: Jerarquía teórica de nodos de la escena....................................................... 74 Figura 46: Distribución y signo de los ejes X, Y, Z........................................................ 74 Figura 47: Jerarquía de nodos del proyecto actual........................................................ 75 Figura 48: Textura afectada por la luminosidad............................................................ 77 Figura 49: Ejemplo de un archivo .material: material referido a la camiseta del modelo..... 77 Figura 50: Modelo con scripts de materiales (izquierda) y sin ellos (derecha)................... 77
115 Animación 3D del Raquis C ervical Figura 51: Ejemplo de rotación en los ejes X, Y, Z........................................................ 78 Figura 52: Línea de tiempo tipo de una animación........................................................ 80 Figura 53: Teclas empleadas y sentido en el cambio de posición de la cámara.................. 82 Figura 54: Aplicación MFC y propiedades iniciales......................................................... 83 Figura 55: Elementos que proporcionan las MFC........................................................... 84 Figura 56: Características iniciales asociadas a un botón............................................... 84 Figura 57: Botones de pulsación para control de archivos.............................................. 85 Figura 58: Lista de control......................................................................................... 86 Figura 59: Botones de marcado alternativo.................................................................. 86 Figura 60: Controles mediante flechas........................................................................ 86 Figura 61: Botón de pulsación de cámara libre............................................................. 86 Figura 62: Barra de reproducción............................................................................... 87 Figura 63: Botones de reproducción............................................................................ 87 Figura 64: Cuadros de texto...................................................................................... 87 Figura 65: Mensaje de fichero de pruebas incorrecto..................................................... 88 Figura 66: Mensaje obtenido al cargar pruebas correctas............................................... 88 Figura 67: Mensaje obtenido al intentar borrar pruebas del list control............................ 88 Figura 68: Aspecto de la interfaz tras la inicialización de la ventana Ogre......................... 89 Figura 69: Aspecto de la interfaz tras la carga de la animación con el modelo 3D.............. 90 Figura 70: Mensaje obtenido al seleccionar más de un archivo a cargar........................... 91 Figura 71: Métodos estándar de botones (izquierda) y cuadros de texto (derecha)............ 91 Figura 72: Descripción de funcionamiento de un método asociado a un botón.................. 91 Figura 73: Ejemplo de funcionamiento de cambio de orientación de la cámara.................. 93 Figura 74: Elementos añadidos por Measurement Studio............................................... 94 Figura 75: Cuadro de diálogo para cambio de codificación del proyecto........................... 94 Figura 76: Ventana de propiedades de un elemento de tipo CWGraph Control.................. 95 Figura 77: Eventos del elemento CWGraph Control....................................................... 97 Figura 78: Modos de selección de eventos disponibles en CWGraph Control...................... 97 Figura 79: Error mostrado al intercambiar cursores...................................................... 98 Figura 80: Prueba de flexo-extensión en un paciente sano......................................... 101 Figura 81: Prueba de rotación en un paciente sano..................................................... 102 Figura 82: Prueba de flexión lateral en un paciente sano............................................. 102 Figura 83: Prueba funcional 1 realizada a un paciente sano......................................... 103 Figura 84: Prueba fucncional 2 realizada a un paciente sano........................................ 103 Figura 85: Prueba funcional 3 realizada a un paciente sano......................................... 104 Figura 86: Comparación de flexo-extensión entre paciente 3 (izqda.) y sano (dcha.).... 105 Figura 87: Comparación de rotación entre paciente 3 (izqda.) y sano (dcha.)................. 105 Figura 88: Comparación de flexión lateral entre paciente 3 (izqda.) y sano (dcha.)......... 105 Figura 89: Comparación de flexión lateral entre paciente 4 (izqda.) y sano (dcha.)......... 106 Figura 90: Comparación de rotación entre paciente 6 (izqda.) y sano (dcha.)................. 106 Figura 91: Comparación de flexión lateral entre paciente 7 (izqda.) y sano (dcha.)......... 107 Figura 92: Comparación de flexo-extensión entre paciente 7 (izqda.) y sano (dcha.).... 107 Figura 93: Comparación de rotación entre paciente 9 (izqda.) y sano (dcha.)................. 107 Figura 94: Comparación de la p.funcional 2 entre paciente 9 (izqda.) y sano (dcha.)....... 108 Figura 95: Comparación de flexo-extensión entre paciente 11 (izqda.) y sano (dcha.)..... 108
116 Animación 3D del Raquis C ervical ANEXO: a) Manual del instalador Instalación de la aplicación La aplicación está diseñada para ser instalada en un sistema operativo Windows y, de forma recomendable, Windows XP. El proceso de instalación se realiza de forma prácticamente automática e incluye todos los archivos necesarios para ejecutar la aplicación. De esta forma en el directorio de instalación se encuentran estructurados los siguientes elementos: - El ejecutable de la aplicación (Proyecto.exe). - Una carpeta llamada Media que contiene los recursos de Ogre. - Una carpeta llamada Fuentes con el código fuente de la aplicación. - Una carpeta llamada Pacientes que contiene subcarpetas con las pruebas de unos sujetos determinados, que se emplearan para cargar las animaciones. - El resto son archivos con extensión .dll y otros necesarios para la aplicación. A continuación se va a realizar una traza de instalación típica, mostrando cada una de las ventanas del proceso de instalación hasta llegar a la ejecución del programa. En primer lugar hay que pulsar doble clic sobre el instalador de la aplicación (archivo Instalador Animación 3D del Raquis Cervical.msi). Una vez se ha ejecutado el instalador, se inicia el asistente para instalar el programa. Tras leer la información sobre los derechos de la aplicación, se pulsa Siguiente >.
117 Animación 3D del Raquis C ervical Seguidamente se muestra una ventana que contiene la ruta donde se va a realizar la instalación, así como la posibilidad de seleccionar si la instalación se realiza para un usuario o para todos los usuarios del equipo. Seleccionadas las opciones deseadas, se pulsa en Siguiente >. En este momento ya está todo preparado para instalar la aplicación, se pide una última confirmación y se pulsa en Siguiente >.
118 Animación 3D del Raquis C ervical A partir de este instante, una barra de progreso indica el porcentaje de instalación completado. En el momento acaba la instalación, se muestra una ventana indicando la finalización de la misma.
119 Animación 3D del Raquis C ervical Ahora para ejecutar la aplicación, hay que acceder a la ruta indicada y ejecutar el archivo Proyecto.exe. Si es la primera vez que la aplicación se ejecuta, se muestra una ventana de Ogre como la indicada a continuación permitiendo elegir el sistema de renderizado para la aplicación. Se debe elegir Direct3D9 Rendering Subsystem. En el momento se ha seleccionado un sistema de renderización, se muestra la información de configuración del mismo, así como el modelo de tarjeta gráfica instalada en el equipo.
120 Animación 3D del Raquis C ervical Además, en el directorio de la aplicación se crea un archivo llamado ogre.cfg que guarda esta información para posteriores utilizaciones de la aplicación. A medida que se van cargando recursos en la aplicación, también se genera un archivo con nombre Ogre.txt con la información de los recursos cargados con éxito. En caso de que no se haya elegido ninguno, el programa se cierra de forma inmediata. NOTA: es posible que al ejecutar la aplicación se muestre el siguiente error. Esto se debe a que el equipo no dispone de la instalación de una versión de DirectX adecuada. Habrá que instalar una versión la última versión de DirectX 9 para ejecutar la aplicación (en el cd adjunto se añade un instalador con una versión actualizada de DirectX 9 con nombre dxwebsetup.exe). Desinstalación de la aplicación Para realizar la desinstalación de la aplicación, se puede realizar de dos formas: - A través del instalador Instalador Animación 3D del Raquis Cervical.msi - Aaccediendo al Panel de Control a Agregar o quitar programas. En caso de seleccionarse la primera opción, se muestra un asistente con dos opciones sobre el programa: Reparar o Quitar. Se selecciona Quitar y se pulsa en Finalizar, hecho tras el cual comienza de forma automática la desinstalación.
121 Animación 3D del Raquis C ervical Cuando acaba la instalación, se muestra una ventana informando de que el programa ha sido desinstalado con éxito. En caso de seleccionar la opción de desinstalar el programa a través del panel de control, se busca el nombre del programa en la lista y se pulsa en Quitar para desinstalar de forma automática, o Cambiar para que aparezca la ventana mostrada anteriormente con las opciones de reparar y quitar.