Programación de aplicaciones RV



Documentos relacionados
Programación de aplicaciones RV

//Esta función es llamada cuando se produce un evento //de teclado void keycallback (void *userdata, SoEventCallback *eventoteclado) {

INGENIERÍA INFORMÁTICA Curso Académico 2006/2007. Sofía Bayona Beriso Francisco Javier Sánchez Zurdo. Realidad Virtual y Animación 1

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Manual de NetBeans y XAMPP

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Unidad I. Introducción a la programación de Dispositivos Móviles (Continuación )

WINDOWS : TERMINAL SERVER

Informática 4º ESO Tema 1: Sistemas Informáticos. Sistemas Operativos (Parte 2)

REALIZACIÓN DE UN MOTOR DE RENDER PARA DISPOSITIVOS MÓVILES BASADO EN IRRLICHT. Autor: Javier Meseguer de Paz Dirigido por: Antonio Berlanga de Jesús

Linux Open Suse 10.2 (Básico + Avanzado)

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

En esta unidad añadiremos información sobre EXT3 y trabajaremos con aspectos visibles que nos proporcionan estos sistemas de archivos.

Capítulo 4. Implementación del lenguaje multitáctil

Práctica 3: Utilización de Charts dobles, Waveforms Graphs, propiedades de gráficos, creación de Waveforms y su almacenamiento en disco.

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

ÍNDICE SISTEMAS OPERATIVOS... 5

CAPITULO 3 VRML-JAVA-WWW

Práctica1. Introducción a Microsoft Access. Qué es Access?

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web.

IES Abyla. Departamento de Informática. Sistemas Operativos

19. Packages o paquetes

El lenguaje de programación Java

Clases y Objetos. Informática II Ingeniería Electrónica

TEMA 1. SISTEMAS OPERATIVOS Y ALMACENAMIENTO DE INFORMACIÓN

Introducción a la programación orientada a objetos

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

Tras crear el terreno, añadir los objetos y programar la interfaz, el aspecto de la escena inicial quedó como se muestra en la Figura 30.

GESTIÓN DE REDES PARTE III

Cómo crear un fichero de ayuda para tus aplicaciones?

FUNDAMENTOS DE PROGRAMACION CON C#

Gestión de archivos (módulo transversal, MF0978_2)

Definiciones. Tema 21_Módulos Menú 1

VAST: Manual de usuario. Autores: Francisco J. Almeida-Martínez Jaime Urquiza-Fuentes

Preliminares. Tipos de variables y Expresiones

Curso de Java POO: Programación orientada a objetos

Microsoft Office 2010 Illustrated. Tipos de Software

TELECOMUNICACIONES Y REDES

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011

Programación de Sistemas

Microsoft SQL Server Conceptos.

Inducción al Laboratorio de Informática

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

ING. YIM APESTEGUI FLORENTINO

CAPITULO 9. Diseño de una Base de Datos Relacional Distribuida

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

Ministerio de Educación Base de datos en la Enseñanza. Glosario

Arquitectura de Aplicaciones

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

Creación un instalador con Visual Studio.NET. Irene Sobrón. Ingeniero de Telecomunicaciones por la Escuela Técnica Superior de Bilbao

Capitulo 5. Implementación del sistema MDM


Descarga, instalación y uso de herramientas:

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

Programación Orientada a Objetos con Java

Getting Started. 1. Introducción. 2. Requerimientos de software

SENTINEL REMOTE CONTROL (S.R.C)

Desarrollo de técnicas cooperativas para un editor de objetos 3D

Introducción a Protégé

Informática 1 Grado en Matemáticas

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

3.4. Reload Editor ( Guía de Uso).

Manual del visor GeoEuskadi 2013 MANUAL DEL VISOR GEOEUSKADI

Proyecto final elo329: utilizacion de LWJGL para java 3D. - Gabriel Juri - Andrés Medina - Lukas Perez

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

Programación Gráfica. Conceptos Básicos

Integración de NetBeans con OpenOffice.org

Apéndice A Herramientas utilizadas

