Transformgroups duplizieren

Atako

Mitglied
Guten Abend,

Ich stehe vor einem Problem und zwar habe ich vor genau 5 Tagen angefangen mich mit Java3D in Netbeans zu beschäftigen, um eine Projektarbeit zu bearbeiten.

Ich habe bereits mit einem Loader 3D Objekte von Maya in meine Szene geladen. Weiterhin habe ich ein Spot Light erzeugt, welches ich anschließend als Kind an meine Transformgroup (Da ist das Modell der Straßenlaterne drin) gehangen habe. Die Rotation und Translation Befehle funktionieren wunderbar, wenn ich das Ganze auf eine TG anwende.
Ich würde allerdings gerne, mehrere dieser TG erzeugen, bzw. eher mehrere meiner Straßenlaternen (3D Modell) mit gekoppeltem Spotlight.
Leider klappt das Ganze nicht wirklich. Ich hatte das ganze vorher schon mit einer Schleife gemacht, wo ich einzelne Spheres erzeugt habe, da hat es auf Anhieb funktioniert.
Geht das auch mit Transformgroups?
(
Java:
//
//             Array für Objekte
        String[] Objekte = new String [4];
        //
        // Array der Objekte befüllen
        //
         Objekte[0] = "C:\\Users\\Public\\Documents\\Austausch_GCG\\Objekt\\Flughafen.obj";                   //Flughafen
         Objekte[1] = "C:\\Users\\Public\\Documents\\Austausch_GCG\\Objekt\\Skydome.obj";                     //Skydome  
         Objekte[2] = "C:\\Users\\Public\\Documents\\Austausch_GCG\\Objekt\\StraßenBeleuchtung.obj";          //StraßenBeleuchtung
         Objekte[3] = "C:\\Users\\Public\\Documents\\Austausch_GCG\\Objekt\\Boden_mitTex.obj";                //Boden
        // Objekte[4] = "C:\\Users\\Iloumatic\\Desktop\\Models\\Flughafen.obj";
        // Objekte[5] = "C:\\Users\\Iloumatic\\Desktop\\Models\\Flughafen.obj";
       
       //
       // Lade OBJ+TG und packe in ein TG-Array und hänge
       //       die Elemnte an die Branchgroup bgRoot
       //
        TransformGroup[] tgArray = new TransformGroup [4];
   
            for ( int i=0; i < tgArray.length; i++){
            tgArray[i] = getObject(Objekte[i]);
            bgRoot.addChild(tgArray[i]);
          }
       
           
        /////////////////// Straßenlaternen implementieren //////////////////
        tgArray[2].addChild(set_spot_lights ());
        Transform3D laterne = new Transform3D();
        laterne.rotZ(180.0 * Math.PI / 180.0);                                  // Drehung, sodass Laterne auf Landebahn zeigt
        laterne.setTranslation(new Vector3f (45.8f,-80f,0));                       
        tgArray[2].setTransform(laterne);
       
        TransformGroup [] tgSpot = new TransformGroup[5];
        Transform3D [] tSpot = new Transform3D [5];  
        float dx_2 = 45.8f;                                                     /// -80 Start
        float dy_2 = -80f;
        float dz_2 = 0;
        float delta_y = 20f;
        for (int i=0; i < 5; i++){
            tgSpot [i] = tgArray[2];
            tSpot[i]  = new Transform3D();
            tSpot[i].set( new Vector3f ( dx_2, (dy_2 + (i*delta_y)), dz_2 ));
            tgSpot[i].setTransform(tSpot[i]);
           }

 public TransformGroup getObject (String objekt)
  {
   
    //int flags = ObjectFile.RESIZE;
    TransformGroup objTG = new TransformGroup();
   
    ObjectFile f = new ObjectFile();
    Scene s = null;
    try {
      s = f.load(objekt);
     
    } catch (FileNotFoundException e) {
      System.err.println(e);
      System.exit(1);
    } catch (ParsingErrorException e) {
      System.err.println(e);
      System.exit(1);
    } catch (IncorrectFormatException e) {
      System.err.println(e);
      System.exit(1);
    }
       
        objTG.addChild(s.getSceneGroup());
       
    return objTG;
  }

private TransformGroup set_spot_lights () {
       
        TransformGroup tgSpot = new TransformGroup();
       
        Color3f spotLightColor = new Color3f (ColorDefs.yellow);
        Vector3f spotLightDir = new Vector3f (0f, 0.0f, -1.0f);
        Point3f spotLightPos = new Point3f (-0.5f, 0, 6.2f);
        Point3f spotLightatt = new Point3f (0f, 0f, 0.1f);
        float spotLightSpreadAngle = 45;
        float spotLightConcentration = 0.5125f;
        boolean spotLightOn = true;
        final int spotLightMask = 8;
       
        SpotLight spotLight = new SpotLight(spotLightOn, spotLightColor, spotLightPos, spotLightatt, spotLightDir, spotLightSpreadAngle, spotLightConcentration);
        spotLight.setInfluencingBounds(bounds);
        tgSpot.addChild(spotLight);
        return tgSpot;
    }
)


Wäre lieb wenn mir jemand einen Tipp geben könnte, Danke :)
 
Zuletzt bearbeitet:

Atako

Mitglied
Hallo,

Mir würde es enorm weiter helfen wenn mir jemand sagt, wie ich bei dem Problem vorgehe.

Ich habe zwei Klassen. In klasse A ist eine transform Group implementiert.

Ich möchte nun in klasse B auf diese Transform Group zugreifen, bzw. mit dieser arbeiten, allerdings ist diese in b nicht bekannt.

Wie gehe ich vor ?
 

Robat

Top Contributor
Dann müsstet du wohl für die Transformgroup eine Getter Methode schreiben wenn ich dich richtig verstanden habe.
 

Atako

Mitglied
Hey,

ich habe in meiner Klasse A eine TransformGroup tgRoot, diese möchte ich in Klasse B an eine andere TG hängen.

In der Klasse A habe ich diese Getter Methode:

public TransformGroup gettgRoot()
{
return tgRoot;
}

In Klasse B weis ich allerdings nicht, wie ich dann die zuvor zurückgegebene TG aus A auslese.
 

Ähnliche Java Themen

Neue Themen


Oben