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

[Java3Djp:00374] トピックスから Java3D FAQ (1999.2.19)



■■■■■■■■■■■■人間関係を円滑に!!■■■■■■■■■■
■私と友人・私と恋人・上司と部下・教師と生徒・親と子・自分探し■
■  各種講座・カウンセリング・カウンセラー養成・企業研修  ■
■月間相談数600件 カウンセラー30名在籍 15年の実績  ■
■   TMA 東京メンタルヘルスアカデミー 東京・千葉・大阪■
■■■■■■■■■http://www.nayami.com/tma/■■■■■■■■■■

遠藤です。
今日のお昼に安藤さんのページを見たら、もう Java3D FAQ があってびっくりしました。

>皆さんのコメントを反映させた draft version 000.002 を web に置いときました。
>これを叩き台にしてください。
>
>http://tech.webcity.ne.jp/~andoh/java/3d/j3faq.html

了解です。トピックスから抽出した FAQ です。

●トピックスから Java3D FAQ (1999.2.19) yasuyuki@xxxxxxxxxx

[Q] どのプラットホームが Java 3D をサポートしますか?

  現時点 (1999年2月現在) では、
  Solaris (SPARC)、
  Win32 (Windows 95/98, Intel CPU の NT 4.0)
  だけです。

    [Java3Djp:00035]
    [Java3Djp:00038]
    [Java3Djp:00040]
    [Java3Djp:00043]
    [Java3Djp:00050]
    [Java3Djp:00054]
    [Java3Djp:00075]

[Q] Java 3D を JDK1.1.X ベースで動かす方法はありますか?

  Java 3D 1.1 正式版からは Java 2 (JDK 1.2) でのみ動作します。

  ちなみに、
  JDK 1.1 ベースで 3DCG プログラミングをする手段としては、
  OpenGL-Java binding があります。
  また、シーン・グラフベースのものとしては、
  OpenGL Optimizer Java binding、OpenInventor-Java があります。

    [Java3Djp:00142]
    [Java3Djp:00143]

[Q] VRMLローダーの入手方法は?

   下記から VRML Loader/Player をダウンロード出来ます。
   ソースコードも公開されています。
    
    http://www.vrml.org/WorkingGroups/vrml-java3d/

    [Java3Djp:00101]
    [Java3Djp:00102]

[Q] HelloUniverseの立方体を別のプリミティブに代えるには?

    objTrans.addChild(new ColorCube(0.4));
    この new ColorCube(0.4) を、別のプリミティブに変更してください。
     (例えば new com.sun.j3d.utils.geometry.Sphare() など) 
    
   [Java3Djp:00106]

[Q] 光源を設定したのに照明されないのですが?

    物体に法線ベクトルが設定してあっても、
    光源に照明の作用範囲が指定されていないと照明されません。
    作用範囲オブジェクトである javax.media.j3d.Bounds
     (実際にはそのサブクラス)を生成し、
    javax.media.j3d.Light#setInfluencingBouns() メソッドで
    作用範囲を指定してください。

    [Java3Djp:00112]
    [Java3Djp:00120]

[Q] マウス処理のBehaviorをBranchGraphにaddChild()したのにマウス操作できません?

   光源と同様に、javax.j3d.Behavior (及びそのサブクラス) も
   作用範囲の設定が無いと動作しません。
   作用範囲オブジェクト  javax.media.j3d.Bounds (実際にはそのサブクラス)
   を生成し、setSchedulingBounds() メソッドで作用範囲を指定してください。

    [Java3Djp:00121]
    [Java3Djp:00139]

[Q] シーングラフに動的にNodeを付け加えると
    javax.media.j3d.RestrictedAccessExceptionが発生しますが?
    
    BranchGroup ではなく、TransformGroup に動的に Node を addChild() する場合、
    いったん Node を removeChild() してから addChild() してください。
    また、compiled モードの場合は動的に追加/削除できないので、
    retained モードで行ってください。

    [Java3Djp:00134]
    [Java3Djp:00146]
  

[Q] addMouseListener()してもマウスイベントが通知されません?

    java.applet.Applet を extend している場合、
    コンテナである Applet のサブクラスに addMouseListener() しても
    マウスイベントは通知されません。
    Canvas3D に addMouseListener() してください。

    [Java3Djp:00149]
    [Java3Djp:00152]

[Q] スケーリングとはどのようなことをするのですか?

    「スケール」= 「縮尺(縮小率・拡大率)」と考えれば解りやすいでしょう。
     1.0 の時は実物大。0.5 の時は半分の大きさ、2.0 の時は倍の大きさです。

     スケーリングは TransformGroup に対して適用しますが、
     回転や移動を適用したい TransformGroup とは別にした方が良いでしょう。
     
       (T) 回転や移動を適用したい TransformGroup
         |
       (T) スケーリングを適用したい TransformGroup
         |
       (S) Shape3D など

    [Java3Djp:00191]
    [Java3Djp:00192]
  