1. El entorno de desarrollo Eclipse

InteriCAD Lite es un programa para visualización de interiores que le permitirá crear imágenes con calidad fotorealista en un tiempo récord.

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

LINUX OPENSUSE 10.2 (BASICO+AVANZADO)

Plataforma desarrollo Java Formación elearning tutorizada en castellano. Fabricante: Java Grupo: Desarrollo Subgrupo: Master Java

GedicoPDA: software de preventa

1

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

Instalación del programa PSPP y obtención de una distribución de frecuencias.

Práctica 2 Sólidos Articulados (Asignación 2 de Marzo; Entrega 23 de Marzo a las 23:59)

1. En relación al concepto de microprocesador, señale cual de las siguientes es una definición correcta:

MANUAL DE USUARIO. JNyARchiTech ALFONSO NEIL JIMÉNEZ CASALLAS MAYDA ALEXANDRA CARVAJAL VARGAS PONTIFICIA UNIVERSIDAD JAVERIANA

Práctica 1: Herramientas básicas:

Sistema Inteligente de Exploración

El pipeline gráfico Figura 3.1

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

TEMA 2 WINDOWS XP Lección 4 BLOC DE NOTAS

Demo FireMonkey La nueva generación de desarrollo de aplicaciones de negocio

Conceptos Básicos de Software. Clase III

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Practica creación de tesauros

DESARROLLO DE APLICACIONES ACCESIBLES

Usando HADES Parte 1. Contenido Introducción Instalación Ejecución Menú contextual El primer circuito 5

PROGRAMACIÓN ORIENTADA A OBJETOS

Tema 1. Introducción a JAVA

Introducción al lenguaje de programación java

Introducción al SPSS/PC. 1. El editor de datos. Taller de Estadística

PROFESORES Y TUTORÍAS TEMARIO PÁGINA DE LA ASIGNATURA.

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.1 UML: Introducción

Transcripción:

Bibliografía Programación de aplicaciones RV TÉCNICAS Y DISPOSITIVOS DE REALIDAD VIRTUAL MASTER EN INFORMÁTICA GRÁFICA, JUEGOS Y REALIDAD VIRTUAL Marcos García Marcos.garcía@urjc.es Virtual Reality Technology Ed. Wiley-Interscience (Second Edition). Grigore C. Burdea & Philippe Coiffet. The Inventor Mentor : Programming Object-Oriented 3D Graphics with Open Inventor, Release 2 Ed. Wesley. Josie Wernecke. The Inventor Toolmaker : Extending Open Inventor, Release 2 Ed. Wesley. Josie Wernecke. Open Inventor C++ Reference Manual Ed. Wesley. Josie Wernecke. http://doc.coin3d.org/ http://oss.sgi.com/projects/inventor/genfaq.html http://wwwasd.web.cern.ch/wwwasd/lhc++/openinvent or/pro/html/inventor_base.htm Índice Estructura de un sistema RV Introducción OpenInventor EonStudio

Estructura software de un sistema RV Estructura software de un sistema RV Usuario Dispositivos Entrada Software Entrada Motor Software Dispositivos Salida Software Salida Sw Modelo de mundo virtual Geometría Dotar de comportamiento a los objetos del modelo Introducir el modelo de forma organizada en nuestra aplicación Comportamiento Crear módulos que gestionen los dispositivos I/O Render Gráfico OpenGl DirectX Render Háptico Drivers de los dispositivos Toolkits Estado Mundo Virtual Base de Datos VR Toolkits Características adicionales Soportan algunos dispositivos I/O Permiten generar código portable Permiten importar (y exportar) modelos en formatos usados por herramientas CAD (.3ds,.max,.dwg,.dxf). Detección de colisiones Simulación física Animación de personajes. Modelos de texturas, iluminación y sombreado Soporte de modelos multirresolución (LOD) Funciones de red para interacciones multiusuario Clasificación Programación gráfica o de texto Lenguaje de programación que usan Dispositivos soportados (I/O) Rendering soportado Propósito especifico o propósito general Propietarias o públicas

