now a toggle for perspective/orthogonal projection in shapes demo

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1152 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2012-03-16 06:05:33 +00:00
parent f692084300
commit 5bb67c1c82

View File

@ -13,6 +13,7 @@
- <tt>Esc &nbsp;</tt> Quit - <tt>Esc &nbsp;</tt> Quit
- <tt>q Q &nbsp;</tt> Quit - <tt>q Q &nbsp;</tt> Quit
- <tt>i I &nbsp;</tt> Show info - <tt>i I &nbsp;</tt> Show info
- <tt>p P &nbsp;</tt> Toggle perspective or orthographic projection
- <tt>= + &nbsp;</tt> Increase \a slices - <tt>= + &nbsp;</tt> Increase \a slices
- <tt>- _ &nbsp;</tt> Decreate \a slices - <tt>- _ &nbsp;</tt> Decreate \a slices
- <tt>, < &nbsp;</tt> Decreate \a stacks - <tt>, < &nbsp;</tt> Decreate \a stacks
@ -64,6 +65,8 @@ static double orad = 1.0; /* doubles as size for objects other than Torus */
static int depth = 4; static int depth = 4;
static double offset[ 3 ] = { 0, 0, 0 }; static double offset[ 3 ] = { 0, 0, 0 };
static GLboolean show_info = GL_TRUE; static GLboolean show_info = GL_TRUE;
static float ar;
static int persProject = 1;
/* /*
* These one-liners draw particular objects, fetching appropriate * These one-liners draw particular objects, fetching appropriate
@ -224,16 +227,9 @@ static void shapesPrintf (int row, int col, const char *fmt, ...)
static void static void
resize(int width, int height) resize(int width, int height)
{ {
const float ar = (float) width / (float) height; ar = (float) width / (float) height;
glViewport(0, 0, width, height); glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
} }
static void display(void) static void display(void)
@ -241,6 +237,15 @@ static void display(void)
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0; const double a = t*90.0;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (persProject)
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
else
glOrtho(-ar*3, ar*3, -3.0, 3.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_LIGHTING); glEnable(GL_LIGHTING);
@ -309,6 +314,9 @@ key(unsigned char key, int x, int y)
case '0': case '0':
case ')': ++depth; break; case ')': ++depth; break;
case 'P':
case 'p': persProject=!persProject; break;
default: default:
break; break;
} }