224 CHAPTER 7: Well-Rendered Miscellany^
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glEnable(GL_STENCIL_TEST); //3
glDisable(GL_DEPTH_TEST);
glVertexPointer(3, GL_FLOAT, 0, cubeVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, cubeColors);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
//Flip the image.
glTranslatef(0.0,((GLfloat)(sinf(-transY)/2.0)-1.5),z); //4
glRotatef(spinY, 0.0, 1.0, 0.0);
glScalef(1.0, -1.0, 1.0); //5
glFrontFace(GL_CW);
glEnable(GL_BLEND); //6
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);
glDrawElements( GL_TRIANGLE_FAN, 6 * 3, GL_UNSIGNED_BYTE, tfan1); //7
glDrawElements( GL_TRIANGLE_FAN, 6 * 3, GL_UNSIGNED_BYTE, tfan2);
glPopMatrix();
glDisable(GL_BLEND); //8
glEnable(GL_DEPTH_TEST);
glDisable(GL_STENCIL_TEST);
//Do the main image.
glPushMatrix();
glScalef(1.0, 1.0, 1.0); //9
glFrontFace(GL_CCW);
glTranslatef(0.0, (GLfloat)1.5*(sinf(transY)/2.0)+0.5,z);
glRotatef(spinY, 0.0, 1.0, 0.0);
glDrawElements( GL_TRIANGLE_FAN, 6 * 3, GL_UNSIGNED_BYTE, tfan1);
glDrawElements( GL_TRIANGLE_FAN, 6 * 3, GL_UNSIGNED_BYTE, tfan2);