Clasificación Nombre Open Inventor (SGI,COIN3D,TGS) EON Studio (Eon Reality) Área de aplicación Propósito general Propósito general Librerías propietarias Si/No Si Lenguaje de la librería C/C++ 3DVIA Virtools Propósito general Si Scripting Java3D (Sun Microsystems) GHOST (SensAble Technologies) Propósito general/render Gráfico Renderizado Háptico No Si Programación gráfica SDK C++ (Extender e integrar) Java C++ Actualmente Toolkits de Render y Motores Completos Crytek Ogre Unity3D Unreal Engine Sofa (aplicaciones quirurjicas) Toolkits de sonido DirectSound OpenAl Toolkits de Simulación Física Havok Physics Engine PhysX Bullet Ode Toolkits de Inteligencia Artificial Kynapse 4.0 (PS3) PeopleShop (Boston Dynamics) Militar/Civil Si C/C++ Scene Graphs Scene Graphs Las toolkits organizan la información en grafos llamados scene graphs Organizan el mundo de forma jerárquica Estructura de árbol Nodo raíz Internos Hoja La forma de leer el árbol es propia de cada toolkit No son estructuras fijas Ejemplos: B D Nodo root A C E Nodo Interno J Nodo Hoja F G H I

Scene Graphs Ejemplos: Escena Open Inventor Palma Bola Índice Introducción Arquitectura de OI Base de Datos (primitivas) Componentes de alto nivel Grafo de escena Jerarquía de objetos Implementaciones de Open Inventor Introducción Toolkit 3D C/C++ Orientada a objetos Extensible Aprovecha toda la potencia Hw. Código portable Tiene su propio formato de intercambio de datos *.iv = *.wrl Permite el intercambio de datos entre aplicaciones

Introducción Características adicionales (Coin) Soporte sonido 3D Detección de colisiones Soporte threads Orientada a objetos Soporte: 3DS Visualización de volúmenes (Sim Voleon) Otros módulos Introducción Clases básicas Primitivas Nodos de propiedad, forma, grupo Manipuladores Node Kits Engines (Motores) Sensores Acciones Componentes de alto nivel Arquitectura de Inventor Arquitectura de Inventor Open Inventor Component Library Node kit Manipulator Database Scene Open Inventor 3D Toolkit Open Inventor 3D Interchange File format Open Inventor 3D Interchange File format OpenGL SSOO

Base de datos Librería de componentes Contiene Nodos Agrupados en Scenegraphs Motores Sensores Permite Acciones Renderizado Búsquedas Cálculo de Bounding Box (caja contenedora) Escritura y lectura de un archivo Librería de componentes Dependiente del gestor de ventanas Contiene Áreas de Renderizado Visualizadores Editores Realiza la inicialización (Base de datos y sistema de ventanas) Trata eventos Los captura Los trata directamente Los transforma para OI Scene Graph Nodos del grafo de la escena La unidad básica de OI son los nodos Los nodos se estructuran en grafos Tienen una estructura muy parecida a los árboles Nodo raíz (nodo de agrupación) Nodos intermedios (nodo de agrupación) Nodos hojas (propiedades, formas, manipuladores..) Un nodo hijo pude tener dos padres El grafo debe ser acíclico

Ejemplo de DB Lectura del grafo Escena 1 Escena 2 Aplicar acción Arriba a bajo De izquierda a derecha Traversal state (estado trasversal) Acumulación de transformaciones Material Luces Ejemplo de DB Objetos OI Escena 1 Escena 2 Convención de nombres Objetos Comienzan por S mayúscula y el comienzo de cada palabra irá también en mayúscula Objetos básicos Sb (scene basic)» SbVec3f Resto de objetos So (scene objet)» SoGroup Objeto de la librería de componentes So[Gestor de ventanas]» SoWinRenderArea, SoQtRenderArea, SoXtRenderArea Métodos y atributos Primera letra con minúscula, y el comienzo de cada palabra en mayúscula addchild() Tipos enumerados Todo en Mayúscula FILLED, FIRST

