[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00410] viewer operation
◆格安メーリングリスト◆====================
『もう久しぶりなんて言わない』
『だってMLでいつも話してるから!』
<<初心者だってDNSなら安心サポート>>
===== http://www.dns-ml.co.jp/ml+.html =====
石川 正敏です。
先ほどもメールしたのですが、問題にしていたマウスによる視点操作の
実装ができました。あまりきれいなソースではないですが、一応、添付
します。
※下記のソースはオリジナルのソースから余計な部分と思うところを削除
しているので、コンパイルしても動かないかもしれません。
ただ、この方法の場合、特にViewerクラスやViewerAvatarクラスを
用いなくても実現できると思います(笑)。
実装法を簡単に書くと
1) MouseBehaviorCallbackクラスを implements する。
2) 各マウス操作の定義の時に mouserotate.setupCallback(this); を追加しる。
3)public void transformChanged( int type, Transform3D transform)に必要な
手続きを記入する。
こんな感じでしょうか?
-----------------------------
import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
public class View_Operation extends Applet implements MouseBehaviorCallback{
TransformGroup transformView = new TransformGroup(); //視点
public ViewerAvatar createAvatar(){
ViewerAvatar avatarRoot = new ViewerAvatar();
TransformGroup transform = new TransformGroup();
transform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
transform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
avatarRoot.addChild(transform);
MouseRotate behavior1=new MouseRotate();
behavior1.setTransformGroup(transform);
behavior1.setupCallback(this);
avatarRoot.addChild(behavior1);
MouseTranslate behavior2=new MouseTranslate();
behavior2.setTransformGroup(transform);
behavior2.setupCallback(this);
avatarRoot.addChild(behavior2);
MouseZoom behavior3=new MouseZoom();
behavior3.setTransformGroup(transform);
behavior3.setupCallback(this);
avatarRoot.addChild(behavior3);
BoundingSphere bounds=new BoundingSphere(
new Point3d(0.0,0.0,0.0),100.0);
behavior1.setSchedulingBounds(bounds);
behavior2.setSchedulingBounds(bounds);
behavior3.setSchedulingBounds(bounds);
Primitive primitive=new Sphere(0.5f);
transform.addChild(primitive);
avatarRoot.compile();
return avatarRoot;
}
public void transformChanged( int type, Transform3D transform ){
transformView.setTransform(transform);
}
public View_Operation() {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(null);
add("Center", c);
Viewer viewer =new Viewer(c);
ViewingPlatform vp = new ViewingPlatform();
SimpleUniverse u = new SimpleUniverse(vp,viewer);
transformView = u.getViewingPlatform().getViewPlatformTransform();
ViewerAvatar avatar = createAvatar(translation);
viewer.setAvatar(avatar);
}
public static void main(String[] args) {
new MainFrame(new View_Operation(), 256, 256);
}
}
-----------------------------
少々わかりずらいかもしれませんが、こんなところで...
では。
奈良先端科学技術大学院大学
情報科学研究科
石川 正敏
masato-i@xxxxxxxxxx