Hi, ich habe ein Problem,
ich habe eine library gedownloaded, und kann sie ganz einfach verwenden.
Diese Library kann 3ds obj und viele mehr in die Java3D Welt einbauen.
Nun zu meinem Problem:
Ich will ein Model einmal laden, und dann dieses model 5 mal nebeneinander in die 3D-Welt einbauen, es geht um ein StarWars Trooper Model, sie sollen wie im Krieg nebeneinander stehen.
Doch das Problem :
Der Heap Space meldet sich schon nach 2 nebeneinander gestellten Troopern.
Ich habe mir mal überlegt wie ich das am besten machen könnte:
Doch wenn ich das so mache, dann wird mir folgendes gemeldet:
Was im Klartext heißt:
Dass Scene, schon mal geadded wurde, und deshalb nicht noch einmal verwendet werden kann, das heißt ich müsste in die Schleife dieses Laden einbauen, damit Scene jedes ma was neues ist, doch das würde den Heap Space überlasten, ganz klar.
Also was soll ich machen?
Kann mir jemand helfen?
ich habe eine library gedownloaded, und kann sie ganz einfach verwenden.
Diese Library kann 3ds obj und viele mehr in die Java3D Welt einbauen.
Nun zu meinem Problem:
Ich will ein Model einmal laden, und dann dieses model 5 mal nebeneinander in die 3D-Welt einbauen, es geht um ein StarWars Trooper Model, sie sollen wie im Krieg nebeneinander stehen.
Doch das Problem :
Der Heap Space meldet sich schon nach 2 nebeneinander gestellten Troopern.
Ich habe mir mal überlegt wie ich das am besten machen könnte:
Java:
public void loadData(TransformGroup branchgroup)
{
try
{
ModelLoader modelloader = new ModelLoader();
Scene scene1 = modelloader.load(importfile);
BranchGroup[] branchgroup1 = new BranchGroup[10];
BoundingBox[] boundingbox = new BoundingBox[10];
Point3d[] point3d = new Point3d[10];
Transform3D[] transform3d = new Transform3D[10];
TransformGroup[] transformgroup = new TransformGroup[10];
if(scene1 != null)
{
int i = 0;
while(i<branchgroup1.length)
{
branchgroup1[i] = scene1.getSceneGroup();
boundingbox[i] = new BoundingBox(branchgroup1[i].getBounds());
point3d[i] = new Point3d();
boundingbox[i].getLower(point3d[i]);
Point3d point3d1 = new Point3d();
boundingbox[i].getUpper(point3d1);
double d = 0.0D;
if(((Tuple3d) (point3d1)).x - ((Tuple3d) (point3d[i])).x > d)
d = ((Tuple3d) (point3d1)).x - ((Tuple3d) (point3d[i])).x;
if(((Tuple3d) (point3d1)).y - ((Tuple3d) (point3d[i])).y > d)
d = ((Tuple3d) (point3d1)).y - ((Tuple3d) (point3d[i])).y;
if(((Tuple3d) (point3d1)).x - ((Tuple3d) (point3d[i])).x > d)
d = ((Tuple3d) (point3d1)).z - ((Tuple3d) (point3d[i])).z;
double d1 = 10D / d;
if(d1 < 0.00050000000000000001D)
d1 = 0.00050000000000000001D;
transform3d[i] = new Transform3D();
transform3d[i].rotX(-1.5707963267948966D);
transform3d[i].setTranslation(new Vector3d(i*3.0D, -1D, -2D));
transform3d[i].setScale(new Vector3d(d1, d1, d1));
transformgroup[i] = new TransformGroup(transform3d[i]);
transformgroup[i].addChild(branchgroup1[i]);
branchgroup.addChild(transformgroup[i]);
System.out.println(i);
i++;
}
}
else
{
System.out.println("File load error. There was something wrong with the file: " + importfile);
}
}
catch(IOException ioexception)
{
System.err.println("Could not find object file: " + importfile);
}
}
Java:
0
Exception in thread "main" javax.media.j3d.MultipleParentException: Group.addChild: child already has a parent
at javax.media.j3d.GroupRetained.checkValidChild(GroupRetained.java:452)
at javax.media.j3d.GroupRetained.addChild(GroupRetained.java:461)
at javax.media.j3d.Group.addChild(Group.java:271)
at Test.Test_Class.loadData(Test_Class.java:107)
at Test.Test_Class.addTroup(Test_Class.java:58)
at Test.Test_Class.createSceneGraph(Test_Class.java:41)
at Test.Test_Class.<init>(Test_Class.java:129)
at Test.Test_Class.main(Test_Class.java:145)
Was im Klartext heißt:
Dass Scene, schon mal geadded wurde, und deshalb nicht noch einmal verwendet werden kann, das heißt ich müsste in die Schleife dieses Laden einbauen, damit Scene jedes ma was neues ist, doch das würde den Heap Space überlasten, ganz klar.
Also was soll ich machen?
Kann mir jemand helfen?