如何在Java3D中重置鼠标旋转?

时间:2011-12-24 06:05:27

标签: java-3d

我正在编写Java Applet唱Java3D,并希望在单击按钮时重置鼠标在MouseRotate行为中的旋转。相关代码如下:

BoundingSphere bound =
            new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);    

        MouseRotate mouseRotate = new MouseRotate();
                    TransformGroup modelGroup = new TransformGroup();
                    mouseRotate.setTransformGroup(modelGroup);  
                    modelGroup.addChild(mouseRotate);
                    mouseRotate.setSchedulingBounds(bound);

3 个答案:

答案 0 :(得分:2)

有效。非常感谢!然而,在实施您提出的方法时,我意外地发现了一个更简单的方法。代码来自下面。 这个方法似乎适用于我的目的,也不需要父TransformGrop。方法很明显,我以为我以前尝试过。也许我确实试过这个但是由于其他原因它没有用。干杯,哈桑

TransformGroup modelGroup = new TransformGroup();
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

JButton resetButton = new JButton();
resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
    modelGroup.setTransform( new Transform3D());
}
});

答案 1 :(得分:0)

尝试一下:调用mouseRotate.setTransformGroup(modelGroup);,然后调用mouseRotate.initialize();。未经测试!

答案 2 :(得分:0)

抱歉,我的错误。似乎没有办法重置MouseRotate而不重写它。

第二次尝试:将另一个TransformGroup作为modelGroup的父级添加到场景图中,并在重置被拒绝时将其变换设置为modelGroup的反转变换。

TransformGroup modelGroupReset = new TransformGroup();
TransformGroup modelGroup = new TransformGroup();
modelGroupReset.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
modelGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
modelGroupReset.addChild(modelGroup);

JButton resetButton = new JButton();
resetButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Transform3D t3d = new Transform3D();
        modelGroup.getTransform(t3d);
        t3d.invert();
        modelGroupReset.setTransform(t3d);
    }
});