openglでの視点移動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
the_fool_world

openglでの視点移動について

#1

投稿記事 by the_fool_world » 14年前

現在openglを学んでいるのですが、視点を移動するようにするのがうまくいきません
視点をgluLookAt()により設定しているのですが、これをマウス、あるいはキーボードにより視点が回転するようにしようとしています。
今こんな感じで視点を移動させようとしてたのですが、視点があっち行きこっち行きと訳が分かりません。

code
double zoomx=0,zoomy=10,zoomz=30;
double rx=0,ry=0,rz=0;
void myReshape (int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (double)width/(double)height, 0.1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

// glTranslated(0, -5, -20.0); // 視点
gluLookAt(zoomx,zoomy,zoomz,rx,ry,rz,0,1.0,0);
}
void myKeyboard (unsigned char key, int x, int y)
{

switch (key) {
case 'z':
zoomx+=0.1;
gluLookAt(zoomx,0,0,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'x':
zoomx-=0.1;
gluLookAt(zoomx,0,0,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'c':
zoomy+=0.1;
gluLookAt(0,zoomy,0,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'v':
zoomy-=0.1;
gluLookAt(0,zoomy,0,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'b':
zoomz+=0.1;
gluLookAt(0,0,zoomz,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'n':
zoomz-=0.1;
gluLookAt(0,0,zoomz,rx,ry,rz,0,1.0,0);
glutPostRedisplay();
break;
case 'm':
gluLookAt(2,5,5,2,5,0,0,1.0,0);
glutPostRedisplay();
break;
case ',':
gluLookAt(2,5,10,2,5,0,0,1.0,0);
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}

void myMouseMotion(int x, int y){
int xdis, ydis;
double a = 0.2;

if (mouseFlag == GL_FALSE) return;
xdis = x - xStart;
ydis = y - yStart;
/* To match mouse's movement and its rotation axis */
xAngle += (double)ydis *a;
yAngle += (double)xdis *a;

xStart = x;
yStart = y;
glutPostRedisplay();
}

void myMouseFunc(int button, int state, int x, int y){
if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ){
xStart = x;
yStart = y;
mouseFlag = GL_TRUE;
}
else {
mouseFlag = GL_FALSE;
}
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
myInit(argv[0]);
mySetLight();
glutKeyboardFunc(myKeyboard);
glutMouseFunc(myMouseFunc);
glutMotionFunc(myMouseMotion);
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
return 0;
}

/code

the_fool_world

Re: openglでの視点移動について

#2

投稿記事 by the_fool_world » 14年前

すみません なんか途中で投稿されたようで・・・
キーボード入力で視点を移動しようとしています。マウスのほうはまだ手を加えていません。
それでどなたか解決方法を教えていただけないでしょうか。またgluLookAt以外で視点を移動させる方法がありましたらそちらも教えていただけないでしょうか。

まーく

Re: openglでの視点移動について

#3

投稿記事 by まーく » 14年前

キー入力 の case 毎に
gluLookAt(zoomx,0,0,rx,ry,rz,0,1.0,0);
と やっているのが原因だと思います。
どうしても 呼びたいのであれば
gluLookAt(zoomx,zoomy,zoomz,rx,ry,rz,0,1.0,0);
としないと。
できれば、他の場所 1箇所でコールしてあげる方が良いと思います。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: openglでの視点移動について

#4

投稿記事 by みけCAT » 14年前

codeタグの使い方が間違っています。
こちらを参考にしてみてください。
http://dixq.net/board/board.html#k10
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る