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);