[Q] Canvas3Dのpaint()メソッドのオーバーライド方法は?

    (Canvas3D のバックバッファの取得方法がわからないので保留...)

    [Java3Djp:00215]
    [Java3Djp:00221]

[Q] TransformGroupから任意のNodeを remove したいのですが?

    Groupから継承するクラスなどの中で、
    以下のようなメソッドを定義して利用してみてください。

    public boolean remove(Node node) {
        for (int n=0; n<numChildren(); n++) {
            if (getChild(n) == node) {
                removeChild(n);
                return true;
            }
        }
        return false;
    }

    [Java3Djp:00150]
    [Java3Djp:00154]

[Q] Behaviorを継承したクラスを書いたがイベントが1回しか通知されません?

    proccessStimulus() の最後で wakeupOn() を呼んでください。

    [Java3Djp:00209]

[Q] BehaviorとMouseListenerはどのように使い分ければ良いでしょうか?

    物体の Rotate や Translate、Zoom などはこれ専用の Behavior があるので
    Behavior を使うのが楽です。
    Picking などの場合は MouseListener を使った方が楽です。

    [Java3Djp:00216]

[Q] Quat4fをset後値が変なのですが?

    これはバグのようです。

    [Java3Djp:00212]
    [Java3Djp:00213]
    [Java3Djp:00220]

[Q] 法線を計算したいのですが

     com.sun.j3d.utils.geometry.NormalGenerator というクラスがあります。
     まず com.sun.j3d.utils.geometry.GeometryInfo に
     頂点座標の Point3d などの配列、頂点インデックスの int 配列をセットしておき、
     NormalGenerator の public void generateNormals(GeometryInfo geom) で
     法線を計算できます。

     例:
       GeometryInfo ginfo =
         new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY);
       ginfo.setCoordinates(verts);         // verts は Point3d の配列(頂点データ)
       ginfo.setCoordinateIndices(indices); // indices は int の配列 (頂点index)
       NormalGenerator ngen = new NormalGenerator();
       ngen.generateNormals(ginfo); 
       Shape3D shape =
         new Shape3D(ginfo.getIndexedGeometryArray());

    [Java3Djp:00006]

[Q] SimpleUniverseで表示できる範囲は?

    原点 (x=0.0、y=0.0、z=0.0) を中心とした ±1.0 の範囲のようです。
    また、ニアークリップ面 (視点にもっとも近いクリップ面) は 0.1、
    ファークリップ面 (視点からもっとも遠いクリップ面) は 10.0 です。
    これより近くても遠くても、物体は描画されません。

    [Java3Djp:00100]

[Q] pickingをするには?

    com.sun.j3d.behaviors.picking.PickObject クラスを使用します。
    詳しくは下記を参考にしてください。

    [Java3Djp:00139]
    [Java3Djp:00147]
    [Java3Djp:00155]
    [Java3Djp:00211]
    [Java3Djp:00218]

    pick されたオブジェクトを特定するには、
    javax.media.j3d.SceneGraphObject#setUserData()/getUserData() メソッドで
    独自のデータを付加/取得すると良いでしょう。

[Q] com.sun.j3d.utils.behavior.mouse パッケージと
    com.sun.j3d.utils.behavior.pickingパッケージはどう違うのか?

    com.sun.j3d.utils.behavior.mouse パッケージの Behavior は、
    適用対象の TransformGroup をはじめに設定しておきますが、
    com.sun.j3d.utils.behavior.pickingパッケージの Behavior は
    マウスプレス時のマウス座標にいちばん近い TransformGroup を pick し、
    その pick した TransformGroup に対して操作を適用しているようです。

    [Java3Djp:00203]

[Q] VRMLに書き込むクラスはありますか?

    CyberVRML97 があります。ソースコードも公開されています。
    
    http://www.cyber.koganei.tokyo.jp/vrml/cv97/cv97java/index.html 

    [Java3Djp:00119]
    [Java3Djp:00148]

[Q] Java3Dでマウスを使って線を引く方法は?

    [Java3Djp:00152]

[Q] SwingでJava3Dは使えるのか?

    Java3D の Canvas3D は Light-weight コンポーネントではないため、
    描画がおかしくなる場合があります。
    現時点では AWT を使うのが無難です。
    Sun (JavaSoft) は Java3D と Swing をうまく共存させるよう努力中のようです。
    考えられる方法としては、
    (1) Java3D の改良。オフスクリーン・レンダリングなどを使い、
         Light-weight コンポーネントの中でも Java3D が描画出来るようにする。
    (2) Swing の改良。Swing の中で Java3D のような Heavy-weight コンポーネントを
        うまく描画出来るようにする。
    の2通りの方法を考えているようです。(1)は描画のパフォーマンスが悪いかも知れません。
    
    [Java3Djp:00196]
    [Java3Djp:00201]
    [Java3Djp:00204]

>## [Q] 書籍『Java 3D API仕様』を読むと眠くなるのですがどうしたら良いでしょうか?
>## .... というのは追加していません :-)

# その記事は「Java3D にせ FAQ」ですかから...^^;
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11    新宿スパイアビル   FAX 03-5362-9008