[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