幾何変換(移動、回転など)

 物体を作ったとき、デフォルトの表示座標は原点、回転角度は0度になっています。
ここでは、物体の表示位置を指定する(移動する)方法と回転させる方法を説明します。

 


●物体の表示位置を指定する

物体の表示位置(表示座標)はtranslationフィールドに書きます。
パラメータは3つ、X座標、Y座標、Z座標、です。
物体の記述(Shapeノード)はchildrenの中に書きます。
childrenの括弧は、角括弧 [ ] になるので注意してください。
Transform{
  translation 2.0 1.0 0.0       # 物体を表示する位置を設定(ここでは、座標 2.0 , 1.0 , 0.0 を指定)
  children[                     # childrenが必要 [ ]になるので注意!
  ]
}

 

【例】座標(3.0 1.0 0.0)に円錐を表示する
#VRML V2.0 utf8
Transform{
  translation 3.0 1.0 0.0
  children[
    Shape{
      geometry Cone{
        bottomRadius 2.0
        height 4.0
      }
    }
  ]
}

実行例

 


●回転させる
 
回転角度はrotationフィールドに書きます。
パラメータは4つです。
 第1から第3パラメータはどの軸を中心に回転させるかを指定します(1.0を指定した軸を中心に回転します。
    回転軸を2軸以上指定した場合は、指定した軸の合成ベクトルが回転軸になります)。
 第4パラメータは回転角度です。
 回転角度の単位は「ラジアン」です。(「度」ではありませんので注意してください。)
 回転の向きは反時計回りです。

Transform{
  rotation 1.0 0.0 0.0 3.14     # x軸を中心に、反時計回りに3.14ラジアン回転
  children[                     # childrenが必要 [ ]になるので注意!
  ]
}

 

「度」と「ラジアン」の変換は次のように行います。 ラジアン = 度 × π / 180

簡単な変換表を載せておきますので参考にしてください。

度とラジアンの変換表
ラジアン
5
10
15
30
45
90
180
0.087
0.17
0.26
0.52
0.79
1.57
3.14

 

【例】X軸を中心に反時計回りに3.14ラジアン(180度)回転させる。

#VRML V2.0 utf8
Transform{
  rotation 1.0 0.0 0.0 3.14
  children[     
    Shape{
      geometry Cone{
        bottomRadius 2.0
        height 4.0
      }
    }
  ]
}
実行例

 


●回転してから移動させる

translationフィールドとrotationフィールドを同時に入れれば、物体を回転させてから移動することができます。
この時、物体の中心で回転されたものが移動されます。
 
【例】X軸を中心に反時計回りに3.14ラジアン(180度)回転させた円錐を座標(3.0 1.0 0.0)に移動する。

#VRML V2.0 utf8
Transform{
  translation 3.0 1.0 0.0
  rotation 1.0 0.0 0.0 3.14
  children[     
    Shape{
      geometry Cone{
        bottomRadius 2.0
        height 4.0
      }
    }
  ]
}
実行例

 
 
【注意】この方法だと回転した後に移動させることしかできません。
移動した後に回転したい場合は「幾何変換を重ねる」を参照してください。
  

 


●複数の物体を別の座標に表示する

【例】円錐を2つ表示する。
   円錐@は座標(0.0 -1.0 0.0)に表示する。
   円錐AはX軸を中心に3.14ラジアン(180度)回転した後、座標(3.0 1.0 0.0)に表示する。

#VRML V2.0 utf8
Transform{
  translation 0.0 -1.0 0.0
  children[
    Shape{
      geometry Cone{
        bottomRadius 2.0
        height 4.0
      }
    }
  ]
}

Transform{
  translation 3.0 1.0 0.0
  rotation 1.0 0.0 0.0 3.14
  children[     
    Shape{
      geometry Cone{
        bottomRadius 2.0
        height 4.0
      }
    }
  ]
}
実行例