Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

Re: Apply a Texture on a shape?

Hi Laurent,

Unfortunately there are no current DataRenderers that support
textures on Shapes. You might do this by constructing a Java3D
Geometry (i.e., a TriangleStripArray instead of a
VisADTriangleStripArray) with a texture and adding it directly
to the VisAD scene graph. To do this, use:

  DisplayRendererJ3D dr
    (DisplayRendererJ3D) display.getDisplayRenderer();
  TransformGroup trans = dr.getTrans();

Then add your Geometry(s) to a BranchGroup, and add it to
trans. Your Geometry(s) must be added to trans via a
BranchGroup, since trans is "live".

This is a bit tricky, since VisAD won't know about or manage
your Geometry(s). Being under trans they will rotate and zoom
with the rest of your Data depictions, but you will need to
manage scaling them according to the getRange() values from
your ScalarMaps to XAxis, YAxis and ZAxis.

Because VisAD won't know about your Geometry(s), it won't do
anything to animate them. One approach would be to put your
own TransformGroup between your BranchGroup and your Geometries,
and calls its setTransform() method to rotate your planets.

Good luck,
Bill

On Mon, 22 Aug 2005, Laurent BEIGBEDER wrote:

>
> Hi!
>
> I use VisAD to display some orbit stuff. I display planets with sphere
> shapes using:
>
>        VisADTriangleStripArray vitsa = new VisADTriangleStripArray();
>
>         Sphere sphere = new Sphere(1.0f,Sphere.GENERATE_NORMALS,30);
>         GeometryArray ga = (GeometryArray)sphere.getShape().getGeometry();
>
>         GeometryInfo gInf = new GeometryInfo(ga);
>
>         float[] fcoords = new float[gInf.getCoordinates().length*3];
>         for(int i=0;i<gInf.getCoordinates().length;i++){
>             fcoords[3*i] = gInf.getCoordinates()[i].x;
>             fcoords[3*i+1] = gInf.getCoordinates()[i].y;
>             fcoords[3*i+2] = gInf.getCoordinates()[i].z;
>         }
>         vitsa.coordinates=fcoords;
>
>         float[] fnormals = new float[gInf.getNormals().length*3];
>         for(int i=0;i<gInf.getNormals().length;i++){
>             fnormals[3*i] = gInf.getNormals()[i].x;
>             fnormals[3*i+1] = gInf.getNormals()[i].y;
>             fnormals[3*i+2] = gInf.getNormals()[i].z;
>         }
>
>         vitsa.vertexFormat=ga.getVertexFormat();
>         vitsa.normals=fnormals;
>         vitsa.stripVertexCounts=gInf.getStripCounts();
>         vitsa.vertexCount = vitsa.coordinates.length / 3;
>
>
> I would like to add texture to shapes but I can't find what renderer or
> shadow type I have to modify.
>
> Has somebody allready done that or know how to do it?
>
>
> I'm wondering also if there's a better way to set a shape rotating during
> animation.
> Currently, I use something like tupleType (x,y,z,color,shape) with shapes
> number = values number.
>
> A preview of actual rendering:(See attached file: rosetta_now.png)
>
> Thanks!
>
> Laurent BEIGBEDER
> GFI Informatique
> Toulouse - FRANCE
>
>


 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690