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 件のコメント:
コメントを投稿