これ何て呼びますか

OpenGLでグラフィックを描いてるんですが
キーボードやマウスを使って次のことが
したいんですが、上手くいきません。
よいヒントをお願いします。

キーボードでしたいこと:

キーボードで何かを入力したら
グラフィックが既定の動作をする。

マウスでしたいこと:

マウスで動かした方向に
視点を回転させたい。
またホイールを上に回すと、拡大
ホイールを下に回すと、縮小。

上のプログラムを組む方法が
よくわからず上手くいきません。

視点を回転させる方は

static int x0, y0, z0;
switch (button) {
case GLUT_LEFT_BUTTON:
if (state==GLUT_DOWN) {
x0+=1;
gluLookAt(0.0, 75.0, 225.0, x0, 0.0, 0.0, 0.0, 1.0, 0.0);
glFlush();
}
break;
case GLUT_MIDDLE_BUTTON:
if (state==GLUT_DOWN) {
z0+=1;
gluLookAt(0.0, 75.0, 225.0, 0.0, 0.0, z0, 0.0, 1.0, 0.0);
glFlush();
}
break;
case GLUT_RIGHT_BUTTON:
if (state==GLUT_DOWN) {
y0+=1;
gluLookAt(0.0, 75.0, 225.0, 0.0, y0, 0.0, 0.0, 1.0, 0.0);
glFlush();
}
break;
default:
break;
}

という風にプログラムしてみたんですが
クリックするたびに視点が遠ざかり
最後には消えました・・・・。

A 回答 (3件)

私は以下の方法でマウスによる視点の制御を行っています。



移動パラメータを _mx, _my, _mz 、
回転パラメータを _rx, _ry, _rz 、
マウスの移動量を dx , dy
として、
 
 1.回転
  _ry += dx ;
  _rx += dy ;
  _rz += dx ;
 2.拡大縮小
  _mz += dy ;
 3.並行移動
  _my += dy ;
  _mx += dx ;
 
ホイール操作の場合は、移動量dyを回転量に置き換えてください。
視点の初期値、移動量、移動方向はお好みに合わせて調整してください。
また、視点の回転は、
『シフトキー押下しながらマウス移動』で1軸固定回転
などの制御を加えると、視点操作しやすくなると思います。
 
後は、実際に描画する時に、物体自体を移動させます。
  
  // 移動
  glTranslated( _mx, _my, _mz );
  // 回転
  glRotated( _rx, 1.0, 0.0, 0.0 );
  glRotated( _ry, 0.0, 1.0, 0.0 );
  glRotated( _rz, 0.0, 0.0, 1.0 );
  
  // ここで、描画を行う。
  
これで、お望みの動きに近い事はできると思うのですが、どうでしょう?
以上、ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
今は、ほかの事で手がいっぱいなんですが
それが済み次第挑戦してみます。
ありがとうございました。

お礼日時:2004/07/30 08:47

#1 の回答勘違いしてます・・・ごめんなさい。

    • good
    • 0

外していたらすみません。

ごめんなさい。

gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz);

ってなっているので、視点を動かすなら
引数の前3つの方を動かすのでは・・・

> クリックするたびに視点が遠ざかり
ではなくて、中心が遠ざかっていったのではないかと。

あと、x0,y0,z0 って増加する一方ですよね。
クリックする度にいずれは・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報