# TransoFormGroup



## Developer_X (15. Apr 2009)

Hi, ich bin am Programmieren einer Klasse die von TransformGroup erbt, die Klasse "TransoFormGroup"
es ging mir hierbei darum, eine Klasse zu schaffen, 
:
bei der TransformGroup muss man immer ein Transform3D angeben, oder so, und man kann höchsten 2 dinge machen, position und rotation einer achse, dies wollte ich in eine Klasse packen, ging aber nicht, der Node wird nicht richtig geadded, kann mir einer weiterhelfen?
Ihr sehts ja dann im Code:

```
import javax.media.j3d.Group;
import javax.media.j3d.Node;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Vector3f;

public class TransoFormGroup extends TransformGroup
{
	Node dd;
	TransformGroup A;
	public TransoFormGroup(Vector3f vct, float x, float y, float z)
	{
		Transform3D a = new Transform3D();
		a.setTranslation(vct);
		A = new TransformGroup();
		A.setTransform(a);
		
		Transform3D b = new Transform3D();
		b.rotX(Math.toRadians(x));
		TransformGroup B = new TransformGroup();
		B.setTransform(b);
		A.addChild(B);
		
		Transform3D c = new Transform3D();
		c.rotX(Math.toRadians(y));
		TransformGroup C = new TransformGroup();
		C.setTransform(c);
		B.addChild(C);
		
		Transform3D d = new Transform3D();
		d.rotX(Math.toRadians(z));
	//Wichtig hier ist TransformGroup D
                         TransformGroup D = new TransformGroup();
		D.setTransform(d);
		C.addChild(D);
		D.addChild(dd);
		
	
	}
	public Group getChild()
	{
		return A;
	}
	public Node addNode(Node d)
	{
		d = dd;
		return d;
	}

	
}
```
Wie ihr seht, um diese Klasse nutzten zu können müsst ihr:
-einen Vector3f angeben
- alle 3 rotations achsen
- dann nicht nur TransoFormGroup adden, sondern so

```
objRoot.addChild(new TransoFormGroup(new Vector3f(0,0,0),2,2,2).getChild());
```
So jetzt aber ist das Problem folgendes:
Der Node, der von TransoFormGroup geadded wird. soll der TransformGroup D zugeschrieben werden.
Aber dies geschieht nicht, kann mir einer bitte weiterhelfen?


----------



## Marco13 (15. Apr 2009)

Eine Aussage in der Form "Die Klasse ist überflüssig, weil die Multiplikation mehrerer Matrizen einer Hintereinanderausführung der durch die Matrizen beschriebenen Abbildungen entspricht" würdest du wohl nicht als Hilfe ansehen?


----------



## Developer_X (15. Apr 2009)

ein bisschen hab ich verstanden, aber mein Ziel ist nochmal folgendes:
Ganz kurz und einfach eine TransformGroup zu haben, die man ohne eine Transform3D
translantieren und rotieren lassen kann.

Verstanden? Was ich mein?


----------



## Marco13 (15. Apr 2009)

Vielleicht. Ungetestet.

```
// For http://www.java-forum.org/spiele-und-multimedia-programmierung/81803-transoformgroup.html

import javax.media.j3d.Group;
import javax.media.j3d.Node;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.*;

public class WierdTransformGroup extends TransformGroup
{
    private Matrix4f internalTransform = new Matrix4f();

    public WierdTransformGroup(Vector3f vct, float x, float y, float z)
    {
        set(vct, x, y, z);
    }

    public void set(Vector3f vct, float x, float y, float z)
    {
        internalTransform.setIdentity();
        internalTransform.setTranslation(vct);

        Matrix4f matrix = new Matrix4f();
        matrix.setIdentity();

        matrix.rotX((float)Math.toRadians(x));
        internalTransform.mul(matrix);

        matrix.rotY((float)Math.toRadians(y));
        internalTransform.mul(matrix);

        matrix.rotZ((float)Math.toRadians(z));
        internalTransform.mul(matrix);

        setTransform(new Transform3D(internalTransform));
    }
}
```
Falls das so funktioniert, kann man die _ganz normal_ verwenden, wie jede andere TransformGroup auch - sie hat aber zusätzlich noch diese fragwürdige Methode, mit der man ein paar Transformationen in einer festgelegten Reihenfolge setzen kann...


----------



## Developer_X (15. Apr 2009)

danke man, ich habs getestet, funktioniert, danke
aber eine Frage, du kennst dich anscheinend Damit aus.
War meins auch einiger Maßen lösbar gewesen, oder hatte das total falsche ansätzte?


----------



## Marco13 (15. Apr 2009)

Woher soll ich das wissen? :noe:  Ne, mal im Ernst: Was das mit diesem getChild und getNode da sollte, weiß ich halt nicht. Grundsätzlich könnte man das vielleicht(!) auch lösen, indem man drei Nodes hintereinanderhängt, und VERSUCHT, so zu tun, als wäre das nur einer. Dazu müßte man aber einige Methoden von TransformGroup überschreiben, und man könnte nicht sofort sagen, welche, und spätestens wenn man dann das Setzen irgendwelcher Capability-Bits an mehrere TransformGroups weiterreichen wollte, würde es richtig, richtig häßlich werden... :autsch:


----------



## Developer_X (15. Apr 2009)

ok danke dann


----------

