Ja, die PN kam an.
Man müßte jetzt den VRML-Loader noch genauer ansehen und so, um rauszufinden, ob man sich z.B. drauf verlassen kann, dass die Einzelteile immer an TransformGroups hängen (das müßte nicht unbedingt so sein!). Aber auf Basis des aktuellen Standes hab' ich mal zwei kleine Änderungen eingefügt:
In der gotoLocation:
[code=Java]
System.out.println("Schluessel: " + key); // Polygonname aus c4d
System.out.println("Wert: " + val); // Adresswert javax.media....@3939j39
// XXX
if (val instanceof TransformGroup)
{
TransformGroup tg = (TransformGroup)val;
setFlags(tg);
}
[/code]
Alle TransformGroups werden veränderbar gemacht. Das könnte man ggf. einfacher oder eleganter machen, und nur auf bestimmte TGs anwenden, aber für den ersten Test reicht's wohl.
In der mouseCklicked wird dann eine Methode aufgerufen:
[code=Java]
PickResult pr=pickCanvas.pickClosest();
if (pr!=null) {
Node an=pr.getObject();
if(an.getUserData()!=null){
System.out.println("Aktuelles Objekt: "+an.getUserData());
if(an.getUserData().equals("Arm_L")){
System.out.println("Linken Arm getroffen");
// XXX
testMove("Arm_L");
}
}
}
}
private void testMove(String name)
{
Hashtable<?, ?> hashtable = scene.getNamedObjects();
Object value = hashtable.get(name);
if (value instanceof TransformGroup)
{
TransformGroup tg = (TransformGroup)value;
Matrix4f m = new Matrix4f();
m.setIdentity();
m.setTranslation(new Vector3f(0,0,-100));
Transform3D t = new Transform3D(m);
tg.setTransform(t);
}
else
{
System.out.println("No transform group");
}
}
[/code]
Auch da könnte man sich was eleganteres überlegen, aber so zur Demo wird dort der Linke (bzw. Rechte
) Arm ein Stück wegbewegt.
Das "eleganter" bezieht sich darauf, dass man vielleicht die "bewegbaren Dinge" schon früher raussuchen und speichern könnte - sich quasi ein eigenes "(Daten-)Modell" des Pinguins zu erstellen, oder schon sowas wie
[code=Java]
private TransformGroup leftArmTransform = ...
private void init()
{
...
leftArmTransform = holDirDenAusDerSzene("Arm_L");
...
}
public void salute()
{
startThreadThatRotates(leftArmTransform);
}
[/code]
damit man das nicht immer wieder aus der "Scene" rausholen muss. Aber ehrlich gesagt habe ich nicht so viel praktische Erfahrung mit "größeren" Java3D-Projekten und ihrer Strukturierung, speziell dem Scene-Interface und dem VRML-Loader und so, und ich weiß auch nicht, welche Funktionalitäten du dort noch einbauen willst...