II - MARCO TEÓRICO -
Descripción general de la arquitectura de VTK [3]
Ilustración : Arquitectura de VTK
La arquitectura de VTK está conformada por data objects y process objects.
-
Data objects: Representan información.
-
Process objects: Transforman información. Pueden ser de tres tipos:
-
Sources: No tienen entradas pero tienen por lo menos una salida.
-
Filters: Tienen como mínimo una entrada y una salida.
-
Mappers: Tienen como mínimo una entrada y terminan la red de visualización.
Existen dos formas de manejar los data objects y process objects. Una forma es la relacionada a la teoría orientada a objetos, en la que los objetos tienen una representación de su información y los métodos y algoritmos que se aplican a esa representación. La otra forma es separar la representación de la información de los algoritmos.
Ambas tienen ventajas y desventajas, VTK maneja los objetos de una forma híbrida, ya que la representación de alguna información requiere algoritmos específicos para la misma y muy centrados en ella, mientras que existen algoritmos que se pueden aplicar a varias representaciones de información sin necesidad de realizar muchos cambios al algoritmo o muchas transformaciones a la información.
Componentes de la arquitectura de VTK [3] Sources
Son los objetos que no tienen entradas y producen salidas que alimentan los demás objetos de la arquitectura. Pueden ser readers o independant sources.
Readers
Obtienen información leyendo archivos externos de diversos formatos. Para este fin necesitan el nombre del archivo y en algunas ocasiones necesitan más parámetros.
Independant sources
Generan información basados en parámetros.
Filters
Son objetos que reciben como mínimo una entrada, modifican la información y generan como mínimo una salida. Los usuarios pueden crear filtros que realicen las transformaciones que ellos programen. Los componentes son opcionales pero normalmente existe algún filtro en la pipeline.
Mappers
Reciben información y la convierten en algo (una manifestación física) que puede ser representado por un motor de renderizado.
Actors
Permiten ajustar y controlar la apariencia de la manifestación física de la información representada en la pantalla. Por medio de los actores se pueden modificar cosas como la transparencia o el color.
Terminología de VTK [2]
VTK procesa en pipeline y divide esta pipeline en dos segmentos: procesamiento de datos y renderizado.
Consiste en sources y filters. En este segmento el usuario tiene acceso directo a los datos.
Filter
Un filtro toma entradas (inputs) y produce salidas (outputs).
Source
Es un tipo de filter donde hay 0 inputs.
Segmento de rendering
En este segmento el usuario no tiene acceso directo a los datos. Este segmento consiste en mappers, actors, renderers y render windows.
Mappers
Son una transición entre dos segmentos del pipeline y transforman los datos para que puedan ser renderizados.
Actor
Es un objeto OpenGL que contiene un objeto geométrico o modelo para que pueda ser pasado al renderer.
Render Window
Ventana que abre el sistema.
Renderer
Una render window puede tener uno o varios renderers que son donde la información es dibujada en la pantalla.
Smart pointers
Permiten almacenar información que será eliminada automáticamente cuando no sea utilizada.
Scalars – Vectors
VTK maneja la definición física para estas palabras:
Vector
Es una cantidad que tiene magnitud y dirección.
Escalar
Es una cantidad que no tiene dirección.
Ambos tipos de dato almacenan información de múltiples componentes, no necesariamente más de un componente. Se diferencian en que la información almacenada en un escalar es información que no debería ser modificada por transformaciones geométricas, en cambio, los vectores almacenan información en la que cada componente es susceptible a las transformaciones geométricas.
Geometry/Topology
La topología define de qué manera deben mostrarse los puntos, si no hay una topología especificada los puntos no serán mostrados por más que existan. La geometría es una lista de coordenadas mientras que la topología muestra la conexión entre estas coordenadas.
Descripción general de la arquitectura de OGRE
OGRE es un motor de juegos orientado a objetos con una arquitectura de Plug-in y por medio de estos provee extensibilidad, esto permite proporcionar implementaciones personalizadas de cada interfaz. Ya existen muchas extensiones para OGRE. [9]
Ilustración : Arquitectura de OGRE[11]
Elementos de la arquitectura Root object
Núcleo de OGRE, inicializa y configura la funcionalidad básica de OGRE. Es lo primero en crearse y lo último en destruirse. Tiene una Facade que permite el acceso a otros subsistemas de OGRE. [8]
Aquí es donde se crean la mayoría de objetos necesarios, como un rendering system, rendering windows, scene managers y se cargan los plugins. [8]
Objetos del núcleo [7] Meshes
Representan un modelo o geometría y pueden ser animados usando animation objects.
Entities
Instancias de objetos móviles que forman parte de la escena, son una instancia de los meshes.
Materials
Controlan la apariencia de los objetos de la escena.
Overlays
Proveen una implementación simple de HUD
Manejo de recursos [7] Resource
Abstracción de la implementación. Normalmente es un archivo en disco.
Resource Manager
Maneja el patrón de diseño Factory. Provee acceso a los recursos, los localiza, inicializa y maneja su ciclo de vida.
Ejemplos de resource managers de OGRE son:
-
Mesh Manager
-
Skeleton Manager
-
Material Manager
-
Shader Manager
-
Texture Manager
-
Compositor Manager
-
Font Manager
Manejo de escena [7]
Maneja el renderizado, es la parte del sistema que abstrae la funcionalidad del manejo de escena. Soporta varios scene managers y estrategias de scene management.
Animation Skeletal animation (Skinning, Rigging)
Anima un mesh moviendo un conjunto de huesos (bones) jerárquicos dentro del mesh. Puede ser combinada con morph animation o con pose animation.
Vertex animation
Se realiza usando información del movimiento de los vértices para determinar cómo cambia la forma del mesh. [8]
Morph animation
Interpola entre dos meses. Almacena las posiciones absolutas. [8]
Pose animation
Almacena las posiciones relativas de los vértices[10]. Interpola entre un número arbitrario de poses (similar a morphing pero más flexible). [8]
Realiza el rendering utilizando el API (OpenGL o Direct 3D). Esconde los detalles del sistema operativo.
Render targets [8]
Provee una forma unificada de manejar los render buffers, una ventana o una textura.
Scripts [8]
Permiten especificar los detalles de un objeto sin necesidad de conocer técnicas de programación. No es necesario compilarlos. Ejemplos de scripts son:
-
Material Scripts
-
Compositor Scripts
-
Particle Scripts
-
Overlay Scripts
-
Font Description Script
Sistema de partículas Sistema de partículas [13]
Permiten crear efectos en la escena para que esta no consista únicamente de sólidos y texturas. Los sistemas de partículas están formados por elementos separados con movimientos determinados por un algoritmo.
Los elementos que se muestran en un sistema de partículas pueden ser puntos, líneas o billboards.
Billboards
Polígonos orientados y con textura. Su orientación cambia cuando cambia la de la cámara.
Un billboard posee una posición y dos vectores: un vector normal y un vector arriba como muestra la siguiente figura.
Ilustración : Vectores de un billboard[13]
El vector se refiere a la dirección en la que mira el billboard o “vector normal” y el vector se refiere a la dirrección “arriba” en el espacio en el que se encuentra el billboard.
Tipos de billboard
-
Alineado a la pantalla: Su vector es el mismo de la cámara y su vector es el inverso de la cámara, por lo tanto el billboard alineado siempre está de cara a la cámara.
-
Orientado en el espacio: Se utilizan cuando es necesario que el vector del billboard esté alineado al vector del mundo y no al de la cámara. Su vector sigue siendo inverso al de la cámara. Son menos eficientes que los billboards alineados a la pantalla pues es necesario que cada billboard recalcule su vector .
-
Axial: El vector es fijo pero es necesario recalcular el vector de cada billboard.
Conceptos de un sistema de partículas
-
Impostors: Son billboards alineados a la cámara para los cuales la geometría se calcula según la de otro objeto. Esto permite utilizarlos para representar objetos que estén a una gran distancia de la cámara ya que se renderizan eficientemente.
-
Nubes de billboards: Permiten crear figuras con billboards que se superponen, esto es posible ya que no deben estar alineados a la cámara, por lo que no deben ser recalculados por cada movimiento de la cámara. En este caso cada billboard puede tener material y propiedades diferentes de los otros billboards.
Sistema de partículas de OGRE
Los sistemas de partículas nos permiten crear efectos visuales en OGRE.
Billboards en Ogre [13]
En Ogre, un billboard pertenece a la clase BillboardSet, la cual se encarga de manejar los billboards creados en ella. Un BillboardSet se crea inicialmente con el mismo material para todos los billboards, sin embargo las propiedades de cada billboard pueden ser cambiadas más adelante.
Un BillboardSet se añade a un nodo de escena y depende de la posición del mismo. Al mostrar un BillboardSet todos los billboards que le pertenecen se muestran.
Los BillboardSets son utilizados para representar nubes de billboards.
Creación de billboards en un BillboardSet
Un BillboardSet permite crear un billboard en el momento deseado retornando la referencia al mismo. No será creado si la capacidad del BillboardSet se agota, en este caso el retorno será de valor nulo. Sin embargo la capacidad de un BillboardSet puede ser duplicada de ser deseado.
Tipos de billboard en Ogre -
Point billboard: Billboards alineados a la pantalla
-
Oriented billboard: Billboard axial para el cual es necesario indicar el eje de rotación. Dada la opción oriented common todos los billboards de un BillboardSet tendrán la misma orientación, con la opción oriented self sólo se indica la orientación de un billboard.
-
Perpendicular billboard: Billboard orientado en el espacio para el cual es necesario indicar el vector . Con la opción perpendicular common todos los billboards de un BillboardSet tendrán el mismo vector , con la opción perpendicular self sólo se indica el vector de un billboard.
Partículas en Ogre [12][13] Creación
Los sistemas de partículas pueden crearse en el código y en scripts con extensión .particle, estos scripts describen las características del sistema de partículas. Usando scripts se separa la lógica de la aplicación de los recursos que se están utilizando, lo cual permite trabajar de una manera organizada. En escena pueden existir varias copias de un sistema de partículas.
Puesta en escena
Para poner las partículas en una escena de OGRE es necesario añadirlas a un nodo de escena. Si el nodo de escena es transformado las partículas tomarán esta transformación. Sin embargo, si el sistema se desplaza, las partículas ya emitidas no lo harán pues pasaron a ser parte de la escena, solo si se le indica al sistema de partículas estas se posicionarán con respecto al nodo de escena en el que se encuentra el sistema.
Espacio físico
Ogre determina el espacio físico que ocupa un sistema de partículas calculando su “bounding box” por defecto cada 10 segundos. Esto puede cambiar indicándole a Ogre cada cuantos segundos hacerlo o indicando los límites del espacio físico del sistema con anterioridad.
Partes de un sistema de partículas de Ogre
Emitters (emisores)
Emiten partículas en un área determinada y con una fuente determinada. Están posicionados con respecto al nodo de escena en el que se encuentra el sistema de partículas. Un sistema de partículas puede tener varios emisores.
Características
-
Angle: Ángulo máximo en que las partículas pueden desviarse.
-
Colour: Color de las partículas en r,g,b,a con valores de 0 a 1
-
Color_range_start: Define el color inicial de un degradado
-
Color_range_end: Define el color final de un degradado
-
Direction: Indica la dirección en que se emiten las partículas, relativo al nodo que contiene el sistema de partículas
-
Emission_rate: Partículas emitidas por segundo
-
Position: Posición del emisor dentro del nodo que contiene al sistema de partículas
-
Velocity: Velocidad para las partículas en segundos. Puede establecerse un rango haciendo uso de velocity_min y velocity_max
-
Time_to_live: Tiempo de vida de las partículas en segundos. Para establecer un rango se usa time_to_live_min y time_to_live_max
Tipos de fuente
-
Point: Emite las partículas desde un punto
-
Box: Emite las partículas dentro de una caja con parámetros width, height y depth
-
Cylinder: Emite las partículas dentro de un cilindro con parámetros width, height y depth
-
Ellipsoid: Emite las partículas en un elipsoide, que es un cilindro con un hueco por dentro. Sus parámetros son inner_width, inner_height e inner_depth
-
Ring: Emite las partículas dentro de un toro con parámetros inner_width e inner_height
-
Hollow ellipsoid: Emite las partículas desde la superficie de un elipsoide
Affectors (efectores)
Aplican cambios a partículas ya emitidas.
18.Tipos de affectors
-
Linearforce: Aplica una fuerza lineal al sistema de partículas.
-
Force_vector: Indica la dirección y la magnitud de la fuerza.
-
Force_applicaton: Indica cómo se aplica la fuerza a las partículas. Si su valor es add se aplica a la velocidad actual de la partícula, si su valor es average estabiliza la velocidad de las partículas
-
Colourfader: Cambia el color de las partículas con el paso del tiempo. Tiene como parámetro un valor para r, g, b y alpha.
-
Colourfader2: Cambia el color de las partículas pero puede cambiar la manera en que lo hace en determinado momento.
-
Colourimage: Asigna los colores de un archivo (.jpg, png, etc.) a una partícula.
-
Scaler: Escala las partículas en el tiempo dado un radio en formato x,y.
-
Rotator: Rota las partículas en grados por segundo dados los siguientes parámetros:
-
Rotation_speed_range_start: Velocidad inicial al rotar las partículas
-
Rotation_speed_range_end: Velocidad final de rotación de las partículas
-
Rotation_range_start: Ángulo inicial de rotación en grados
-
Rotation_range_end: Ángulo final de rotación en grados
Definición de un script .particle [13]
Su nombre comienza con particle_system seguido del nombre. Luego se definen las características del sistema de partículas además de todos los emisores y efectores deseados.
Características de un sistema de partículas [14] -
Quota: Número máximo de partículas vivas a la vez. De alcanzarse este número no se emiten más partículas hasta que algunas mueran
-
Material: Indica el material que tendrán todas las partículas del sistema
-
Particle_width: Indica el ancho de las partículas
-
Particle_height: Indica el alto de las partículas
-
Sorted: De ser true las partículas se ordenan respecto a la distancia de cada una a la cámara
-
Local_space: De ser true las partículas estarán posicionadas respecto al nodo de escena en el que se encuentra el sistema de partículas
-
Billboard_type: Indica el tipo de billboard que se usará como partícula, por defecto es point
-
Billboard_origin: Será el origen de todos los billboards emitidos
-
Common_direction: Si las partículas son orientadas esta dirección aplicará para todas las del sistema
-
Common_up_vector: Si las partículas son de tipo perpendicular este vector será el de todas las partículas del sistema
-
Iteration_interval: Determina la frecuencia en que se actualiza el sistema de partículas
-
Nonvisible_update_timeout: Determina después de cuánto tiempo dejará de ser actualizado un sistema de partículas que no está visible
Descripción general de la arquitectura de ITK
Es una plataforma para el desarrollo de aplicaciones de segmentación y registro de imágenes. Fue desarrollada como un conjunto de algoritmos open-source para analizar las imágenes del “Visible Human Project. [16]
ITK significa”The insight Segmentation and Registration Toolkit”, se encuentra implementado en C++ y utiliza CMake el proceso de configuración. [16]
Al ser una plataforma para procesamiento de imágenes, ITK no tiene GUI ni guarda información de visualización como VTK.
Procesamiento [17]
Al igual que VTK, ITK procesa en una pipeline. Una imagen de entrada pasa a través de uno o varios filtros que realizan operaciones sobre la misma produciendo un nueva imagen.
Ilustración : Procesamiento en ITK
Representación de los datos [17]
Existe una clase llamada DataObject que es la base de los contenedores de información.
Image
Es una grilla de N dimensiones que contiene la información de una imagen.
Regiones
Dado que ITK está pensado para procesar imágenes de gran tamaño, se distinguen las regiones de la misma en tres distintas:
Buffered Region
Porción de la imagen que se encuentra en memoria física.
Requested Region
Porción de la imagen que va a ser procesada.
Largest Possible Region
Es la imagen en su totalidad.
Mesh
Es una colección de N dimensiones de puntos unidos formando celdas (cells), que son caras de la malla en N dimensiones.
Manejo de lectura y escritura de imágenes [17]
ITK provee clases que permiten leer y escribir imágenes en diversos formatos. Estas son itkImageFileReader e itkImageFileWriter.
Ilustración : Lectura y escritura de imágenes en ITK
Nivel de detalle (LOD: Level of detail) [18]
El concepto de niveles de detalle es que un objeto complejo puede simplificarse varios niveles en los que cada nivel de detalle de este objeto tiene menos polígonos, pixeles, puntos, etc, según de lo que se encuentre compuesto el objeto.
A medida que el objeto se vuelve más pequeño en la pantalla ya sea por tamaño o lejanía de la cámara, es necesario dibujar menos detalle para representarlo y de esta manera se obtiene un mejor desempeño ya que hay menos cosas ya sea en la escena o en memoria en un momento determinado.
La siguiente imagen muestra un ejemplo de niveles de detalles para una figura de un conejo cuyas caras son triángulos.
Ilustración : Niveles de detalle por números de triángulos[18]
A medida que el conejo se encuentra más lejos de la cámara, se muestra un nivel de detalle distinto de este objeto, y no es fácil distinguir que el conejo está siendo representado con menos triángulos.
Ilustración : Niveles de detalle según la distancia[18]
Existen diversos algoritmos que permiten reducir el detalle de un objeto o una imagen, además es un procedimiento que se puede hacer previo a la ejecución para cargar el nivel de detalle deseado en cierto momento o durante la ejecución, cambiando la calidad del objeto en el momento en que sea necesario mostrar un nivel distinto.
Paraview
Paraview es una herramienta de código abierto, multi plataforma que permite analizar y visualizar datos. Paraview utiliza herramientas de computación distribuida y permite cargar y visualizar imágenes en computadores con cualquier capacidad. [22]
Esta herramienta fue utilizada para comparar el funcionamiento de la misma con el de los prototipos que hacen uso del modelo de integración generado en este proyecto.
Imagen binaria
Es una imagen compuesta únicamente de dos valores: verdadero o falso. Estos valores pueden ser representados por cualquier par de números que sean distintos entre si o por colores blanco y negro.
Dostları ilə paylaş: |