Jerarquía de objetos Base de datos Objetos Básicos (Sb) Campos (Fields) Mono-valuados (Single-field SoSF) Multi-valuados (Multi-field SoMF) Objetos heredados de la clase base SoBase Contenedores de Campos SoFieldContainer Motores SoEngine Nodos SoNode Forma Propiedad Grupo Kits Iluminación Cámaras Rutas SoPath Sensores SoSensor Tiempo SoTimerQueueSensor Otros SoDelayQueueSensor Acciones SoAction Errores SoError Eventos SoEvent Base de Datos SoBD Estado SoState (SoElement) Librería de componentes SoXt, SoWin SoWinObject Componentes (Ventanas) Dispositivos Contiene los grafos de escena (nodos), los motores y los sensores. Tiene un modelo de eventos independiente del gestor de ventanas Es un objeto único SoDB Ha de ser inicializado Directamente SoBD::init() Inicializando la librería de componentes: SoWin::init() Permite utilizar el formato de intercambio de datos SoSeparator *readall(soinput *fichero) Ejemplo Objetos básicos SoSeparator *readfile(const char *filename) SoInput * datafich = new SoInput(); SoSeparator *sep; if (!datafich->openfile (filename)) fprintf (stderr,"error: Abriendo generando la base de datos\n" " ->No se encuentra el fichero %s\n",filename); exit (-1); //Comprobamos que es un fichero válido if (!datafich->isvalidfile ()) fprintf (stderr,"error: Abriendo generando la base de datos\n" " ->Fichero %s no valido\n",filename); exit (-1); Objetos Básicos (Sb) Tipos básicos, no tienen ningún objeto padre en la jerarquía. Usados por otros objetos OI Ejemplos SbLine, SbName, SbVect3f, SbRotation, SbMatrix, SbViewportRegion, SbMutex sep=sodb::readall (datafich); delete datafich; return sep;

Campos (Fields) SoType Contenedores (Fields) Contienen tipos básicos Básicamente se usan para detectar cambios en los campos de la base de datos. Campos mono-valuados (Single-field SoSF) SoSFFloat (float), SoSFRotation (SbRotation) Campos multi-valuados (Multi-field SoMF) SoMFFloat (float), SoMFRotation (SbRotation) Asignación de valores y consulta de valores Mono-valuados Asignación normal: SoSFFloatVar = 3.0f; Uso de los métodos setvalue y getvalue Multi-valuados Como si se tratase de un vector: SoSFFloatVar [1]= 3.0f; Uso de los metodos: getvalue, set1value, setvalues, insertvalues, deletevalues Indica el número de valores que posee: getnum Se pueden conectar: connectfrom() Se pueden ignorar: setignore Clase de chequeo de tipos SoBase, acciones, eventos, errores SoType permite Obtener el nombre del tipo getname() Crear instancias createinstance() Conocer el clase padre getparent() Conocer el tipo de un nodo por su nombre fromname() Utilidad: saber si un objeto pertenece a una determinada clase o jerarquía Objeto->getTypeId.isDerivedFrom(SoXXXX::getClassTypeID) Objeto->isTypeOf(SoXXXX::getClassTypeID) Objeto->getTypeId==SoXXXX::getClassTypeID Permite realizar búsquedas de un determinado tipo (SoSearchAction) Equivalentes Ejemplo Objetos heredados de la clase base SoBase SoSearchAction mysearchaction; // Look for first existing light derived from class SoLight mysearchaction.settype(solight::getclasstypeid()); mysearchaction.setinterest(sosearchaction::first); mysearchaction.apply(root); if (mysearchaction.getpath() == NULL) // No lights found // Add a default directional light to the scene SoDirectionalLight *mylight = new SoDirectionalLight; root->insertchild(mylight, 0); Contenedores de Campos Nodos Forma Propiedad Transformaciones» Manipuladores Apariencia Métricos Grupo Kits Iluminación Cámaras Motores Rutas

