[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00503] Re: about Behavior
◆◆ あなたのお金を増やす方法がインターネットでスグ手に入る! ◆◆
リクルートのISIZE[イサイズ]がお届けするあなただけの
マル得会員サービス(無料)MY ISIZE MONEY[マイ・イサイズ・マネー]
“金融ビッグバン”で大きな変化が起きていますが、変化の大きい時こそ
チャンスです。それには、新鮮な情報が大切です。MY ISIZE MONEYには、
貯蓄や投資に関する様々な知識や日本初の投資信託の価額登録サービス
も。あなたも会員登録し、ビッグバンを乗り切る“切り札”を手に入れて
ください。http://www.isize.com/money/invitation/invitation09.html
-----------------------------------------------------------------------
>> このときはSceneGraphにはaddChild()せずに、独立してコーディングしました。
>
>この部分について、もう少し具体的に説明して頂けないでしょうか。
>addChild()しないでTransformGroupをどのようにSceneGraphに関連づける
>のでしょうか。
TransformGroup はシーン・グラフにaddChild()します。
マウス処理はBehaviorとしてaddChild()したのではなく、
MousListenerをCanvas3DにaddMouseListenerして書きました。
2ボタンマウスの左プレスでズームイン、右プレスでズームアウトを実現するために、
どちらのボタンがプレスされたかを管理するフラグを持たせました。
Threadはプログラム実行開始から終了までずっとrun()し放しで、
run()のループの中でズーム処理を呼び出します。
ズーム処理ではフラグを見てズームイン、ズームアウトを処理します。
今見たらこんなコードを書いていました。
private void processZoom(int mousestatus) {
//System.out.println( "mousemode=" + mousemode +
// ", mousestatus=" + mousestatus);//DEBUG
Transform3D currXform = new Transform3D();
Transform3D transformX = new Transform3D();
zscale.getTransform(currXform);
Vector3d translation = new Vector3d();
if (mousestatus == IProcessUpdate.MOUSE_LEFT_PRESSED) {
translation.z = zoomfactor;
} else if (mousestatus == IProcessUpdate.MOUSE_RIGHT_PRESSED) {
translation.z = -zoomfactor;
}
transformX.set(translation);
currXform.mul(transformX, currXform);
zscale.setTransform(currXform);
}
この中のzscaleというのは、
シーン・グラフ中ですべての物体のrootになるTransformGroupです。
クラスの最初でpackageスコープで宣言されていました。
TransformGroup zscale = null;
初期化は createScneneGraph() の中で行われています。
private BranchGroup createSceneGraph() {
objRoot = new BranchGroup();
zscale = new TransformGroup();
// 以下略
マウスプレス、リリース時にフラグをセット/リセットしている部分は省略します。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル FAX 03-5362-9008