Added d/D keys to change viewing distance, 'a' to toggle animation
This commit is contained in:
+29
-6
@@ -27,6 +27,9 @@ static GLint T0 = 0;
|
||||
static GLint Frames = 0;
|
||||
static GLint autoexit = 0;
|
||||
static GLint win = 0;
|
||||
static GLboolean Visible = GL_TRUE;
|
||||
static GLboolean Animate = GL_TRUE;
|
||||
static GLfloat viewDist = 40.0;
|
||||
|
||||
|
||||
/**
|
||||
@@ -179,6 +182,9 @@ draw(void)
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
glTranslatef(0.0, 0.0, -viewDist);
|
||||
|
||||
glRotatef(view_rotx, 1.0, 0.0, 0.0);
|
||||
glRotatef(view_roty, 0.0, 1.0, 0.0);
|
||||
glRotatef(view_rotz, 0.0, 0.0, 1.0);
|
||||
@@ -240,6 +246,15 @@ idle(void)
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
static void
|
||||
update_idle_func(void)
|
||||
{
|
||||
if (Visible && Animate)
|
||||
glutIdleFunc(idle);
|
||||
else
|
||||
glutIdleFunc(NULL);
|
||||
}
|
||||
|
||||
/* change view angle, exit upon ESC */
|
||||
/* ARGSUSED1 */
|
||||
static void
|
||||
@@ -252,6 +267,16 @@ key(unsigned char k, int x, int y)
|
||||
case 'Z':
|
||||
view_rotz -= 5.0;
|
||||
break;
|
||||
case 'd':
|
||||
viewDist += 1.0;
|
||||
break;
|
||||
case 'D':
|
||||
viewDist -= 1.0;
|
||||
break;
|
||||
case 'a':
|
||||
Animate = !Animate;
|
||||
update_idle_func();
|
||||
break;
|
||||
case 27: /* Escape */
|
||||
cleanup();
|
||||
exit(0);
|
||||
@@ -297,8 +322,6 @@ reshape(int width, int height)
|
||||
glLoadIdentity();
|
||||
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -40.0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -351,13 +374,12 @@ init(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
visible(int vis)
|
||||
{
|
||||
if (vis == GLUT_VISIBLE)
|
||||
glutIdleFunc(idle);
|
||||
else
|
||||
glutIdleFunc(NULL);
|
||||
Visible = vis;
|
||||
update_idle_func();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
@@ -375,6 +397,7 @@ int main(int argc, char *argv[])
|
||||
glutKeyboardFunc(key);
|
||||
glutSpecialFunc(special);
|
||||
glutVisibilityFunc(visible);
|
||||
update_idle_func();
|
||||
|
||||
glutMainLoop();
|
||||
return 0; /* ANSI C requires main to return int. */
|
||||
|
||||
Reference in New Issue
Block a user