在Java 3D中挑选形状

时间:2012-12-02 12:41:48

标签: java graphics 3d java-3d

我需要为我在Java3D应用程序中创建的某些形状(比如圆柱体)添加拖放功能。我想我知道基本步骤(虽然含糊不清):

  1. 使用当前 Canvas 和根 BranchGroup 构建 PickCanvas
  2. PickCanvas 的模式设置为PickCanvas.GEOMETRY,根据文档更准确[怀疑:各种拾取模式之间有什么区别,即BOUNDS, GEOMETRY,GEOMETRY_INTERSECT_INFO?从文献中我不清楚。几何采摘究竟意味着什么? ]
  3. 设置我要选择的对象的功能。 [怀疑:这两种设置功能的方法有什么区别? - node.setCapability(Node.ENABLE_PICK_REPORTING)PickTool.setCapabilities(node, PickTool.INTERSECT_FULL)? ]
  4. mouseListener 添加到画布。
  5. mousePressed 方法中,我需要确定点击的对象,然后采取适当的措施。[怀疑:这是我最困惑的部分。如果能够详细解答如何识别被点击的对象,将会非常有用。]
  6. 此外, PickShapes究竟是什么以及它们将如何影响拣货算法?

    如果我提出非常基本的问题,我真的很抱歉,但我花了一整天时间阅读文档并成为初学者,这些对我来说还不够。我很难抓紧时间,我希望Stackoverflow社区能够慷慨地用耐心向我解释我的怀疑。非常感谢!

    更新:只是为了澄清,通过拖放功能,我的意思是我想使用通常的鼠标左键,拖动和鼠标释放手势将圆柱体从画布上的一个位置转换为其他位置

1 个答案:

答案 0 :(得分:0)

要翻译(和旋转)形状,请使用MouseBehavior类。例如,使用以下内容,使用鼠标左键旋转并向右平移。

public Test()
{
    SimpleUniverse universe = new SimpleUniverse();
    BranchGroup group = new BranchGroup();

    TransformGroup rootTransformGroup = new TransformGroup();
    group.addChild(rootTransformGroup);
    rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

    ColorCube colorCube = new ColorCube(.3);
    rootTransformGroup.addChild(colorCube);

    BoundingSphere boundingSphere = new BoundingSphere(new Point3d(0, 0, 0), 1000);

    MouseRotate mouseRotate = new MouseRotate();
    mouseRotate.setTransformGroup(rootTransformGroup);
    mouseRotate.setSchedulingBounds(boundingSphere);
    group.addChild(mouseRotate);

    MouseTranslate mouseTrans = new MouseTranslate();
    mouseTrans.setTransformGroup(rootTransformGroup);
    mouseTrans.setSchedulingBounds(boundingSphere);
    group.addChild(mouseTrans);

    universe.getViewingPlatform().setNominalViewingTransform();
    universe.addBranchGraph(group);
}