# Java3d setTextureTransform verändert J3DGraphics2D



## JavaPhil (24. Dez 2009)

Hallo,

ich habe per override postRender des Canvas3d ein paar 2d objecte gezeichnet.. wenn ich nun im 3d Teil ein object mit einer Textur überziehe und dazu per setTextureTransform die Textur coordinaten verändere werden auch die 2d objecte im Canvas3d verändert ???:L

Woran liegt das? was kann ich dagegen tun?

Danke,
Philipp


----------



## JavaPhil (30. Dez 2009)

Keiner eine Idee???


----------



## OliverKroll (30. Dez 2009)

Schick doch mal das Programm dazu, aus der Ferne ist das sonst schwer ...


----------



## JavaPhil (2. Jan 2010)

.. nur die interesannten Teile


```
... = new Canvas3D(SimpleUniverse.getPreferredConfiguration()){

			@Override
			public void postRender() {
				super.postRender();
				
				J3DGraphics2D g = getGraphics2D();

				//etwas zeichnen....
				
				g.flush (true);

			}
		};
```

Und es wird ein Object, zb dieses:

```
public class Sun extends BranchGroup{

	Canvas3D canvas3D;
	String nameFile;
	float sizeSun;
	float scaleTexture;
	
	public Sun(Canvas3D canvas3D, String nameFile){
		setDefault(canvas3D, nameFile);
		createSun();
	}
	
	public Sun(Canvas3D canvas3D, String nameFile, float sizeSun, float scaleTexture){
		setDefault(canvas3D, nameFile);
		this.sizeSun = sizeSun;
		this.scaleTexture = scaleTexture;
		createSun();
	}
	
	private void setDefault(Canvas3D canvas3D, String nameFile){
		this.sizeSun = 1.0f;
		this.scaleTexture = 1.0f;
		this.canvas3D = canvas3D;
		this.nameFile = nameFile;	
	}
		
	private Appearance createTexture(){
		TextureLoader tex = new TextureLoader(this.getClass().getResource(nameFile),canvas3D);
		Texture2D tex2d = (Texture2D) tex.getTexture();
		Appearance app = new Appearance();
		
		app.setTexture(tex2d);
		
		TextureAttributes texAtt = new TextureAttributes();
		Transform3D trans = new Transform3D();
		trans.set(scaleTexture);
		texAtt.setTextureTransform(trans);
		
		app.setTextureAttributes(texAtt);
				
		return app;
	}
	
	private void createSun(){
		BranchGroup bg = new BranchGroup();
		
		Sphere objSun = new Sphere(sizeSun, Sphere.GENERATE_TEXTURE_COORDS, 120, createTexture());
	     
		bg.addChild(objSun);
		this.addChild(bg);
		
	}

	public Canvas3D getCanvas3D() {
		return canvas3D;
	}

	public void setCanvas3D(Canvas3D canvas3d) {
		canvas3D = canvas3d;
	}

	public String getNameFile() {
		return nameFile;
	}

	public void setNameFile(String nameFile) {
		this.nameFile = nameFile;
	}

	public float getSizeSun() {
		return sizeSun;
	}

	public void setSizeSun(float sizeSun) {
		this.sizeSun = sizeSun;
	}
}
```

in die scene gehangen... 

wenn scaleTexture  etwas anderes als 1.0f ist (was im Grunde sinnfrei ist) wird auch das J3DGraphics2D gescaled. ???:L


----------



## Marco13 (2. Jan 2010)

Du kannst ja die Transform von dem Graphics per Hand setzen (und am Ende wieder die setzen, die ursprünglich beim Aufruf der Methode gesetzt war - so wie unter Graphics2D (Java 2 Platform SE v1.4.2) beschrieben)


----------

