OpenGL イベント処理+座標系を動かそう(課題1101)

[全課題リスト|サンプルソース|完成した実行ファイル(実習室のみ)|完成したソースの例] Time-stamp: "2004/12/09 Thu 22:28 hig"

サンプル opengl4 を実行すると, 立体的な字が表示され, マウスの左ボタン, 右ボタン, 中ボタンで回転する. このように文字全体を一度に平行移動, 拡大縮小, 回転するには, 講義(代替)で説明したOpenGLの座標系の真実を知る必要があります.

マウスの入力を取るには, 講義(代替)で説明したように, イベント処理コールバック を登録すればよい.
glutMouseFunc(f1);	/*  main などに記述. マウス操作があったら関数 f1 を呼び出す. */


void f1(int button, int state, int x, int y){
  /* マウスカーソルが x,y にあったとき, マウスボタン
      button= GLUT_LEFT_BUTTON |GLUT_MIDDLE_BUTTON |GLUT_RIGHT_BUTTON 
      に
      state= GLUT_UP | GLUT_DOWN
      が発生したときの処理をここに記述
      */
}
なお, マウスのドラッグは, glutMotionFunc で登録するコールバックで処理される. 同様に, キーボードの入力を取ることもできる. ふつうのキーは f2, 特殊キーは f3.
glutKeyboardFunc(f2);/*  main などに記述. 文字キー入力があったら関数 f2 を呼び出す. */

void f2(unsigned char c, int x, int y){
      /*
      マウスカーソルが x,y にあるときに,
      キャラクタ c に相当するキーが押されたときの処理.
      */
}

glutSpecialFunc(f3);/*  main などに記述. 特殊キー入力があったら関数 f3 を呼び出す. */

void f3(int key, int x, int y){
      /*
      マウスカーソルが x,y にあるときに,
      番号 key= GLUT_KEY_UP | GLUT_KEY_RIGHT | GLUT_KEY_F1 | ....
      で与えられる特殊キーが押されたときの処理.
      */
}
Shift や Alt が押されているかどうかも, int glutGetModifiers() を使うと判定できる.

これを参考にして, 課題1001を作り変えて, 自分の名前のうちの一字が, マウスで回転, キーボードで移動するようにしたプログラムopengl4.c を作ろう.

フォント設計用方眼紙プレゼント中です.


Copyright © 2004 Saburo Higuchi. All rights reserved.
樋口三郎, hig mail address