[Gvsig_desarrolladores] OSGVP: Usar un jpg como suelo de un planeta

Rafa Gaitan rafa.gaitan en gmail.com
Vie Ene 23 11:41:02 CET 2009


Hola Maria,

¿Intentas poner una textura que ocupe todo el planet projectado?

Bueno si imaginas el planeta como "una vista de gvsig", primero tienes que
añadirle una capa al planeta y luego registrar un RequestLayerListener y
llamar a setTexture del planeta.

para añadir una capa que ocupe todo el planeta:
   planet.addTextureLayer(planet.getExtent());

Luego registras al planet las peticiones de textura:
   planet.setRequestLayerListener(this);

y en "this" implementas RequestLayerListener y en el método
requestTextureLayer(...) pones el siguiente código:*
   public* *void* requestTextureLayer(Planet planet, RequestLayerEvent evt){
      planet.setTexture(evt.getTerrainNode(), texturePath, 0);
   }


Con eso podrías cargar una textura pero has de tener en cuenta que los
planetas están pensados para ser con múltiples niveles de detalle y en esa
petición se te pasa el planeta y en RequesLayerEvent el Tile o trozo de
extensión correspondiente al nivel de detalle. OSGVP no hace el recorte
deberías hacerlo tú en ese método.

En gvsig, ese método hace uso del acceso a datos que tiene gvsig y se
descarga/recorta/rasteriza la textura y se cachea en disco.

Por otro lado si lo que quieres es NO subdividir y poner una única textura,
añadiendo esto cuando creas el planeta es suficiente:

    planet.setEnabledSubdivision(false);

desactivas la subdivisión.

Como algo que te puede servir para depurar, en los ejemplos pulsando la
tecla W, se pone en modo wireframe, con lo que puedes ver que ocurre con un
planeta que se subdivide o no.
para ello añade lo siguiente al canvas 3d:

    _canvas3d.addKeyListener(*new*ViewerStateListener(_canvas3d.getOSGViewer()));

También está el ejemplo de Not Paged LOD Example, que hace algo parecido a
lo que tu quieres.

Espero haberte ayudado,
Rafa.






2009/1/23 Maria Arias de Reyna <marias en emergya.es>

> El Jueves 22 Enero 2009 13:24, Maria Arias de Reyna escribió:
> > Sigo experimentando con OSG Virtual Planet y estoy buscando la forma de
> > poner un jpg como el suelo de un planeta. Estoy usando un planeta con un
> > sistema de coordenadas proyectadas
> (Planet.CoordinateSystemType.PROJECTED).
> > ¿Sería posible hacerlo? El jpg estaría georreferenciado, por supuesto.
>
>
> Bueno, no fui capaz de añadir una textura al planeta, pero como está
> proyectado y por tanto es plano, poniendo un poligono con la imagen justo
> encima se hace el apaño. Cogiendo de base el ejemplo de la vaca en el polo
> norte y mezclandolo con el de los polígonos con la imagen de la tierra:
>
>
>
>                Rectangle2D extent = earth.getExtent();
>                double xmin = extent.getMinX();
>                double xmax = extent.getMaxX();
>                double ymin = extent.getMinY();
>                double ymax = extent.getMaxY();
>
>                Group g = new Group();
>                Vec4 color = new Vec4(1.0, 1.0, 1.0, 1.0);
>                AutoTransform at;
>                try {
>                        at = new AutoTransform();
>
>                TessellablePolygon _rect1 = new TessellablePolygon();
>                _rect1.addVertex(new Vec3(xmax, ymax, 0.01), color);
>                _rect1.addVertex(new Vec3(xmax, ymin, 0.01), color);
>                _rect1.addVertex(new Vec3(xmin, ymin, 0.01), color);
>                _rect1.addVertex(new Vec3(xmin, ymax, 0.01), color);
>                _rect1
>
>  .setNormalBinding(GeometryFeature.AttributeBinding.BIND_PER_VERTEX);
>
>                        File texture =
> Util.extractFromURL(Main.class.getResource(
>                                        "/earth.gif");
>                        _rect1.setTexture(texture.getPath());
>
>                _rect1.setEnabledBlending(true);
>                Material m = new Material();
>
>                        m.setColorMode(Material.ColorMode.SPECULAR);
>                        m.setSpecular(Material.Face.FRONT_AND_BACK, new
> Vec4(0.0, 1, 0.0,
>                                        1.0));
>                        m.setTransparency(Material.Face.FRONT_AND_BACK,
> 0.8f);
>
>
>                        _rect1.getOrCreateStateSet().setMaterial(m,
> Node.Mode.ON);
>                        at.addChild(_rect1);
>
>
>                        g.addChild(at);
>
> --
> María Arias de Reyna Domínguez
> Emergya Consultoría
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>



-- 
Rafael Gaitán Linares
Instituto de Automática e Informática Industrial  http://www.ai2.upv.es
Ciudad Politécnica de la Innovación
Universidad Politécnica de Valencia
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20090123/31b2cea3/attachment.htm


Más información sobre la lista de distribución gvSIG_desarrolladores