現在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
openglでの視点移動について
-
the_fool_world
Re: openglでの視点移動について
すみません なんか途中で投稿されたようで・・・
キーボード入力で視点を移動しようとしています。マウスのほうはまだ手を加えていません。
それでどなたか解決方法を教えていただけないでしょうか。またgluLookAt以外で視点を移動させる方法がありましたらそちらも教えていただけないでしょうか。
キーボード入力で視点を移動しようとしています。マウスのほうはまだ手を加えていません。
それでどなたか解決方法を教えていただけないでしょうか。またgluLookAt以外で視点を移動させる方法がありましたらそちらも教えていただけないでしょうか。
-
まーく
Re: openglでの視点移動について
キー入力 の case 毎に
gluLookAt(zoomx,0,0,rx,ry,rz,0,1.0,0);
と やっているのが原因だと思います。
どうしても 呼びたいのであれば
gluLookAt(zoomx,zoomy,zoomz,rx,ry,rz,0,1.0,0);
としないと。
できれば、他の場所 1箇所でコールしてあげる方が良いと思います。
gluLookAt(zoomx,0,0,rx,ry,rz,0,1.0,0);
と やっているのが原因だと思います。
どうしても 呼びたいのであれば
gluLookAt(zoomx,zoomy,zoomz,rx,ry,rz,0,1.0,0);
としないと。
できれば、他の場所 1箇所でコールしてあげる方が良いと思います。
Re: openglでの視点移動について
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)