Creación de nodos Borrado de nodos Los nodos deben crearse como punteros Deben ser referenciados en la base de datos Directamente ref() Añadiéndolo a un padre addchild(), insertchild() Añadiéndolo a un path o ruta SoPath Añadiéndolo a una lista de nodos SoNodeList Añadiéndolo a un campo o field SoSFNodo SoMFNode Conectándolo de un engine No usar delete DECREMENTAR a 0 su contador de referencias (cada operación decrementa en 1 este contador) De forma directa unref() Borrándolo de un nodo padre deletenode() Sacándolo de un path o ruta SoPath Borrándolo de una lista de nodos SoNodeList Cambiando el puntero de campo o field a NULL o con otro valor SoSFNodo SoMFNode Desconectándolo de un engine Quitar referencias sin borrar Nombrado de nodos y motores Se utiliza unrefnodelete() Ejemplo Incorrecto Creas un nodo: new SoCone() Le aplicas una acción (ref/unref) : SoBoundingBoxAction Lo añades a un grupo: addchild() Correcto Creas un nodo new SoCone() Lo referencias: ref Le aplicas una acción: SoBoundingBoxAction Usas unrefnodelete() Lo añades a un grupo: addchild() Descendientes de la clase SoBase Obtener nombre getname() Poner nombre setname() Buscar nodo por nombre SoNode::getByName ()

Ejemplo Tipos de nodos SoSeparator *root = new SoSeparator; root->ref(); //Importante referenciar el nodo raíz root->setname("root"); SoCube *mycube = new SoCube; root->addchild(mycube); mycube->setname("mycube"); SoSphere *mysphere = new SoSphere; root->addchild(mysphere); mysphere->setname("mysphere"); RemoveCube(); --------------------------------------------------------------------------------------------------------- void RemoveCube() //Busca en toda la base de datos, no sólo en una escena SoSeparator *myroot; myroot = (SoSeparator *)SoNode::getByName("Root"); SoCube *mycube; mycube = (SoCube *)SoNode::getByName("MyCube"); myroot->removechild(mycube); Forma Propiedad Transformaciones Manipuladores Apariencia Métricos Grupo Iluminación Cámaras Nodos de forma Nodos de propiedad SoShape Formas básicas SoSphere, SoCylinder, SoCone Curvas y superficies (Nurbs) Indexadas SoIndexedNurbsCurve, SoIndexedNurbsSurface No Indexadas SoNurbsCurve, SoNurbsSurface Textos 3D y 2D SoText2, SoText3 Formas compuestas por vértices Indexadas SoIndexedFaceSet, SoIndexedLineSet, SoIndexedTriangleStripSet, No Indexadas SoFaceSet, SoPointSet, SoLineSet, SoQuadMesh, SoPointSet, SoMarkerSet VRML Nodos de transformación (SoTransformation) SoTranslation, SoRotation, SoScale SoTransform SoTransformManip (Manipuladores) Nodos métricos Nodos métricos SoNormal, SoCoordinate3

Nodos de apariencia Color SoMaterial SoBaseColor Textura SoTexture2 Tipo de letra SoFont Nodos de grupo Son contenedores que agrupan nodos de la escena Su clase base es SoGroup. Métodos básicos addchild insertchild removechild (Índice o nodo) Subclases: SoSeparator SoSwitch (whichchild) SoTransformSeparator Nodos de iluminación y nodos cámara Iluminación: iluminan la escena SoGLLightIdElement::getMaxGLSources(); //nº máx luces SoLight Ambiental Puntual (Point) Direccional (Directional) Focal (Spot) Cámara: Muestran parte de la escena SoCamera Proyección en perspectiva Proyección ortográfica Frusturm Modelo de Eventos Derivan de la clase SoEvent Son enviados por la librería de alto nivel Eventos de teclado, ratón Se recorre el árbol de escena buscando qué nodos pueden tratar el evento sethandled Nodos que tratan eventos Manipuladores SoSelection SoEventCallback

