【问题标题】:Positioning of 3d boxes in JavaFx在 JavaFx 中定位 3d 框
【发布时间】:2016-02-08 14:53:59
【问题描述】:

我是 JavaFx 3d 建模的初学者。我正在尝试在房间中创建一个 3d 模型的盒子。我有盒子的尺寸和每个盒子左前下角的坐标。我尝试使用 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);
    }

我希望有人可以帮助我。

这是一个例子:

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

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

And this is what I get

【问题讨论】:

  • 您能描述一下您看到的效果吗?您使用的是什么版本的 Java?您是否通过构造函数将 3D 子场景的 depthBuffer 设置为 true?
  • @Birdasaur 我用一个例子更新了这个问题。我正在使用 Java 8。depthBuffer 是真的。感谢您的帮助!
  • 假设您使用的相机是 PerspectiveCamera,您的对象似乎被准确地平移到了它们应该在的位置。 PerspectiveCamera 在 3D 场景的中心使用 3D 原点 (0,0,0)。这是您想要的还是您的位置值期望“角”之一是原点?
  • @Birdasaur 这是真的,我正在使用 PerspecitveCamera。我想在一个相同的坐标系中插入这些框。粉红色的盒子应该附在蓝色盒子上。抱歉我的解释不好。
  • 当您对像 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 - (width/2.0) = 300 - (50) = 250。

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


【解决方案1】:

当您对像 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 - (width/2.0) = 300 - (50) = 250。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多