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

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



==============[チキチキ!まんなび王国 関西風味]==============
 関西の新築マンション物件など多彩な情報満載の無料メールマガジン
  まだ購入予定のない人も今から知識と情報だけは集めとこうや!
    堅い内容やのになんやオモロイ! 毎週水曜日発行!
========登録は http://www.mansionnavi.com/mag.htmlまで==========

築山さん、こんにちわ (^ ^)


築山さん : [Java3Djp:00134]
>マウスでクリックしたオブジェクトを識別できる情報を得る方法、また
>その情報を使ってそのオブジェクトに対するアクションを命令する方法
>というのはどのように行えるのでしょうか?
>※大変あやふやな質問で申し訳ありません。

例えば、画面最前面にあるShape3Dを取得するには、以下のような感じの
コードになります。

    public Shape3D pickShape3D(int mx, int my) {
        PickObject  pickObject = PickObject(canvas3D, rootNode);;
        SceneGraphPath sgPath = pickObject.pickClosest(mx, my, PickObject.USE_BOUNDS);
        if (sgPath == null)
            return null;
        Shape3D shape3d = (Shape3D)mPickObject.pickNode(sgPath, PickObject.SHAPE3D, 1);
        return shape3d;
    }

    #この場合にはオブジェクト範囲で判定を行っているので、それなりに大雑把です。


築山さん : [Java3Djp:00138] 
>動的にNodeを加えるられるのは、BranchGroupだけのようです。

BranchGroupもそうですが、基本的にGroupクラスから派生しているものは動的にノードの
追加/削除が可能です。ただ、これらの処理を行う前に対象となるシーングラフの
BranchGroupを一旦Localeからはずす必要がありますので注意してください。

それと厳密に言えばシーングラフ階層のオブジェクトではありませんが、各オブジェクトの
メンバの変更もできますので、例えばShpae3DのGeometryを変更するようなことも、もちろん
動的に可能です。

#Final版でJava3Dもだいぶ堅牢になりましたが、もし変な例外が発生するようであれば
#念のため例外に関連しそうなスレッドを止めてから作業したほうが良いでしょうね。


>コンパイルはしていないのですが、コンパイルというのはどのような
>効果・用途があるのでしょうか?

シーングラフをコンパイルすると、シーングラフが最適化され最高速で動作するように
なります。ただコンパイルをしてしまうと、例えばノードの削除/追加ができなくなるなど
の制限が加わりますので、動的な用途にはあまり向かないでしょう。

#ただBranchGroupノードだけは切り替えて表示できますので、シーングラフ全体を切り
#替えるようなアプリケーションは利用すべきでしょうね。

----------------------------------------
Satoshi Konno (今野 賢)
skonno@xxxxxxxxxx
http://www.cyber.koganei.tokyo.jp