Manipuladores Callbacks Draggers y manipulators. Son nodos que capturan eventos y tienen determinadas respuestas ante ellos. Funcionamiento Capturan el evento Cambian de forma Los manipuladores además son nodos de propiedad Cambian el traversal state Luces Transformaciones Planos de corte Se pueden sustituir por transformaciones o luces replacenode (SoPath *p) replacemanip (SoPath *p, SoTransform *t) Son funciones a las que se llama cuando un objeto detecta un evento Nodos (SoCallback, Draggers, SoEvenCallback, SoSelection ) Sensores Motores Es una forma de dotar de comportamiento a la escena Ejemplo: SoSelection *grupo= new SoSelection(); grupo->addselectioncallback(seleccioncallback, data); void seleccioncallback(void *userdata, SoPath * path); Ejemplo Ejemplo // An event callback node so we can receive key press events SoEventCallback *myeventcb = new SoEventCallback; myeventcb ->addeventcallback(sokeyboardevent::getclasstypeid(), mykeypresscb, selectionroot); selectionroot ->addchild(myeventcb); -------------------------------------------------------------------------------------------- // userdata is the selectionroot from main(). Void mykeypresscb(void *userdata, SoEventCallback *eventcb) SoSelection *selection = (SoSelection *) userdata; const SoEvent *event = eventcb->getevent(); If (SO_KEY_PRESS_EVENT(event, UP_ARROW)) myscaleselection(selection, 1.1); eventcb->sethandled(); else if (SO_KEY_PRESS_EVENT(event, DOWN_ARROW)) myscaleselection(selection, 1.0/1.1); eventcb->sethandled(); SoEventCallback * ecb = new SoEventCallback; ecb->addeventcallback(soevent::getclasstypeid(), mouse_cb, NULL); root->addchild(ecb); ------------------------------------------------------------------------- void mouse_cb(void * closure, SoEventCallback * eventcb) const SoEvent * event = eventcb->getevent(); if (event->isoftype(solocation2event::getclasstypeid())) const SbVec2s position = event->getposition(); printf("mouse moved: <%i %i>\n", position[0], position[1]);

Ejemplo CDS SoEventCallback * mouseevent = new SoEventCallback; mouseevent-> addeventcallback(somousebuttonevent::getclasstypeid(), mousecallback,null); root->addchild (mouseevent); SoEventCallback * keyevent = new SoEventCallback; keyevent -> addeventcallback(sokeyboardevent::getclasstypeid(), keycallback,null); root->addchild (keyevent); -------------------------------------------------------------------------------------------- void mousecallback (void *, SoEventCallback *mouseevent) const SoEvent *event = mouseevent->getevent (); if (SO_MOUSE_PRESS_EVENT(event, BUTTON1)) //OTRAS MACROS. //SO_KEY_PRESS_EVENT (event, PAD_ADD), //SO_KEY_RELEASE_EVENT (event, Q) Motores o engines Motores o engines Son objetos que conectan campos (fields) Principalmente se usan para animar la escena Entradas: campos (SoField) Salidas: objeto especial (SoEngineOutput) Tipos Aritméticos SoCalculator (lento) Animación Eventos temporales SoTimeCounter Entrada 1 Eventos no temporales Entrada 2 SoCounter Salida 1 Usado para manipular arrays SoSelectOne Entrada n Se pueden concatenar motores a otros motores Los campos pueden ir directamente conectados sin motores connectfrom (otro campo o un salida de un motor)

