JavaFx中三维盒子的定位

JavaFx中三维盒子的定位,java,javafx,javafx-8,javafx-3d,Java,Javafx,Javafx 8,Javafx 3d,我是JavaFX3D建模的初学者。我正在尝试创建房间中盒子的三维模型。我有盒子的尺寸和每个盒子左前下角的坐标。我尝试使用setTranslateX()设置坐标,但结果不正确。下面是我试图设置坐标的代码图片: 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

我是JavaFX3D建模的初学者。我正在尝试创建房间中盒子的三维模型。我有盒子的尺寸和每个盒子左前下角的坐标。我尝试使用setTranslateX()设置坐标,但结果不正确。下面是我试图设置坐标的代码图片:

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);
    }
for(int i=0;i
我希望有人能帮助我

以下是一个例子:

尺寸: 蓝色(30,50,50) 粉红色(10,10,20)

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


当您对JavaFX 3D对象(如长方体)进行平移时,需要考虑对象沿任意轴的一半宽度。长方体的默认放置将以原点为中心,这意味着长方体对象的中心位于0,0,0。宽度为30*10,但translateX转换为0*10=0。因此,蓝色框的最右边将是X=150(300/2.0=150)。您的粉色框的translateX为10*30=300。粉红色框的中心将被平移到300,这意味着最左边的边将位于300-(宽度/2.0)=300-(50)=250。

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

您能描述一下您看到的效果吗?您使用的是什么版本的Java?你是否通过构造函数将3D子场景的depthBuffer设置为true?@Birdasaur我用一个例子更新了这个问题。我正在使用Java8。depthBuffer为true。谢谢你的帮助!看起来,假设您使用的相机是透视相机,您的对象将被精确地平移到它们应该位于的位置。透视摄影机在3D场景的中心使用3D原点(0,0,0)。这就是你想要的还是你的位置值期望其中一个“角”作为原点?@Birdasaur没错,我使用的是PerspecitveCamera。我想在同一个坐标系中插入这些框。粉红色的盒子应该附在蓝色的盒子上。对不起,我的解释不好。当你翻译一个JavaFX3D对象(比如一个盒子)时,你需要考虑对象沿任意轴的一半宽度。长方体的默认放置将以原点为中心,这意味着长方体对象的中心位于0,0,0。宽度为30*10,但translateX转换为0*10=0。因此,蓝色框的最右边将是X=150(300/2.0=150)。您的粉色框的translateX为10*30=300。粉红色框的中心将被转换为300,这意味着最左边的边缘将为300-(宽度/2.0)=300-(50)=250。您能描述一下您看到的效果吗?您使用的是什么版本的Java?你是否通过构造函数将3D子场景的depthBuffer设置为true?@Birdasaur我用一个例子更新了这个问题。我正在使用Java8。depthBuffer为true。谢谢你的帮助!看起来,假设您使用的相机是透视相机,您的对象将被精确地平移到它们应该位于的位置。透视摄影机在3D场景的中心使用3D原点(0,0,0)。这就是你想要的还是你的位置值期望其中一个“角”作为原点?@Birdasaur没错,我使用的是PerspecitveCamera。我想在同一个坐标系中插入这些框。粉红色的盒子应该附在蓝色的盒子上。对不起,我的解释不好。当你翻译一个JavaFX3D对象(比如一个盒子)时,你需要考虑对象沿任意轴的一半宽度。长方体的默认放置将以原点为中心,这意味着长方体对象的中心位于0,0,0。宽度为30*10,但translateX转换为0*10=0。因此,蓝色框的最右边将是X=150(300/2.0=150)。您的粉色框的translateX为10*30=300。粉红色框的中心将转换为300,这意味着最左边的边将位于300-(宽度/2.0)=300-(50)=250处。