第3回 コンピュータグラフィクス演習(遠隔講義)
幾何変換


 

講義に関する質問について

この授業について質問がある場合は、hemmi@sun.ac.jp までメールで問い合わせてください。
その際、件名は 「コンピュータグラフィクス演習の講義について(3)」 としてください。

 



【注意】ブラウザは Internet Explorer を使っているか確認してください。
 

 


【エラーメッセージについて】

プログラムが複雑になってくるとエラーが出る場合があります。
その際は「エラーメッセージについて」を参照してください。
 


 

前回の授業では、基本図形の作り方を学びました。
VRMLでは、物体を作ったとき、デフォルトの表示座標は原点、回転角度は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
      }
    }
  ]
}
実行例

 
 


 

【練習問題】 コマを作りなさい。これができたらこの時間は終了です。

円柱2個、円錐1個を使います。

 


第3回の講義はここまでで終了です

10:30までに、ここまでの課題が終わったかどうかを返信してください。
返信は、LiveCampusの「授業連絡」から行ってください。
返信内容は、「終わった」または「終わらなかった」のいずれかとしてください。

【返信期限】 

2020年5月18日(月) 10:30
  

【返信方法】

LiveCampusの「授業連絡」から「返信」で行ってください。
 

【返信内容】

「終わった」または「終わらなかった」のいずれかで答えてください。

 
以上