ビューワーもどき2010年1月5日 | |
![]() ファイル使い方マウスでモデルがぐりぐり動きます。
キーボードのキー "p" で "Perspective" と "Orthogonal" が切り替わります。 内容ビューワーもどきです。対象であるワイヤーフレームティーポットをマウス操作に応じてぐりぐり動かします。移動は glTranslatef(), 拡大・縮小は glScalef() で行っています。回転がやっかいですが、めんどくさいのでここでは GLUT の examples に入っている trackball.c, trackball.h を利用しました。これはクォータニオンを使ってトラックボールを模擬したものだそうですが、使い方は以下のようになります。 定義 static float curquat[4]; static float lastquat[4]; 初期化 (init() 内) trackball(curquat, 0., 0., 0., 0.); マウスの移動に応じて回転量を計算… (motion() 内) trackball(lastquat, (2.*mouseStartX - w)/w, (h - 2.*mouseStartY)/h, (2.*x - w)/w, (h - 2.*y)/h ); add_quats(lastquat, curquat, curquat); 上の trackball() の第 2 〜 5 引数には -1 〜 1 の値を与えるようです。 そして回転 (applyRotateMatrix() 内) GLfloat m[4][4]; build_rotmatrix(m, curquat); glMultMatrixf(&m[0][0]); クォータニオンから回転行列を作り、それを変換行列にかけます。 | |
| PENGUINITIS | |