[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:02031] 視点移動後の PickTranslateBehavior
------------------------- infoseek ML Sponsor --------------------------
┏━┳━┳━┳≪資格の大原 合格Web 税理士講座 ≫━┳━┳━┳━┳━┓
┃大┃原┃税┃理┃士┃講┃座┃!┃合┃格┃者┃の┃84┃%┃が┃受┃講┃
┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛
★パソコンさえあれば自宅で学べるのが合格Web!24時間いつでも何度でも受講
┗ http://www1.ibc.ne.jp/ad/ibc0088.html
------------------------------------------------------------------------
古川です。
視点をキーボードで移動させた後、
物体をPickTranslateBehaviorでマウス移動させたいと
思っています。
それぞれの実装はできたのですが、
以下の症状で悩んでいます。
サンプルプログラムを添付させていただきました。
視点を移動する前(赤色の面が見える位置)ならば、
物体上でマウスの右クリック+上下左右で物体を
上下左右に移動できるのですが、視点が移動し、
たとえば物体の裏側(サンプルプログラムでは
緑色の面が見える位置)に移動した後に物体を右クリックで移動させようと
すると、左右が逆に移動してしまいます。
さらに物体の左右(青、黄色の面が見える位置)で
移動させようとすると、Zoomしてしまいます。
PickTranslateBehavior はワールド座標を変更しているようですが、
視点から見た移動方向へ移動させる何かよい方法は
無いでしょうか?
------------- begin of Sample3D.java ----------
import javax.swing.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.behaviors.keyboard.*;
import javax.vecmath.*;
import com.sun.j3d.utils.picking.behaviors.*;
public class Sample3D extends JFrame {
public Sample3D() {
getContentPane().setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
getContentPane().add("Center", canvas);
BranchGroup scene = new BranchGroup();
SimpleUniverse universe = new SimpleUniverse(canvas);
//TransformGroup 初期化
TransformGroup tg = new TransformGroup();
tg.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
scene.addChild(tg);
ColorCube colorCube = new ColorCube(0.5d);
tg.addChild(colorCube);
// キーボードで視点移動
universe.getViewingPlatform().setNominalViewingTransform();
BoundingSphere bounds = new BoundingSphere(new Point3d(),
1000.0);
TransformGroup viewtrans =
universe.getViewingPlatform().getViewPlatformTransform();
KeyNavigatorBehavior keybehavior = new
KeyNavigatorBehavior(viewtrans);
keybehavior.setSchedulingBounds(bounds);
PlatformGeometry vp = new PlatformGeometry();
vp.addChild(keybehavior);
universe.getViewingPlatform().setPlatformGeometry(vp);
//マウスで物体移動
PickRotateBehavior rotate = new PickRotateBehavior(scene,
canvas, bounds);
PickTranslateBehavior translate = new
PickTranslateBehavior(scene, canvas, bounds);
PickZoomBehavior zoom = new PickZoomBehavior(scene, canvas,
bounds);
tg.addChild(rotate);
tg.addChild(translate);
tg.addChild(zoom);
universe.addBranchGraph(scene);
}
public static void main(String[] args) {
Sample3D sample = new Sample3D();
/* サイズ指定 */
sample.setBounds( 10, 10, 240, 240);
/* 終了処理を追加 */
sample.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent
e){System.exit(0);}
});
/* 実際に表示する */
sample.setVisible(true);
}
}
----
古川
------------------------------------------------------------------------
★今なら登録するだけで現金50万円が当たる!?
http://research.infoseek.co.jp/research/index.phtml/mail?svx=971122