|
||||
| 前回、VRMLのみでのアニメーションを行いましたが、 VRMLだけでは、どうしても、ループ、もしくは1回のみの動きしかできないため、 ・止めた位置アニメーションを再開する ・多段スイッチを駆使したアニメーションは難しい 等が上げられます。 そこで今回はJavaもつかってみたいと思います。 今回はJavaの知識も必要になるので、ちょっと難しいですが見てみましょう。 |
||||
|
・機能の説明 |
||||
![]() |
これが、視点の最初の位置です | |||
![]() |
ボタンを押さない(白い状態)ときは、 近づいても何も反応しません (Javaで制御しています) |
|||
![]() |
ボタンを押した場合は、ボタンが赤くなり (Javaで制御しています) |
|||
![]() |
近づくと扉が開く(Javaで制御しています) | |||
| このような感じで、動きます。 そうしたら、一部Javaファイルを見てみましょう (変数設定等はソースを見てください) 動作的には凄く単純な構造で、2つのスイッチが反応したときのみ 動作するようにしてあります。 ただ、こんな単純なことですがVRMLだけでは出来ないのです |
||||
| //☆if分の中の意味は、VRMLから””で囲まれた // メッセージがわたされた場合以下の処理を // しろという意味です //タッチセンサーが反応した //(ボタンが押された)とき //ボタンを赤色に変更するようにVRMLの送信する if(e.getName().equals("touched") == true) { onOff = true; newColor.setValue(red); } //範囲指定エリアに視点が移動したとき else if(e.getName().equals("enterArea") == true) { // ボタンが押されているか? if(onOff == true){ //押されていた場合、ボタンを赤から //白にして扉を開くようにVRMLに送信する onOff = false; openDoor.setValue (((ConstSFTime)e.getValue()) .getValue()); newColor.setValue(white); sw = true; } } //エリア外に出たとき else if(e.getName().equals("exitArea") == true) { //ボタンが押されていた場合扉を閉じる if(sw == true){ closeDoor.setValue (((ConstSFTime)e.getValue()).getValue()); sw = false; } } |
基本的に、bool型の変数をJava内部で 駆使して、VRMLでは別々であった スイッチを連結させています。 スイッチを押して扉を開くだけの 処理はVRMLだけでも出来ますが、 スイッチが押されてから色が変わり そしてかつ、範囲指定の中に 視点が入ったら扉を開く もしくは、扉が開いていたときのみ 範囲外に移動したとき扉を閉める という処理は、JavaかJavaScript を使わないと、実現できません |
|||
では以下にソースとwrlファイルをおきますので、見てください。 今回ソースをlzhで起きましたのでやってみたい方は落としてください。 lzhファイルを解凍するとvrmlというフォルダが作られますが、 これはJavaからVRMLを制御するのに必要なものなので、ソースファイルと同じ ディレクトリにそのまま置いてjavaのコンパイルをしてください。 |
||||
| ソース1 | ソース2 | 表示 | 全ソースの 圧縮ファイル |
|
| VRML+Javaによる 簡易エレベータの ドアの実現 |
||||