このブログを検索

2010年11月1日月曜日

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

Java3dで物体を追加すると


 こういう構造になっていると思います。

物体の追加は、まぁいろんなところに書いてある通りです。

普通に追加したいのであれば、
branchG.addChild(new ColorCube(0.3));

とすればBranchGroupの下にColorCubeが追加されます。

座標変換が必要であれば、図のようにTransformGroupを挟めばよいですが略。

ただ、動的にとなるとひとつ加えます。

BranchGroupのほうに

branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

みたいに書きます。
オブジェクトの動的追加を許可しますよ的なね。
branchG作った直後に書けばいいです。

そうするとbranchGにならば動的にオブジェクトを追加できるようになります。


BranchGroup branchG = new BranchGroup();
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

んで動的処理のところに
branchG.addChild( Node );



で、意外とあんまり書かれてなかったので削除方法

同様に動的追加を許可します。branchG0.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

そんでもって削除はたぶんBranchGroup単位でしかできません。
(てかremoveChild()は動的に使えないの??わからない。)
ですので、上の図の構造だとBranchGroup以下の部分全部消えてしまいます。
てかできないかもしれない。やらなくていいし。

なので、消したい部分をまた別のBranchGroupにわけて、元のBranchGroupの下に置きます。

こんな感じ

すると、今までの部分は削除せずに
以下BranchGroup2に追加していく部分だけ、動的に削除することが可能となります。

何ができるかというと、
一度描画してあるCubeなどを、ボタン操作で消すことができたりします。
~注意~
まず許可が増えます。
増えるのは、親のBranchGroupのほうで

branchG.setCapability(BranchGroup.ALLOW_CHILDREN.WRITE);
branchG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

としておきます。
書き込みと、追加の許可?みたいな。

そして、BranchGroup2のほうでも

branchG2.setCapability(BranchGroup.ALLOW_CHILDREN_DETACH);

と、しましょう。

そして動的処理のところで

branchG2.detach();

とするとBranchGroup2以下の部分が削除されます。

ちなみにもっかい表示したかったら

branchG.addChild(branchG2);

ともう一回すればよいです。(当たり前ですよね)

0 件のコメント:

コメントを投稿