タッチセンサーを2つ使う


【例】2つのタッチセンサーで回転軸を変えて回転させる
球を2つ表示し、左の球をタッチするとZ軸回転、右の球をクリックするとX軸回転を行う。

#VRML V2.0 utf8
#2つのタッチセンサーで回転軸を変えて回転させる

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
      }
    }
  ]
}

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

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

#回転に関するアニメーションの定義
DEF OI1 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
  ]
}

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


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


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

#ROUTE文の定義
ROUTE TS1.touchTime TO TIMER1.set_startTime
ROUTE TIMER1.fraction_changed TO OI1.set_fraction
ROUTE OI1.value_changed TO WHEELS.set_rotation

#ROUTE文の定義
ROUTE TS2.touchTime TO TIMER2.set_startTime
ROUTE TIMER2.fraction_changed TO OI2.set_fraction
ROUTE OI2.value_changed TO WHEELS.set_rotation



実行例