[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00149] Re: Java3Dインストール日記(WindowsNT)



★「在宅でできるお仕事をサイドビジネスにして、ゆとりある生活を送りたい」★
 インターネットに興味があり、やる気のある方ならどなたでも始められます。
 (20歳以上/学生不可)
 初心者でもスクール制度でホームページの作り方からビジネスのハウツーまで
 楽しみながら学べます。詳細ご希望の方は「詳細希望」と書いてメールでお申
 込み下さい。                         mail-to: yayoi1@xxxxxxxxxx 
===========================================================================

>>この mx、my ですが、例えば java.awt.event.MouseEvent で取得するマウスの x, y 座標という
>>理解でよろしいでしょうか。
>はい、OKです。Canvas3Dがくっついているフレームのマウス座標を渡してやって下さい。

ちょっと試してみたのですが、Java3D の 初期化処理(後述)をしてしまうと
マウスイベントが通知されないので悩んでいます。Behavior はまだ調べていないので
JDK 1.1 の Delegation-Listener モデルを使っているのですが、これが悪いのかも
知れません。

Java3D を使わないテスト

MouseEventTest.java
===========================
import java.awt.*;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;


public class MouseEventTest extends java.applet.Applet {


  public void init(){
    this.addMouseListener(new MouseEventAdapter());
  }
  public void paint( Graphics g ){

  }
  public void update( Graphics g ){
  }
  public void start(){
  }
  public void stop(){
  }
  
  public static void main(String[] args) {
    MouseEventTest me = new MouseEventTest();
    MainFrame frame = new MainFrame(me, 500, 500);
  }
}

class MouseEventAdapter implements MouseListener {
  public void mousePressed( MouseEvent e ){}
  public void mouseReleased( MouseEvent e ){}
  public void mouseEntered( MouseEvent e ){}
  public void mouseExited( MouseEvent e ){}
  public void mouseClicked( MouseEvent e ){
    System.out.println("x=" + e.getX() + ", y=" + e.getY());
  }
}

===========================

Java3D を使ったテスト


 MouseEventTest3D.java
===========================
import java.awt.*;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;


public class MouseEventTest3D extends java.applet.Applet {

  public void init(){
    initialize3D();
    this.addMouseListener(new MouseEventAdapter());
  }
  public void paint( Graphics g ){

  }
  public void update( Graphics g ){
  }
  public void start(){
  }
  public void stop(){
  }

    public BranchGroup createSceneGraph() {
	BranchGroup objRoot = new BranchGroup();

	TransformGroup objTrans = new TransformGroup();
        Transform3D t3d = new Transform3D();
        t3d.setScale(0.4);
        objTrans.setTransform(t3d);
	objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
	objRoot.addChild(objTrans);

	objTrans.addChild(new ColorCube(1.0));

	return objRoot;
    }

  private void initialize3D() {
    setLayout(new BorderLayout());

    GraphicsConfiguration config =
      SimpleUniverse.getPreferredConfiguration();

    Canvas3D canvas3d = new Canvas3D(config);
    add("Center", canvas3d);

    BranchGroup scene = createSceneGraph();

    SimpleUniverse u = new SimpleUniverse(canvas3d);

    u.getViewingPlatform().setNominalViewingTransform();

    u.addBranchGraph(scene);
  }

  public MouseEventTest3D() {
    //initialize3D();
  }

  public static void main(String[] args) {
    MouseEventTest3D me = new MouseEventTest3D();
    MainFrame frame = new MainFrame(me, 500, 500);
    me.init();
    me.start();
  }
}

class MouseEventAdapter implements MouseListener {
  public void mousePressed( MouseEvent e ){}
  public void mouseReleased( MouseEvent e ){}
  public void mouseEntered( MouseEvent e ){}
  public void mouseExited( MouseEvent e ){}
  public void mouseClicked( MouseEvent e ){
    System.out.println("x=" + e.getX() + ", y=" + e.getY());
  }
}
===========================
 

やはり SimpleUniverse は使わないで、自分で View 側のツリーを構築しないとだめでしょうか。
それと、Behavior を理解しないと...Java3D のピッキングはハードル高そうです。(_ _)
 
# Inventor が使えればもう仕事が終わっていたかも知れない...
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル8F    FAX 03-5362-9008