Ejemplo Rutas SoCalculator *calc=new SoCalculator; SoTranslation *t1=new SoTranslation; SoTranslation *t2=new SoTranslation; //Conectamos dos traslaciones. A una de ellas le //anulamos la coordenada y calc->a.connectfrom(&t1-> translation); t2->translation.connectfrom(&calc->oa); calc->expression.set1value(0,sbstring("oa[0]=a[0]")); calc->expression.set1value(1,sbstring("oa[1]=0")); calc->expression.set1value(2,sbstring("oa[2]=a[2]")); Objeto SoPath Indican caminos dentro del grafo de escena Es una cadena de nodos donde cada eslabón es hijo del anterior Utilidad Almacenan subgrafos de la escena Todas las acciones que se aplican a un nodo pueden aplicarse a un Path Acciones Ejemplo Clase padre SoAction Son operaciones que se realizan sobre una escena, nodo o ruta. Ejemplos Renderizado SoGlRenderAction Escritura en un fichero SoWriteAction Cálculo de Bounding Boxes SoGetBoundingBoxAction Búsquedas de nodos SoSearchAction Cálculo de la matriz de transformación SoGetMatrixAction SoSeparator * root = new SoSeparator; root->ref(); SoPerspectiveCamera * pcam = new SoPerspectiveCamera; root->addchild(pcam); SoEventCallback * ecb = new SoEventCallback; ecb->addeventcallback(somousebuttonevent::getclasstypeid(), event_cb, viewer); root->addchild(ecb); //Componente de alto nivel utilizado para pintar viewer->setscenegraph( root ); pcam->viewall( root, viewer->getviewportregion() ); ------------------------------------------------------------------------------------- // attempting raypick in the event_cb() callback method SoRayPickAction rp( viewer->getviewportregion() ); rp.setpoint(mouseevent->getposition()); rp.apply(viewer->getscenegraph()); rp. getpickedpoint().getpath(); //SoPickedPoint

Ejemplo Sensores SbMatrix gettrans(sonode *node, SoGroup *root) SoSearchAction *sa=new SoSearchAction; sa->setnode(node); sa->apply(root); path=searchaction->getpath(); assert(path); Derivan de la clase SoSensor Son mecanismos de OI para planificar tareas Existen dos colas de tareas Delay queue: las tareas de esta cola se activan cuando la CPU tiene tiempo libre Timer queue: las tareas de esta cola se activan por un evento temporal Las tareas se activan mediante callbacks SoGetMatrixAction * gma =new SoGetMatrixAction (SbViewportRegion()); gma->apply(path); return gma->getmatrix() Ejemplo Ejemplo viewer->setautoredraw(false); SoIdleSensor* rendertimer = new SoIdleSensor(render,0L); rendertimer->setinterval(render_step); rendertimer->schedule(); ------------------------------------------------------------------------- --------------------- void render (void *, SoSensor *) viewer->render(); viewer->setautoredraw(false); SoTimerSensor* rendertimer = new SoTimerSensor(render,NULL); rendertimer->setinterval(render_step); rendertimer->schedule(); --------------------------------------------------------------------------------- ------------- void render (void *, SoSensor *) viewer->render();

Componentes de alto nivel Componentes de alto nivel Es propia del gestor de ventanas que utilizamos: SoWin, SoXt, SoGtk, SoQt Nos ofrecen Funciones de inicialización y gestión de ventanas Tratamiento de eventos Áreas para renderizar escenas Componentes para cambiar la escena (editores de materiales ) Capturan los eventos del gestor de ventanas So???::mainLoop() Los utilizan ellos mismos Los pasan a la base de datos Inicialización del gestor de ventanas y la base de datos So???::init Tipos de objetos Componentes Áreas de renderizado SoWinRenderArea Visualizadores SoWinViewer» SoWinExaminerViewer,SoWinPlaneViewer Otros componentes Dispositivos Captura de eventos Teclado Ratón Ejemplo #include <Inventor/Win/SoWin.h> #include <Inventor/Win/viewers/SoWinExaminerViewer.h> #include <Inventor/nodes/SoBaseColor.h> #include <Inventor/nodes/SoCone.h> #include <Inventor/nodes/SoSeparator.h> int main(int argc, char ** argv) HWND mainwin = SoWin::init(argc, argv, argv[0]); SoSeparator * root = new SoSeparator; root->ref(); root->addchild(new SoCone); SoWinExaminerViewer * eviewer = new SoWinExaminerViewer(mainwin); eviewer->setscenegraph(root); eviewer->show(); eviewer->settransparencytype(soglrenderaction::sorted_object_blend); SoWin::show(mainwin); SoWin::mainLoop(); // Clean up resources. delete eviewer; root->unref(); Relación entre OpenInventor y OpenGl OI permite construir aplicaciones con un alto nivel de abstracción Si no queremos usar los componentes de alto nivel podemos usar OpenGl para el renderizado y el tratamiento de los eventos Nos permite combinar las ventajas de ambos Ejemplo: Pintar un grafo de escena y pasar un filtro al framebuffer. Aumenta la complejidad return 0;

