1 25/09/2016II Encuertros de programadores Java. UJI Gráficos 3D en tiempo real. Más allá de Java 3D, OSG VirtualPlanets Julio Campos [email protected]
2 25/09/2016II Encuertros de programadores Java. UJI Contenidos Intodución Grafos de escena Open Scene Graph OSG Virtual planets (osgVP) Ejercicios
3 25/09/2016II Encuertros de programadores Java. UJI Introdución Graficos 3D en Java Jogl Binding JNI que expone en java toda la funcionalidad de OpenGL Java 3D Grafo de escena que hace uso de Jogl OSG Virtual Planets Binding JNI de la librería OSG con funcionalidad especifica para GIS
4 25/09/2016II Encuertros de programadores Java. UJI Grafos de escena Grafo aciclico dirigido. Contiene datos que definen un escenario virtual en diferentes tipos de nodos. Los nodos hoja suelen contener información geométrica, y el resto suele aplicar alguna modificación sobre sus hijos. El proceso de dibujado consiste en recorer el grafo aplicando las operaciones según el tipo de nodo
5 25/09/2016II Encuertros de programadores Java. UJI Ventajas de los grafos de escena Ayudan a establecer una organiszción lógica de la escena. Posibilitan el proceso automático de culling. Facilitan el proceso de selección entre múltiples niveles de detalle. Hacen más cómodo el manejo de otros librerías de más bajo nivel.
6 25/09/2016II Encuertros de programadores Java. UJI Tipos comunes de nodos Geometría: Almacenan información poligonal, y de textura. Suelen actuar como nodos hoja. Grupo: Se emplean para agrupar varios nodos hijos. Nivel de detalle (LOD): Seleccionan uno solo de sus hijos dependiendo de la distancia entre el objeto y el observador. Transformación afín: Aplica una matriz de transformación a todos sus hijos. Switch: Permite seleccionar cuales de us hijos se mostrarán y cuales no.
7 25/09/2016II Encuertros de programadores Java. UJI Open Scene Graph (OSG) 1/2 Toolkit gráfico de alto nivel. Esta basado en un modelo los grafos de escena. Es multiplataforma (Linux, Windows, FreeBSD, Mac OSX, Solaris, HP-UX e incluso PlayStation2). Tiene licencia OpenSceneGraph Public License: Permite a proyectos de código abierto o cerrado utilizarla, modificarla y distribuirla libremente.
8 25/09/2016II Encuertros de programadores Java. UJI Open Scene Graph (OSG) 2/2 OSG soporta: Culling: view frustum culling,occlusion culling, small feature culling. Nodos con nivel de detalle (LOD). Clasificación de estado. Vertex arrays y listas de dibujado. Rendimiento: Es uno de los grafos de escena disponibles de mayor rendimiento. Igualando a OpenGL Performer o Vega Scene Graph. Muy parecido a performer. Pero no soporta multiproceso
9 25/09/2016II Encuertros de programadores Java. UJI Nodos basicos de OSG Node: Nodo base, el resto de nodos heredan de él. Group: Agrupa nodos hijo. Transform: Clase base para aplicar transformaciones (MatrixTransform, PositionAtitudeTransform, DOFTransform) Geode: nodo hoja que almacena geometria. Y muchos más: Billboard,LOD, impostor, Switch, sequence, ligthSource, Projection, OcluderNode, etc..
10 25/09/2016II Encuertros de programadores Java. UJI OSG Virtual Planets Binding JNI de la librería OSG con funcionalidad especifica para GIS Esta formada por: osgVP-CORE osgVP-VIEWER osgVP-FEATURES osgVP-PLANETS osgVP-MANIPULATOR
11 25/09/2016II Encuertros de programadores Java. UJI osgVP-CORE Mapeo JNI uno a uno sobre osg-core. Excepto clases matematicas, implementadas en java. Clases matematicas: Vec3, Vec4, Matrix y Quad. Nodos AutoTransform y PositionAttitudeTransform. OsgDB, clase estatica que: Carga distintos formatos 3D (3ds,obj,ive,dxf, etc...). Cargar y salvar el grafo de escena. Geode y Geometry.
12 25/09/2016II Encuertros de programadores Java. UJI osgVP-VIEWER Crea visor de grafos de escenas en aplicaciones java. ViewerFractory: Factoria que crea CanvasViewer (AWT) y JpanelViwer (Swing). Camera: Simplificación de la camara de OSG. Intersection: Almacena intersecciones con la escena. ViewerStateListener: Listener de eventos de teclado.
13 25/09/2016II Encuertros de programadores Java. UJI osgVP-FEATURES Librería de dibujo vectorial (puntos,lineas, poligonos, texto, etc..). Posibilidad de cambiar las propiedades de estas features. Es capaz de extruir puntos, lineas y poligonos.
14 25/09/2016II Encuertros de programadores Java. UJI OsgVP-PLANETS 1/2 Crea grafos de escena especificos para planetas. Basados en tiles (Baldosas) Configuración de: Tipo de planeta: Plano o esférico. Tipo de proyección. Definir radio ecuatorial y polar. Posición en el espacio. Extensión. PlanetViewer. CustomTerrainManipulator.
15 25/09/2016II Encuertros de programadores Java. UJI OsgVP-PLANETS 2/2 TileCreatedListener: Cuando se crea un tile. TileDestroyedListener: Cuando se destruye un tile. RequestLayerListener: Permite volver a solicitar un tile concreto.
16 25/09/2016II Encuertros de programadores Java. UJI osgVP-MANIPULATOR Librería que nos permite: editar escenas 3D. manipular escenas 3D.
17 25/09/2016II Encuertros de programadores Java. UJI Maven Targets necesarios: mvn eclipse:add-maven-repo mvn eclipse:eclipse En caso de querer compilar: mvn compile mvn package mvn install mvn deploy
18 25/09/2016II Encuertros de programadores Java. UJI Ejecicio 1 Creación de viewer !! Resuelto ¡¡ Importante: ViewerFactory. getInstance ().createViewer( ViewerFactory.VIEWER_TYPE.CANVAS_VIEWER, null); ViewerFactory.getInstance().createViewer(ViewerFactory.VIEWER_TYPE.JPANEL_VIEWER,null); ViewerFactory. getInstance ().startAnimator(); jContentPane.add((Component) _canvas3d, BorderLayout.CENTER); root.addChild(osgDB.readNodeFile(path + "/cow.ive"));
19 25/09/2016II Encuertros de programadores Java. UJI Ejecicio 2 Sacar screen shot _canvas3d.getOSGViewer().takeScreenshot("/data/screenShot.jpg"); Salvar y cargar grafo de escena osgDB.writeNodeFile(SceneData, "/data/graph.osg"); osgDB.readNodeFile(FileName);
20 25/09/2016II Encuertros de programadores Java. UJI Ejercicio 3 Puntos Clase PixelPoint Lineas Clase Polyline Poligonos TesselablePolygon
21 25/09/2016II Encuertros de programadores Java. UJI Ejemplo 4 Texto FadeText t = new FadeText(); t.setText("fadeeeeee"); t.setAutoRotateToScreen(true); t.setFadeSpeed(0.1f); t.setColor(new Vec4(1.0, 0.0, 0.0, 0.5));
22 25/09/2016II Encuertros de programadores Java. UJI Ejemplo 5 Nodos de transformación AutoTransform PositionAtitudeTransform setPosition(x,y,z); setRotation(rotación,(x,y,z));