blob: 8a86ac7cff68f3455679894a8274aa9d518b6814 [file] [log] [blame]
Ted Jump83c02ef1999-09-17 02:40:51 +00001/* $Id: renormal.c,v 1.2 1999/09/17 02:40:51 tjump Exp $ */
jtgafb833d1999-08-19 00:55:39 +00002
3/*
4 * Test GL_EXT_rescale_normal extension
5 * Brian Paul January 1998 This program is in the public domain.
6 */
7
8/*
Ted Jump83c02ef1999-09-17 02:40:51 +00009 * $Id: renormal.c,v 1.2 1999/09/17 02:40:51 tjump Exp $
jtgafb833d1999-08-19 00:55:39 +000010 */
11
12
13#include <stdio.h>
14#include <stdlib.h>
15#include <math.h>
16#include <GL/glut.h>
17
18
19static GLfloat Phi = 0.0;
20
21
22static void Idle(void)
23{
24 Phi += 0.1;
25 glutPostRedisplay();
26}
27
28
29static void Display( void )
30{
31 GLfloat scale = 0.6 + 0.5 * sin(Phi);
32 glClear( GL_COLOR_BUFFER_BIT );
33 glPushMatrix();
34 glScalef(scale, scale, scale);
35 glutSolidSphere(2.0, 20, 20);
36 glPopMatrix();
37 glutSwapBuffers();
38}
39
40
41static void Reshape( int width, int height )
42{
43 glViewport( 0, 0, width, height );
44 glMatrixMode( GL_PROJECTION );
45 glLoadIdentity();
46 glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
47 glMatrixMode( GL_MODELVIEW );
48 glLoadIdentity();
49 glTranslatef( 0.0, 0.0, -15.0 );
50}
51
52
53
54static void Init( void )
55{
56 static GLfloat mat[4] = { 0.8, 0.8, 0.0, 1.0 };
57 static GLfloat pos[4] = { -1.0, 1.0, 1.0, 0.0 };
58
59 /* setup lighting, etc */
60 glEnable(GL_LIGHTING);
61 glEnable(GL_LIGHT0);
62 glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat);
63 glLightfv(GL_LIGHT0, GL_POSITION, pos);
64
65 glEnable(GL_CULL_FACE);
66
67 glDisable(GL_RESCALE_NORMAL_EXT);
68 glDisable(GL_NORMALIZE);
69}
70
71
72#define UNSCALED 1
73#define NORMALIZE 2
74#define RESCALE 3
75#define QUIT 4
76
77
78static void ModeMenu(int entry)
79{
80 if (entry==UNSCALED) {
81 glDisable(GL_RESCALE_NORMAL_EXT);
82 glDisable(GL_NORMALIZE);
83 }
84 else if (entry==NORMALIZE) {
85 glEnable(GL_NORMALIZE);
86 glDisable(GL_RESCALE_NORMAL_EXT);
87 }
88 else if (entry==RESCALE) {
89 glDisable(GL_NORMALIZE);
90 glEnable(GL_RESCALE_NORMAL_EXT);
91 }
92 else if (entry==QUIT) {
93 exit(0);
94 }
95 glutPostRedisplay();
96}
97
Ted Jump83c02ef1999-09-17 02:40:51 +000098static void
99key(unsigned char k, int x, int y)
100{
101 switch (k) {
102 case 27: /* Escape */
103 exit(0);
104 break;
105 default:
106 return;
107 }
108 glutPostRedisplay();
109}
jtgafb833d1999-08-19 00:55:39 +0000110
111int main( int argc, char *argv[] )
112{
113 glutInit( &argc, argv );
114 glutInitWindowSize( 400, 400 );
115
116 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
117
118 glutCreateWindow(argv[0]);
119
120 Init();
121
122 glutIdleFunc( Idle );
123 glutReshapeFunc( Reshape );
124 glutDisplayFunc( Display );
Ted Jump83c02ef1999-09-17 02:40:51 +0000125 glutKeyboardFunc(key);
jtgafb833d1999-08-19 00:55:39 +0000126
127 glutCreateMenu(ModeMenu);
128 glutAddMenuEntry("Unscaled", UNSCALED);
129 glutAddMenuEntry("Normalize", NORMALIZE);
130 glutAddMenuEntry("Rescale EXT", RESCALE);
131 glutAddMenuEntry("Quit", QUIT);
132 glutAttachMenu(GLUT_RIGHT_BUTTON);
133
134 glutMainLoop();
135 return 0;
136}