Implementaciones de OI OI de SGI Gratuito Disponible Irix Linux Coin3d Gratuito con propósitos no comerciales Versión profesional con librerías adicionales Disponible Linux Windows Mac OS X Como utilizar Coin3d con Visual Stutio Instalar las librerias Coin3D Simage (texturas) SoWin o SoQt (según el gestor de ventanas que vayamos a utilizar) Crear una variable de entorno con la dirección de la librería $(COIN3DDIR) C:\COIN3D\ Introducir en el path donde están las dlls $(PATH) C:\COIN3D\BIN Volver a arrancar el sistema Como utilizar Coin3d con Visual Stutio Crear un proyecto Aplicación de consola Vacía Configurar el proyecto C/C++ Preprocessor definition Introducir las variables de entorno de Coin» SIMAGE_DLL, COIN_DLL, SOWIN_DLL» SIMAGE_NOT_DLL, COIN_NOT_DLL, SOWIN_NOT_DLL Preprocessor -> Additional Include Files $(COIN3DDIR)\Include Link Object Library Modules $(COIN3DDIR)\lib\SoWin1.lib $(COIN_DIR)\lib\simage1.lib $(COIN3DDIR)\lib\Coin3.lib Como utilizar Coin3D con gcc Instalación Descargar librerías (Simage, coin, SoXt) Recompilarlos en el orden anterior tar xvfz nombre_paquete-x.y.z.tar.gz cd nombre_paquete-x.y.z./configure make make install (como root) Utilizar los comandos coin-config y soxt-config para compilar y enlazar soxt-config --build nombre_programa fich1.cpp fichn.cpp Para obtener más información sobre estos programas utiliza --help

Índice Eon Studio Introducción Paquetes Componentes Arquitectura e interfaz Introducción Paquetes Toolkit 3D Interfaz gráfico Funciona solo bajo Microsoft Windows Toolkit propietaria Extensible Da soporte para algún dispositivo I/O Cuevas Trackers Funciona sobre DirectX o OpenGl No es una herramienta de modelado Importa modelos (Okino) Dota a los modelos de comportamiento Eon Studio Importa modelos Utiliza Okino Creación de modelos interactivos No se necesita experiencia en programación Eon Inmersive Extensión de Eon Studio No incluido en el paquete básico Permite utilizar Eon con dispositivos RV Eon Viewer Permite visualizar proyectos Eon Gratuito

Paquetes Componentes Eon Raptor Plugin para 3D Studio SDK Librerías de C++ Totalmente integrado con Visual C++ Contiene nuevos wizards Basado en tecnología COM Permite extender los nodos y módulos de Eon Studio Permite integrar modelos Eon en nuestras aplicaciones Eon Turbo Permite publicar en la web modelos Eon Eon Xtra Plugin para explorer Permite visualizar modelos Eon Árbol de simulación Contiene todos los objetos que participan en la simulación (nodos) Scene graph Nodos Todos los objetos Eon son nodos que se cuelgan del árbol. Tipos Grupo Render Agentes Sensores Modelos de movimiento Scrips Componentes Componentes Campos Variables contenidas en los nodos Tipos de datos Números Cadenas Arrays Booleanos Punteros Vectores geométricos (traslaciones, rotaciones ) Tiempo Nodos Clases de campo Field: Campos internos de un nodo EventIn: Campos que recibe un nodo como eventos de entrada EventOut: Campos que recibe un nodo como eventos de salida ExposedField: Campos que pueden ser tratados tanto como eventos de entrada como eventos de salida. Conexiones y rutas Se define el comportamiento de los nodos conectando sus campos Prototipos Encapsulan nodos y sus conexiones internas

Arquitectura Interfaz