タッチセンサーを組み込む(ボタンを押している間だけ動作する)


【例1】移動の例(クリックされた物体自体がクリックしている間だけ動く)
【例2】移動の例(クリックしたのとは別の物体が、クリックしている間だけ動く)
【例3】回転の例(クリックしたのとは別の物体が、クリックしている間だけ回転する)
【例4】2つの物体が動く例



【例1】移動の例(クリックされた物体自体がクリックしている間だけ動く) 球をクリックすると、クリックしている間だけ球が動く
#VRML V2.0 utf8    #クリック&移動アニメーション
#赤い球をクリックすると、クリックしている間だけ移動する

#球にTouchSensorを付加する
DEF KYUU Transform{
  translation 5 2 0
  children[ 
    Shape{
      appearance Appearance{
        material Material{
          diffuseColor 0.0 1.0 0.0
        }
      }
      geometry Sphere{
        radius 1.0
      }
    }
    DEF TS TouchSensor{ }
  ]
}

#TimeSensorの定義
DEF TIMER TimeSensor{   #TimeSensorノード
  enabled FALSE
  cycleInterval 2.0     #1周期の時間の設定
  loop TRUE             #繰り返しの設定
}

#移動に関するアニメーションの定義
DEF PI PositionInterpolator{   #移動するアニメーションの設定
  key[
    0.0 0.5 1.0    #動作を起こす時間ポイント(0.0から1.0の間で指定)
  ]
  keyValue[        #値の変化を設定
     5.0 2.0 0.0,
   -5.0 2.0 0.0
    5.0 2.0 0.0,
  ]
}


#ROUTE文の定義
ROUTE TS.isActive TO TIMER.set_enabled
ROUTE TIMER.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO KYUU.set_translation



実行例


【例2】移動の例(クリックしたのとは別の物体が、クリックしている間だけ動く)
赤い球をクリックすると、クリックしている間だけ緑の球が動く


#VRML V2.0 utf8    #クリック&移動アニメーション
#赤い球をクリックすると、クリックしている間だけ移動する

#アニメーションのためのTransformノードのインスタンスを生成
DEF KYUU Transform{
  translation 5 2 0
  children[ 
    Shape{
      appearance Appearance{
        material Material{
          diffuseColor 0.0 1.0 0.0
        }
      }
      geometry Sphere{
        radius 1.0
      }
    }
  ]
}

#TimeSensorの定義
DEF TIMER TimeSensor{   #TimeSensorノード
  enabled FALSE
  cycleInterval 2.0     #1周期の時間の設定
  loop TRUE             #繰り返しの設定
}

#移動に関するアニメーションの定義
DEF PI PositionInterpolator{   #移動するアニメーションの設定
  key[
    0.0 0.5 1.0    #動作を起こす時間ポイント
  ]
  keyValue[        #値の変化を設定
     5.0 2.0 0.0,
   -5.0 2.0 0.0
    5.0 2.0 0.0,
  ]
}

#球にTouchSensorを付加する
Transform{
  translation 0 -1 0
  children[
   Shape{
     appearance Appearance{
       material Material{
         diffuseColor  1 0 0
         specularColor 1 1 1
       }
     }
     geometry Sphere{
       radius 0.5
     }
   }
   DEF TS TouchSensor{ }
  ]
}

#ROUTE文の定義
ROUTE TS.isActive TO TIMER.set_enabled
ROUTE TIMER.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO KYUU.set_translation



実行例



【例3】回転の例(クリックしたのとは別の物体が、クリックしている間だけ回転する)
赤い球をクリックすると、クリックしている間だけ物体が回転する


#VRML V2.0 utf8
#球をクリックすると、クリックしている間だけ物体が回転する

DEF WHEELS Transform{
  translation 0.0 1.5 0.0    #表示位置
  center 0.0 -1.5 0.0        #回転中心
  children[
    Shape{
      appearance Appearance{
        material Material{
          diffuseColor 0.0 1.0 0.0
        }
      }
      geometry Cone{
        bottomRadius 0.2
        height 3.0
      }
    }
  ]
}

