このブログを検索

2011年2月3日木曜日

Java3d での動的な物体の追加と削除 ~その2~

はい。
アクセス解析を見ていると、この記事に引っかかってくる人がやたら多いので
前回の記事をわかりやすくしてみました。
(前回のやつわかりにくいよねー)


はい。
何をするかっていうと
プログラム内でたとえばスイッチを押したときとか、
何か条件が起きた時にオブジェクトを追加表示、削除を行いたいということです。

ということでおさらい。

重要なことは2つ
追加される側のBranchGroupでは
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
を行うこと。
追加する側では(削除したいならば)
branchG0.setCapability(BranchGroup.ALLOW_DETACH);
と記述します。

そして追加する際は追加するBranchGroupに対し
branch.addChild(branchG0);
とする。(追加できるのはBranchGroupのみだった気がします)

削除する際にはすでに追加したBranchGroup(グローバル化するなどしてとっておく)に対し
branchG0.detach();
とする。

とそんだけなんです。


ということで珍しくサンプルソース。
AddTest.java

このソースでは元のBranchGroupと、追加するBranchGroupを
branchとbranchArに保存しておき
Threadで適当に追加削除を繰り替えすプログラム。

チェックする点は元のBranchGroup作成時と
追加するBranchGroup作成時。
createSceneGraph()
getObject()
に注目である。