JNI en el desarrollo de aplicaciones Java. osgVP...
Transcript of JNI en el desarrollo de aplicaciones Java. osgVP...
JNI en el desarrollo de aplicaciones Java. osgVP Framework
Rafael GaitánSegundos Encuentros de Programadores Java
10 Abril 2008Universitat Jaume I
• Experiencia Profesional y Personal.
• Java Native Interface (JNI).
• Desarrollo Multiplataforma.
• Sistemas de Información Geográfica.
• OSG Virtual Planets
Contenidos
Experiencia ProfesionalDesarrollo de IMST-
ART en el IEE.
Creación de Entornos Virtuales en el Mediclab (Proyecto EMMA).
Administrador de Sistemas en el Instituto de Ingeniería Energética (IEE).
Proyecto VirtualMobile en el Grupo de Informática Gráfica (DSIC).
Experiencia Personal
DemoScene Gráficos por Computador
A demo(nstration) in a demoscene sense, is a piece of free software that shows realtime rendered graphics, while playing music. Often, the music is tightly connected/synced to the visuals. Modern pc demos run linear from start to finish and are non-interactive. There is no whatsoever rule what a demo must/can show. The creator is free to decide whether he wants to show stylish and/or impressive effects, an epic story, funny/bizarre/satirical audiovisual artwork or a distorted mindfuck.
ActualmenteDesarrollo de la extensión 3D para gvSIG en el instituto AI2 y en colaboración con IVER.
Java Native Interface
Funcionamiento de JNI
Funcionamiento de JNI
Aplicación Java
Java Runtime
Sistema Operativo
Funcionamiento de JNI
Aplicación Java JNI
Java Runtime
Sistema Operativo
Librería Dinámica
Introducción a JNI
• API del JDK para llamadas nativas.
• Definición de métodos nativos en java• public native void myNativeMethod();
• Carga de librerías nativas en Java• System.loadLibrary(“myNativeLibrary”);
• Nombre estándar de funciones de la librería dinámica en C.
• Java_packagename_classname_methodname(...);
Introducción a JNI
Librería Dinamica Clase C++
Clase Java (native)
JNI Clase Java-C++ en C
Librería Dinámica JNI System.loadLibrary()
expone
se replica
creacompila
depende
Desarrollos con JNI (Eclipse SDK)
Desarrollos con JNI (JOGL)
Desarrollos con JNI (gvSIG [3D - Raster - Proj])
Desarrollo Multiplataforma
Buenas Prácticas
• Control de Versiones.
• Tests Unitarios.
• Sistema de Construcción.
• Release early, Release often.
• Gestión Online del Proyecto.
• Análisis, Diseño y Documentación.
Maven
• Gestión de Dependencias.
• Compilación y Distribución.
• Tests Unitarios.
• Gestión de Versiones.
• Integración con Servidores de Construcción Continua.
• Proyectos de Eclipse y NetBeans.
CMake• Gestión de Proyectos Nativos.
• Generador de Proyectos (CMake).• Makefile, Visual Studio, Xcode, etc.
• Búsqueda de dependencias.
• Tests Unitarios (CTest).
• Integración con Servidor de Construcción Continua (CDash).
• Empaquetado de Proyectos (CPack).
Sistemas de Información Geográfica
SIG
Un Sistema de Información Geográfica (SIG o GIS, en su acrónimo inglés) es una integración organizada de hardware, software, datos geográficos y personal, diseñado para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada con el fin de resolver problemas complejos de planificación y gestión. También puede definirse como un modelo de una parte de la realidad referido a un sistema de coordenadas terrestre y construido para satisfacer unas necesidades concretas de información.
Raster
Vectorial
Base
de
Dat
os G
eogr
áfica
OrtoFotos
Elevaciones
Líneas
Puntos
Polígonos
Info
rmac
ión
Terr
itoria
l
OSG Virtual Planets
OSG Virtual Planets
• Librerías: core, viewer, planets, features, manipulator.
• Aplicaciones: appGeoviewer (swing), geoviewer-rcp, editor-rcp, examples.
• Plugins de eclipse: viewer-plugin, geoviewer-plugin, editor-plugin, layer(s)-plugin(s)
osgVP: Arquitectura
core
planets
features
manipulator
viewer
OpenSceneGraph
osgVP: Core
Node
OSGObject
Referenced
Group
AutoTransform
LOD
...
Vec3
Vec2
Matrix
Vec4
Quat
osgDB
Optimizer
osgVP: Viewer
• Creación de Contextos de Render en Java• Basado en JOGL
• GLCanvas y GLJPanel.• Utilidades para control de la escena.
osgVP: Planets
Planet
TPLod
TPLod
...
TerrainTile
Tile Geometry Technique
Group
TPLod TPLod TPLod
PlanetLayers
TileLayers
RequestLayerEvent
osgVP: Features
osgVP: Manipulator
osgVP - GIS
Raster
Vectorial
Base
de
Dat
os G
eogr
áfica
OrtoFotos
Elevaciones
Líneas
Puntos
Polígonos
Info
rmac
ión
Terr
itoria
l osgvp-core
osgvp-planets
osgvp-features
osgvp-manipulator
osgvp-viewer
Aplicaciones osgVP• gvSIG 3D.
• OSGEditor-RCP.
• GeoViewer3D.
Referencias
• Sun Microsystems• http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html
• http://java.sun.com/j2se/1.3/docs/guide/jni/spec/jniTOC.doc.html
• OpenSceneGraph• http://www.openscenegraph.org
• OSGVirtualPlanets• http://jira.ai2.upv.es/confluence/display/JVP/HOME
Referencias
• Apache Maven• http://maven.apache.org/
• CMake• http://www.cmake.org/
Carga y Visualización de Objetos 3D mediante JNI y OpenSceneGraph
Rafael GaitánSegundos Encuentros de Programadores Java
10 Abril 2008Universitat Jaume I
• Preparación del Entorno de Trabajo
• Ejemplo-JNI
• Ejercicios Prácticos
Contenidos
Entorno de Trabajo• Descomprimir encuentrosjava-taller-jni.tar.gz
• Abrir Eclipse y seleccionar como Workspace el directorio recién creado.
• Añadir external-tools:
• mvn eclipse:add-maven-repo
• mvn eclipse:eclipse
• mvn install
• Reiniciar Eclipse
Ejemplo JNI
package es.uji.jornadas; public class App { static { System.loadLibrary("jni-example"); }
public native void helloWord();
public static void main( String[] args ) { App app=new App(); app.helloWord(); } }
Librería Dinamica Clase C++
Clase Java (native)
JNI Clase Java-C++ en
C
Librería Dinámica JNI
System.loadLibrary()
expone
se replica
creacompila
depende
Ejemplo JNI
• Generar Cabecera JNI• javah es.uji.jornadas.App
• Hacer uso de external-tools para ejecutar.
Librería Dinamica Clase C++
Clase Java (native)
JNI Clase Java-C++ en
C
Librería Dinámica JNI
System.loadLibrary()
expone
se replica
creacompila
depende
Ejemplo JNI
• Compilar Librería Dinámica JNI
• mvn install
• Ejecutar Ejemplo.
Librería Dinamica Clase C++
Clase Java (native)
JNI Clase Java-C++ en
C
Librería Dinámica JNI
System.loadLibrary()
expone
se replica
creacompila
depende
PATH=${workspace_loc}\binaries\win32
Ejercicios Prácticos
• Ampliación Ejercicio 1.
• JNI de la función para cargas de escenas 3D (osgDB).
• JNI del Viewer de escenas 3D (osgViewer).
Ejercicio 3