java - 在 Java 3D 中拾取形状

标签 java graphics 3d java-3d

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

  1. 使用当前 Canvas 和根 BranchGroup 构造一个 PickCanvas
  2. PickCanvas 的模式设置为 PickCanvas.GEOMETRY,根据文档,这更准确[ 疑问:各种拾取模式之间有什么区别,即 BOUNDS,几何,GEOMETRY_INTERSECT_INFO ?从文档中我不清楚。几何采摘的真正含义是什么? ]
  3. 设置我想要挑选的对象的能力。 [ 疑问:这两种设置能力的方式有什么区别? - node.setCapability(Node.ENABLE_PICK_REPORTING)PickTool.setCapabilities(node, PickTool.INTERSECT_FULL) ? ]
  4. 在 Canvas 上添加一个mouseListener
  5. mousePressed 方法中,我需要识别点击了什么对象,然后采取适当的行动。[ 疑问:这是我最困惑的部分.如果能详细回答我如何识别已单击的对象,那将非常有帮助。]

此外,PickShapes 到底是什么,它们将如何影响拾取算法?

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

更新:澄清一下,通过拖放功能,我的意思是我想使用通常的鼠标左键按下、拖动和鼠标释放手势将圆柱体从 Canvas 上的一个位置平移到另一个位置.

最佳答案

要平移(和旋转)形状,请使用 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);
}

关于java - 在 Java 3D 中拾取形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669365/

相关文章:

java - 如何在同一台Mac上处理多个版本的JDK

Java:ImageIcon 与图像差异

java - 从对 verify() 的调用中获取 InvalidUseOfMatchersException,即使所有参数的类型都是 'Matchers'

java - 点不对齐

opengl - 对数深度缓冲区

java - Facebook 'code' 参数作为 OAuth 身份验证查询字符串的一部分

javascript - 使用 Javascript、WebGL 和 HTML 绘制正方形

java - 如何将多边形旋转给定角度

matlab - 从灰度图像的 2D 切片集创建 3D 体积

javascript - CSS矩阵乘法