在JavaFx中定位3d框

时间:2016-02-08 14:54:00

标签: java javafx javafx-8 javafx-3d

我是JavaFx 3d建模的初学者。我正在尝试在一个房间里创建一个3d模型的盒子。我有每个盒子前左下角的盒子和坐标的尺寸。我试图用setTranslateX()设置coords,但结果不正确。这是我的代码的一部分,我尝试设置coords:

for (int i = 0; i < Main.load.size(); i++) {
        Load l=Main.load.get(i);
        Box sphere = new Box(l.getLength()*10, l.getWidth()*10, l.getHeight()*10);
        sphere.setTranslateX(l.getX()*10);
        sphere.setTranslateY(l.getY()*10);
        sphere.setTranslateZ(l.getZ()*10);
        PhongMaterial m = new PhongMaterial();
        m.setDiffuseColor(new Color(Math.random(),Math.random(),Math.random(),1));
        m.setSpecularColor(Color.BLACK);
        sphere.setMaterial(m);
        root.getChildren().add(sphere);
    }

我希望有人可以帮助我。

以下是一个例子:

大小: 蓝色(30,50,50) 粉红色(10,10,20)

位置: 蓝色(0,0,0) 粉红色(30,0,0)

And this is what I get

1 个答案:

答案 0 :(得分:0)

当你像Box一样翻译JavaFX 3D对象时,你需要沿着任意轴计算对象宽度的一半。 Box的默认位置是以原点为中心,意味着Box对象的中心位于0,0,0。你的宽度是30 * 10,但你的translateX转换为0 * 10 = 0。因此,蓝色框的最右边将是X = 150(300 / 2.0 = 150)。你的Pink Box的translateX为10 * 30 = 300。粉红色框的中心将被翻译为300,这意味着最左边的边缘将是300 - (宽度/2.0)= 300 - (50)= 250。