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?
(
)
Wäre lieb wenn mir jemand einen Tipp geben könnte, Danke
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: