3D-Grafik Erstellen vieler gleicher Würfel

  • Themenstarter Themenstarter Dragor
  • Beginndatum Beginndatum
D

Dragor

Gast
Hallo!

Ich hab eine Frage zu folgendem Programm, welches viele, gleich aussehender würfel erstellt, nur mit jeweils einer anderen Position.
Bis ca 10.000 Würfel können noch darzustellen werden, jedoch sollen bis zu ca 42.000 möglich sein, bei zu vielen bekomme ich die Meldung "java.lang.OutOfMemoryError: Java heap space"

Code:
	public BranchGroup createSceneGraph() {
		BranchGroup objRoot = new BranchGroup(); //die zurückzugebende Branch
		

		Appearance app = new Appearance();
		// code für textur anfang
		PolygonAttributes polyAttrib = new PolygonAttributes();

		TextureLoader lader = new TextureLoader("test.png", this);
		Texture2D texturerde = (Texture2D)lader.getTexture();
		polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_FILL);
		app.setPolygonAttributes(polyAttrib);
		app.setTexture(texturerde);
		//code für textur ende
		Transform3D transform = new Transform3D();
		Vector3f vector = new Vector3f();
		int z = 0;
		for (Circle ci : b.levels) {
			for (Square s : ci.sq) {
	                	//in Square s sind die informatinen für die Position
				Box box = new Box(size/2, size/2, size/2,Box.GENERATE_TEXTURE_COORDS,app);
	                    TransformGroup tg = new TransformGroup();
	                    vector.set((float) ((s.x-b.getRadius())*size), (float)(s.y-b.getRadius())*size,(float)(z-b.getRadius())*size); //berechnung für die position des Würfels
	                  
	                    transform.setTranslation(vector);
	                    tg.setTransform(transform);
	                    tg.addChild(box);
	                    objRoot.addChild(tg);
	                }
			z++;
	            }
		 
		objRoot.compile();
		return objRoot;
	}

Komisch ist, wenn ich Box durch ColorCube ersetzte schafft das Prog es einfach alles zu berechnung, scheinbar verbraucht Box viel mehr memory...
Gibt es ne Möglichkeit den Code zu verbessern?
Wie gesagt, alles Würfel sind gleich, also gleiche größe, rotation, textur etc, nur die position ist jeweils eine andere

Vielen dank für eure hilfe😉
 
Ich hatte da noch dunkel was im Hinterkopf, und nochmal nachgeschaut in der Doku zu "Box":
By default all primitives with the same parameters share their geometry (e.g., you can have 50 shperes in your scene, but the geometry is stored only once).
Das wird beim ColorCube wohl auch gemacht (vermutlich). Deswegen weiß ich nicht, wo der gravierende Unterschied sein sollte. Könnten es NUR die Texturkoordinaten sein? Evtl. mal ohne "GENERATE_TEXTURE_COORDS" testen...
 
Mal unabhängig von der Frage, ob und warum eine Box mehr zu brauchen scheint als ein ColorCube (das könnte ich ggf. nächste Woche mal genauer ansehen) : 40000 ist eigentlich nicht so viel. Wäre ein start mit
java -Xmx1000m DasProgramm
um mehr Speicher bereitzustellen nicht vielleicht eine Option?
 
Das Problem ist, dass das ganze am ende als Applet laufen soll
Und ja, ich find auch, es ist komisch, dass eine box scheinbar soviel speicher verbrauchen soll...
 
Man kann einem Applet AFAIK auch den Xmx-Parameter übergeben. Auf Applet Deployment steht was mit
Code:
<APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">
    <PARAM name="java_arguments" value="-Xmx512m">
</APPLET>
 

Zurück
Oben