Question

I'm basically trying to create a shape via Java3D and only one cube appears on the screen. I want to put the cubes in a line or a column, but I just can't figure out what I'm doing wrong. Obviously this is only part of the code, only the method to create cubes.

private void createCubes() {

                Cuboid box = new Cuboid(0.03f, 0.03f, 0.03f, cubeAppearance);
                Cuboid box2 = new Cuboid(0.03f, 0.03f, 0.03f, cubeAppearance);
                Cuboid box3 = new Cuboid(0.03f, 0.03f, 0.03f, cubeAppearance);
                Cuboid box4 = new Cuboid(0.03f, 0.03f, 0.03f, cubeAppearance);


                Vector3f vector = new Vector3f(0f, .3f, 0f);




                TransformGroup tg = new TransformGroup();
                Transform3D transform = new Transform3D();
                transform.setTranslation(vector);

                tg.addChild(box);
                tg.setTransform(transform);
                tg.addChild(box2);
                tg.setTransform(transform);
                tg.addChild(box3);
                tg.setTransform(transform);
                tg.addChild(box4);
                tg.setTransform(transform);






                rootGroup.addChild(tg);
Was it helpful?

Solution

Why do you think your code should put the cubes in a row/column? They all have the same coordinates, sizes, transforms and belong to the same transform group... You have to create a new transform and transform group for each box you want placed separately.

Something like this should do the trick for 4 boxes:

TransformGroup getNewBox(float hpos) {
  Cuboid box = new Cuboid(0.03f, 0.03f, 0.03f, cubeAppearance);
  TransformGroup tg = new TransformGroup();
  Transform3D transform = new Transform3D();
  Vector3f vector = new Vector3f(0f, hposf, 0f);
  transform.setTranslation(vector);
  tg.addChild(box);
  tg.setTransform(transform);
  return tg;
}

{
  rootGroup.addChild(getNewBox(0f);
  rootGroup.addChild(getNewBox(0.3f);
  rootGroup.addChild(getNewBox(0.6f);
  rootGroup.addChild(getNewBox(0.9f);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top