在Java3D中将较小的盒子加载到较大的盒子中

在Java3D中将较小的盒子加载到较大的盒子中,java,java-3d,Java,Java 3d,所以我很难把小盒子放进大盒子(容器)。我试着从一个盒子里得到一个顶点的坐标,然后把另一个放在那个位置。以下是我尝试的代码: Shape3D backShape = ((Box) buildShape(x, y, z)).getShape(Box.RIGHT); GeometryArray geo=(GeometryArray)backShape.getGeometry(); float[] position=new float[3]; geo.getCoordinat

所以我很难把小盒子放进大盒子(容器)。我试着从一个盒子里得到一个顶点的坐标,然后把另一个放在那个位置。以下是我尝试的代码:

 Shape3D backShape = ((Box) buildShape(x, y, z)).getShape(Box.RIGHT);

    GeometryArray geo=(GeometryArray)backShape.getGeometry();
    float[] position=new float[3];
    geo.getCoordinate(0, position);
    System.out.println(position[0]+" "+position[1]+" "+position[2]);
    Vector3f pp = new Vector3f (position[0],position[1], position[2]);

    Color3f c1=new Color3f(0.7f, .15f, .15f);
    Color3f c2=new Color3f(0.7f, .15f, .15f);
    Color3f[] c=(Color3f[]) new Color3f[20] ; 

        c[0] =new Color3f(Color.getHSBColor(20.f, 30f, 2.f));
        c[1] =new Color3f(Color.BLUE);
        c[2] =new Color3f(Color.YELLOW);
        c[3] =new Color3f(Color.GREEN);
        c[4] =new Color3f(Color.WHITE);
        c[5] =new Color3f(Color.CYAN);
        c[6] =new Color3f(Color.LIGHT_GRAY);
        c[7] =new Color3f(Color.PINK);
        c[8] =new Color3f(Color.RED);
        c[9] =new Color3f(Color.DARK_GRAY);
        c[10] =new Color3f(Color.MAGENTA);
        c[11] =new Color3f(Color.getHSBColor(0.2f, 0.15f, 2.f));
        c[11] =new Color3f(Color.getHSBColor(0.8f, 0.1f, 15.f));
        c[13] =new Color3f(Color.ORANGE);
        c[11] =new Color3f(Color.getHSBColor(1.f, 0.8f, 2.f));

    for (int i=0; i<boxes.size(); i++) {

            Transform3D transform = new Transform3D();
            transform.setTranslation(pp);
            Box ProductBox = addProductBox(boxes.get(i).dimension.get("length"),boxes.get(i).dimension.get("breadth")
                    ,boxes.get(i).dimension.get("height"),c1, c2,c[i],c[i]);

            Transform3D rotateCube = new Transform3D();
            rotateCube.set(new AxisAngle4d(1.0, 1.0, 0.0, Math.PI / 4.0));
            TransformGroup rotationGroup = new TransformGroup(rotateCube);
            TransformGroup TranslateGroup = new TransformGroup(transform);
            TranslateGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
            rotationGroup.addChild(ProductBox);
            TranslateGroup.addChild(rotationGroup);
            nodeRoot.addChild(TranslateGroup);
            Shape3D shape = ProductBox.getShape(Box.FRONT);
          GeometryArray g=(GeometryArray)shape.getGeometry();
            position[0]-= boxes.get(i).dimension.get("length")+0.15f;
           System.out.println(position[0]+" "+position[1]+" "+position[2]);

           Vector3f pp2 = new Vector3f (position[0],position[1],position[2]);
           pp=pp2;
           c[i]=c[i+1];
    }
Shape3D backShape=((Box)buildShape(x,y,z)).getShape(Box.RIGHT);
GeometryArray geo=(GeometryArray)backShape.getGeometry();
浮动[]位置=新浮动[3];
地理坐标(0,位置);
System.out.println(位置[0]+“”+位置[1]+“”+位置[2]);
向量3f pp=新向量3f(位置[0],位置[1],位置[2]);
Color3f c1=新的Color3f(0.7f、.15f、.15f);
Color3f c2=新的Color3f(0.7f、.15f、.15f);
Color3f[]c=(Color3f[])新Color3f[20];
c[0]=新的颜色3f(Color.getHSBColor(20.f,30f,2.f));
c[1]=新颜色3F(颜色为蓝色);
c[2]=新颜色3F(颜色为黄色);
c[3]=新颜色3f(颜色为绿色);
c[4]=新颜色3F(颜色为白色);
c[5]=新颜色3F(颜色为青色);
c[6]=新颜色3f(颜色为浅灰色);
c[7]=新颜色3F(颜色为粉红色);
c[8]=新颜色3F(颜色为红色);
c[9]=新颜色3F(颜色为深灰色);
c[10]=新颜色3f(颜色为洋红色);
c[11]=新颜色3f(Color.getHSBColor(0.2f,0.15f,2.f));
c[11]=新颜色3f(Color.getHSBColor(0.8f,0.1f,15.f));
c[13]=新颜色3f(颜色为橙色);
c[11]=新颜色3f(Color.getHSBColor(1.f,0.8f,2.f));

对于(int i=0;i我有一个简单的程序。假设你有一个3D形状:

GeometryArray ge=(GeometryArray)shape.getGeometry();
double[] cc1=new double[3];
ge.getCoordinate(0, cc1);
System.out.println(cc1[0]+" "+cc1[1]+" "+cc1[2]);
ge.getCoordinate(1, cc1);
System.out.println(cc1[0]+" "+cc1[1]+" "+cc1[2]);

这样我就可以得到形状的坐标。你必须很好地定位到3D空间才能理解。你必须通过定位你的物体(一开始只有一个)来进行实验.

非常感谢!因此,它对第一个框起作用,但当我试图在第一个框旁边放置第二个框时,它没有起作用。我编辑了我的问题,我尝试使用每次放置的框的长度。它起作用,但框不在同一条线上。我附加了一个新图像,可能与旋转等有关(暂时删除转换,然后再试)-只需打开一个新问题,因为这超过了当前问题-您可能希望添加旧代码以供参考