tri-z-clip.c revision 32001f49
1/** Test Z-axis clipping of a triangle */
2
3
4#include <stdio.h>
5#include <stdlib.h>
6#include "glut_wrap.h"
7
8
9static GLboolean ztest = GL_FALSE;
10
11
12static void
13Reshape(int width, int height)
14{
15    glViewport(0, 0, width, height);
16    glMatrixMode(GL_PROJECTION);
17    glLoadIdentity();
18    glOrtho(-1.0, 1.0, -1.0, 1.0, 2.0, 10.0);
19    glMatrixMode(GL_MODELVIEW);
20    glTranslatef(0, 0, -6.0);
21}
22
23
24static void
25Key(unsigned char key, int x, int y)
26{
27   if (key == 'z') {
28      ztest = !ztest;
29      printf("ztest = %d\n", ztest);
30      fflush(stdout);
31   }
32   else if (key == 27) {
33      exit(1);
34   }
35   glutPostRedisplay();
36}
37
38
39static void
40Draw(void)
41{
42   glClearColor(0.5, 0.5, 0.5, 1.0);
43   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
44
45   if (ztest)
46      glEnable(GL_DEPTH_TEST);
47   else
48      glDisable(GL_DEPTH_TEST);
49
50   glBegin(GL_TRIANGLES);
51   glColor3f(0, 0, 1);
52   glVertex3f(-0.5, 0.7, -10.0);
53   glColor3f(1, 0, 0);
54   glVertex3f(-0.5, -0.7, -10.0);
55   glColor3f(0, 1, 0);
56   glVertex3f(1.0,  0.0, 12.0);
57   glEnd();
58
59   glutSwapBuffers();
60}
61
62
63int
64main(int argc, char **argv)
65{
66    glutInit(&argc, argv);
67    glutInitWindowPosition(0, 0);
68    glutInitWindowSize(250, 250);
69    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
70    glutCreateWindow(*argv);
71
72    glutReshapeFunc(Reshape);
73    glutKeyboardFunc(Key);
74    glutDisplayFunc(Draw);
75    glutMainLoop();
76    return 0;
77}
78