Example #1
0
void 
draw(void)
{
    static int frame = 0;
    GLenum err;
    GLdouble secs;
    static double degrees = 0;
    GLfloat sphereX, sphereY, sphereZ;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* one revolution every 10 seconds... */
    if (animate) {
	secs = get_secs();
	secs = secs - 10. * floor(secs / 10.);
	degrees = (secs / 10.) * (360.);
    }
/* if (frame == 0) { */
    if (0) {
	/* switch the viewport and draw the faces of the cube from the 
	 * point of view of the square... */

	glViewport(w + 0 * faceW, 0, faceW, faceW);
	make_projection(LEFT, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 0 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[LEFT]);
	eliminate_alpha(faceW, faceW, faceMap[LEFT]);

	glViewport(w + 1 * faceW, 0, faceW, faceW);
	make_projection(RIGHT, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 1 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[RIGHT]);
	eliminate_alpha(faceW, faceW, faceMap[RIGHT]);

	glViewport(w + 2 * faceW, 0, faceW, faceW);
	make_projection(BOTTOM, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 2 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BOTTOM]);
	eliminate_alpha(faceW, faceW, faceMap[BOTTOM]);

	glViewport(w + 0 * faceW, faceW, faceW, faceW);
	make_projection(TOP, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 0 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[TOP]);
	eliminate_alpha(faceW, faceW, faceMap[TOP]);

	glViewport(w + 1 * faceW, faceW, faceW, faceW);
	make_projection(FRONT, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 1 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[FRONT]);
	eliminate_alpha(faceW, faceW, faceMap[FRONT]);

	glViewport(w + 2 * faceW, faceW, faceW, faceW);
	make_projection(BACK, 0, 0, 0);
	draw_scene(degrees, -1 & ~TORUS_BIT);
	glReadPixels(w + 2 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BACK]);
	eliminate_alpha(faceW, faceW, faceMap[BACK]);

	/* create the sphere map for the cube... */
	glViewport(w, 2 * faceW, sphereW, sphereW);
	render_spheremap();
	glReadPixels(w, 2 * faceW, sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE,
		     sphereMap[0]);
    } else {
	sphereX =
	    sphereY = cos((degrees / 360.) * 2. * M_PI);
	sphereZ = -sin((degrees / 360.) * 2. * M_PI);

	glViewport(w + 0 * faceW, 0, faceW, faceW);
	make_projection(LEFT, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 0 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[LEFT]);
	eliminate_alpha(faceW, faceW, faceMap[LEFT]);

	glViewport(w + 1 * faceW, 0, faceW, faceW);
	make_projection(RIGHT, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 1 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[RIGHT]);
	eliminate_alpha(faceW, faceW, faceMap[RIGHT]);

	glViewport(w + 2 * faceW, 0, faceW, faceW);
	make_projection(BOTTOM, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 2 * faceW, 0, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BOTTOM]);
	eliminate_alpha(faceW, faceW, faceMap[BOTTOM]);

	glViewport(w + 0 * faceW, faceW, faceW, faceW);
	make_projection(TOP, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 0 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[TOP]);
	eliminate_alpha(faceW, faceW, faceMap[TOP]);

	glViewport(w + 1 * faceW, faceW, faceW, faceW);
	make_projection(FRONT, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 1 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[FRONT]);
	eliminate_alpha(faceW, faceW, faceMap[FRONT]);

	glViewport(w + 2 * faceW, faceW, faceW, faceW);
	make_projection(BACK, sphereX, sphereY, sphereZ);
	draw_scene(degrees, 0 & ~SPHERE_BIT);
	glReadPixels(w + 2 * faceW, faceW, faceW, faceW,
		     GL_RGBA, GL_UNSIGNED_BYTE, faceMap[BACK]);
	eliminate_alpha(faceW, faceW, faceMap[BACK]);

	/* create the sphere map for the cube... */
	glViewport(w + sphereW, 2 * faceW, sphereW, sphereW);
	render_spheremap();
	glReadPixels(w + sphereW, 2 * faceW, sphereW, sphereW,
		     GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[1]);
    }
    frame = (frame == 0);

    /* draw both spheremaps */
    glViewport(w, 2 * faceW, 2 * sphereW, sphereW);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 2 * sphereW, 0, sphereW, 0, 1);
    glRasterPos2i(0, 0);
    glDrawPixels(sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[0]);
    glRasterPos2i(sphereW, 0);
    glDrawPixels(sphereW, sphereW, GL_RGBA, GL_UNSIGNED_BYTE, sphereMap[1]);


    /* draw the scene for the viewer's visual gratification... */
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60, 1, .01, 10);
    gluLookAt(0, 0, 0,
	      0, 0, -1,
	      0, 1, 0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.f, 0.f, -2.577f);
    draw_scene(degrees, 2);	/* just draw green sphere */
    glLoadIdentity();

    err = glGetError();
    if (err != GL_NO_ERROR)
	printf("Error:  %s\n", gluErrorString(err));

    if (dblbuf)
	glutSwapBuffers();
    else
	glFlush();
}
Example #2
0
void display()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	switch (style) {
	case 0:
		make_view(4);
		make_projection(4);
		glViewport(width / 2, 0, width / 2, height / 2);
		draw_scene();

		make_view(1);
		make_projection(1);
		glViewport(0, height / 2, width / 2, height / 2);
		draw_scene();
		make_view(1);
		draw_view();

		make_view(2);
		glViewport(width / 2, height / 2, width / 2, height / 2);
		draw_scene();
		make_view(2);
		draw_view();

		make_view(3);
		glViewport(0, 0, width / 2, height / 2);
		draw_scene();
		make_view(3);
		draw_view();
		break;

	case 1:
		make_view(1);
		make_projection(1);
		glViewport(0, 0, width, height);
		draw_scene();
		make_view(1);
		draw_view();
		break;

	case 2:
		make_view(2);
		glViewport(0, 0, width, height);
		draw_scene();
		make_view(2);
		draw_view();
		break;

	case 3:
		make_view(3);
		glViewport(0, 0, width, height);
		draw_scene();
		make_view(3);
		draw_view();
		break;
	case 4:
		glViewport(0, 0, width, height);
		make_view(4);
		make_projection(4);
		draw_scene();
		break;
	}
	/*-------Swap the back buffer to the front --------*/
	glutSwapBuffers();
	return;
}