#TimeSensorの定義
DEF TIMER TimeSensor{   #DEFによるインスタンス処理
  enabled FALSE
  cycleInterval 5.0    #1周期の時間を設定
  loop TRUE             #繰り返しの設定
}

#回転に関するアニメーションの定義
DEF OI OrientationInterpolator{    #回転するアニメーションの設定
  key[
    0.0  0.5 1.0    #動作を起こす時間ポイント
  ]
  keyValue[         #値の変化を設定
    0.0 0.0 1.0 0.0,      #回転軸 X Y Z 回転角度
    0.0 0.0 1.0 3.14,
    0.0 0.0 1.0 6.28
  ]
}

#球にTouchSensorを付加する
Transform{
  translation 0 0 0
  children[
   Shape{
     appearance Appearance{
       material Material{
         diffuseColor  1 0 0
         specularColor 1 1 1
       }
     }
     geometry Sphere{
       radius 0.5
     }
   }
   DEF TS TouchSensor{ }
  ]
}

#ROUTE文の定義
ROUTE TS.isActive TO TIMER.set_enabled 
ROUTE TIMER.fraction_changed TO OI.set_fraction
ROUTE OI.value_changed TO WHEELS.set_rotation


実行例

 



【例4】2つの物体が動く例
赤い球をクリックすると、クリックしている間だけ2つの物体が移動する


#VRML V2.0 utf8    #クリック&移動アニメーション
#球をクリックすると移動する

DEF Kyuu1 Transform{
  translation 5 2 0
  children[ 
    Shape{
      appearance Appearance{
        material Material{
          diffuseColor 0.0 1.0 0.0  #色の設定
        }
      }
      geometry Sphere{
        radius 1.0
      }
    }
  ]
}

DEF Kyuu2 Transform{
  translation -5 0 0
  children[ 
    Shape{
      appearance Appearance{
        material Material{
          diffuseColor 0.0 1.0 0.0  #色の設定
        }
      }
      geometry Sphere{
        radius 1.0
      }
    }
  ]
}

#TimeSensorの定義
DEF TIMER1 TimeSensor{         #TimeSensorノード
  enabled FALSE
  cycleInterval 5.0           #1周期の時間の設定
  loop TRUE #繰り返しの設定
}

#TimeSensorの定義
DEF TIMER2 TimeSensor{         #TimeSensorノード
  enabled FALSE
  cycleInterval 5.0           #1周期の時間の設定
  loop TRUE #繰り返しの設定
}

#移動に関するアニメーションの定義
DEF PI1 PositionInterpolator{   #移動するアニメーションの設定
  key[
    0.0 0.3 1.0      #動作を起こす時間ポイント
  ]
  keyValue[                    #値の変化を設定
    5.0 2.0 0.0,
   -5.0 2.0 0.0,
    5.0 2.0 0.0
  ]
}

#移動に関するアニメーションの定義
DEF PI2 PositionInterpolator{   #移動するアニメーションの設定
  key[
    0.0 0.5 1.0      #動作を起こす時間ポイント
  ]
  keyValue[                    #値の変化を設定
   -5.0 0.0 0.0,
    5.0 0.0 0.0,
   -5.0 0.0 0.0
  ]
}

#球にTouchSensorを付加する
Transform{
  translation 0 -2 0
  children[
   Shape{
     appearance Appearance{
       material Material{
         diffuseColor  1 0 0
         specularColor 1 1 1
       }
     }
     geometry Sphere{
       radius 0.5
     }
   }
   DEF TS TouchSensor{ }
  ]
}

#ROUTE文の定義
ROUTE TS.isActive TO TIMER1.set_enabled
ROUTE TIMER1.fraction_changed TO PI1.set_fraction
ROUTE PI1.value_changed TO Kyuu1.set_translation

ROUTE TS.isActive TO TIMER2.set_enabled
ROUTE TIMER2.fraction_changed TO PI2.set_fraction
ROUTE PI2.value_changed TO Kyuu2.set_translation




実行例




【問題】


赤い球をクリックすると、クリックしている間だけ3の球が動くようにしなさい。


実行例