[Gvsig_desarrolladores] OSGVP: Usar un jpg como suelo de un
planeta
Maria Arias de Reyna
marias en emergya.es
Vie Ene 23 14:27:26 CET 2009
El Viernes 23 Enero 2009 11:41, Rafa Gaitan escribió:
> 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);
He intentado hacer lo que me has dicho, pero no consigo verlo. He creado una
clase mundo que extiende a planeta y que llama a las funciones que me has
indicado. Pero aunque me pinta la proyección y me deja moverla y girarla, en
ningún momento llama a la función de requestTextureLayer(...).
public class Mundo extends Planet {
public Mundo() throws NodeException {
super("Mi Mundo",
Planet.CoordinateSystemType.PROJECTED, "WKT", "EPSG:23030",
1, 1, 2, 2, 1.0, 1.0);
addTextureLayer(getExtent());
setEnabledSubdivision(false);
}
}
Y luego llamo creo el mundo y lo pinto con la clase ejemplo:
public class Ejemplo implements RequestLayerListener{
private static IViewerContainer canvas3d;
private static PlanetViewer planetViewer;
private static Mundo earth;
public void ejecutar()
{
JPanel jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
JFrame jFrame = new JFrame();
jFrame.setContentPane(jContentPane);
jFrame.setSize(800, 600);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/**
* Create a planet viewer
*/
try {
planetViewer = new PlanetViewer();
} catch (NodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* Define the viewer type and add to the canvas
*/
canvas3d = ViewerFactory.getInstance().createViewer(
ViewerFactory.VIEWER_TYPE.CANVAS_VIEWER, planetViewer);
jContentPane.add((Component)canvas3d, BorderLayout.CENTER);
ViewerFactory.getInstance().startAnimator();
/**
* Add a planet to the scene data
*/
try {
earth = new Mundo();
} catch (NodeException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
try {
planetViewer.addPlanet(earth);
} catch (NodeException e2) {
e2.printStackTrace();
}
earth.setRequestLayerListener(this);
/**
* Put the camera in the scene
*/
double difx = earth.getExtent().getWidth() / 2.0d;
double dify = earth.getExtent().getHeight() / 2.0d;
double posx = earth.getExtent().getX() + difx;
double posy = earth.getExtent().getY() + dify;
double height = Math.sqrt(difx * difx + dify * dify) * 4.0f;
Camera cam = planetViewer.getCamera();
cam.setViewByLookAt((float) posx, (float) posy, (float) height,
(float) posx, (float) posy, 0f, 0f, 1f, 0f);
planetViewer.setCamera(cam);
/**
* Customizing the manipulator
*/
CustomTerrainManipulator manip = (CustomTerrainManipulator) planetViewer
.getCameraManipulator();
manip.addAzimButtonMask(MouseButtonMaskType.LEFT_MOUSE_BUTTON, 'a');
manip.addRollButtonMask(MouseButtonMaskType.MIDDLE_MOUSE_BUTTON, 'b');
manip.addZoomButtonMask(MouseButtonMaskType.MIDDLE_MOUSE_BUTTON, 'c');
manip.setMinCameraDistance(earth.getRadiusEquatorial() + 10);
manip.setMaxCameraDistance(earth.getRadiusEquatorial() + 1000);
manip.setEnabledNorthOrientation(true);
jFrame.setVisible(true);
jFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ViewerFactory.getInstance().stopAnimator();
canvas3d.dispose();
}
});
}
public void requestElevationLayer(Planet arg0, RequestLayerEvent arg1) {
// TODO Auto-generated method stub
}
public void requestTextureLayer(Planet arg0, RequestLayerEvent arg1){
earth.setTexture(arg1.getTerrainNode(), "/earth.gif", 0);
}
}
--
María Arias de Reyna Domínguez
Emergya Consultoría
Más información sobre la lista de distribución gvSIG_desarrolladores