00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #include <stdlib.h>
00045 #include <GL/glut.h>
00046
00047
00048
00049
00050 void init(void)
00051 {
00052 GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };
00053 GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
00054 GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
00055 GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };
00056 GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };
00057 GLfloat local_view[] = { 0.0 };
00058
00059 glClearColor(0.0, 0.1, 0.1, 0.0);
00060 glEnable(GL_DEPTH_TEST);
00061 glShadeModel(GL_SMOOTH);
00062
00063 glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
00064 glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
00065 glLightfv(GL_LIGHT0, GL_POSITION, position);
00066 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
00067 glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
00068
00069 glEnable(GL_LIGHTING);
00070 glEnable(GL_LIGHT0);
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 void display(void)
00089 {
00090 GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
00091 GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
00092 GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };
00093 GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };
00094 GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
00095 GLfloat no_shininess[] = { 0.0 };
00096 GLfloat low_shininess[] = { 5.0 };
00097 GLfloat high_shininess[] = { 100.0 };
00098 GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};
00099
00100 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00101
00102
00103
00104
00105 glPushMatrix();
00106 glTranslatef (-3.75, 3.0, 0.0);
00107 glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
00108 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00109 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00110 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00111 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00112 glutSolidSphere(1.0, 16, 16);
00113 glPopMatrix();
00114
00115
00116
00117
00118 glPushMatrix();
00119 glTranslatef (-1.25, 3.0, 0.0);
00120 glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
00121 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00122 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00123 glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
00124 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00125 glutSolidSphere(1.0, 16, 16);
00126 glPopMatrix();
00127
00128
00129
00130
00131 glPushMatrix();
00132 glTranslatef (1.25, 3.0, 0.0);
00133 glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
00134 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00135 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00136 glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
00137 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00138 glutSolidSphere(1.0, 16, 16);
00139 glPopMatrix();
00140
00141
00142
00143
00144 glPushMatrix();
00145 glTranslatef (3.75, 3.0, 0.0);
00146 glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
00147 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00148 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00149 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00150 glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
00151 glutSolidSphere(1.0, 16, 16);
00152 glPopMatrix();
00153
00154
00155
00156
00157 glPushMatrix();
00158 glTranslatef (-3.75, 0.0, 0.0);
00159 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
00160 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00161 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00162 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00163 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00164 glutSolidSphere(1.0, 16, 16);
00165 glPopMatrix();
00166
00167
00168
00169
00170 glPushMatrix();
00171 glTranslatef (-1.25, 0.0, 0.0);
00172 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
00173 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00174 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00175 glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
00176 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00177 glutSolidSphere(1.0, 16, 16);
00178 glPopMatrix();
00179
00180
00181
00182
00183 glPushMatrix();
00184 glTranslatef (1.25, 0.0, 0.0);
00185 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
00186 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00187 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00188 glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
00189 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00190 glutSolidSphere(1.0, 16, 16);
00191 glPopMatrix();
00192
00193
00194
00195
00196 glPushMatrix();
00197 glTranslatef (3.75, 0.0, 0.0);
00198 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
00199 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00200 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00201 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00202 glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
00203 glutSolidSphere(1.0, 16, 16);
00204 glPopMatrix();
00205
00206
00207
00208
00209 glPushMatrix();
00210 glTranslatef (-3.75, -3.0, 0.0);
00211 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
00212 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00213 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00214 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00215 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00216 glutSolidSphere(1.0, 16, 16);
00217 glPopMatrix();
00218
00219
00220
00221
00222 glPushMatrix();
00223 glTranslatef (-1.25, -3.0, 0.0);
00224 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
00225 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00226 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00227 glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
00228 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00229 glutSolidSphere(1.0, 16, 16);
00230 glPopMatrix();
00231
00232
00233
00234
00235 glPushMatrix();
00236 glTranslatef (1.25, -3.0, 0.0);
00237 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
00238 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00239 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
00240 glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
00241 glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
00242 glutSolidSphere(1.0, 16, 16);
00243 glPopMatrix();
00244
00245
00246
00247
00248 glPushMatrix();
00249 glTranslatef (3.75, -3.0, 0.0);
00250 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
00251 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
00252 glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);
00253 glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);
00254 glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
00255 glutSolidSphere(1.0, 16, 16);
00256 glPopMatrix();
00257
00258 glFlush();
00259 }
00260
00261 void reshape(int w, int h)
00262 {
00263 glViewport(0, 0, w, h);
00264 glMatrixMode(GL_PROJECTION);
00265 glLoadIdentity();
00266 if (w <= (h * 2))
00267 glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w,
00268 3.0*((GLfloat)h*2)/(GLfloat)w, -10.0, 10.0);
00269 else
00270 glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2),
00271 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -10.0, 10.0);
00272 glMatrixMode(GL_MODELVIEW);
00273 glLoadIdentity();
00274 }
00275
00276 void keyboard(unsigned char key, int x, int y)
00277 {
00278 switch (key) {
00279 case 27:
00280 exit(0);
00281 break;
00282 }
00283 }
00284
00285 int main(int argc, char** argv)
00286 {
00287 glutInit(&argc, argv);
00288 glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
00289 glutInitWindowSize (600, 450);
00290 glutCreateWindow(argv[0]);
00291 init();
00292 glutReshapeFunc(reshape);
00293 glutDisplayFunc(display);
00294 glutKeyboardFunc (keyboard);
00295 glutMainLoop();
00296 return 0;
00297 }
00298