タッチセンサーを組み込む(クリックすると1回だけ動作する)



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


【例1】移動の例(タッチされた物体自体が動く)
球をクリックすると、1回だけ球が動く


#VRML V2.0 utf8    
#球をクリックすると1回だけ移動する

#球に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ノード
  cycleInterval 2.0     #1周期の時間の設定
  loop FALSE             #繰り返しの設定
}

#移動に関するアニメーションの定義
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.touchTime TO TIMER.set_startTime
ROUTE TIMER.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO KYUU.set_translation
実行例

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


#VRML V2.0 utf8    
#赤い球をクリックすると1回だけ移動する

#アニメーションのための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ノード
  cycleInterval 2.0     #1周期の時間の設定
  loop FALSE             #繰り返しの設定
}

#移動に関するアニメーションの定義
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.touchTime TO TIMER.set_startTime
ROUTE TIMER.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO KYUU.set_translation

実行例

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


#VRML V2.0 utf8    #クリック&回転アニメーション
#赤い球をクリックすると1回だけ回転する

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によるインスタンス処理
  cycleInterval 5.0    #1周期の時間を設定
  loop FALSE             #繰り返しの設定
}

#回転に関するアニメーションの定義
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.touchTime TO TIMER.set_startTime
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
      }
    }
  ]
}

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

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

#移動に関するアニメーションの定義
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.touchTime TO TIMER1.set_startTime
ROUTE TIMER1.fraction_changed TO PI1.set_fraction
ROUTE PI1.value_changed TO Kyuu1.set_translation

ROUTE TS.touchTime TO TIMER2.set_startTime
ROUTE TIMER2.fraction_changed TO PI2.set_fraction
ROUTE PI2.value_changed TO Kyuu2.set_translation



実行例




【問題】

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

実行例