00001 #ifndef __MATERIALS_CPP__
00002 #define __MATERIALS_CPP__
00003
00004 #include <GL/glu.h>
00005
00006 #include "materials.h"
00007
00008 static float ColorNone[4] = { 0.0, 0.0, 0.0, 1.0 };
00009 static float colorNone[4] = { 0.0, 0.0, 0.0, 1.0 };
00010 static float NoShininess[1] = { 0.0 };
00011
00012 typedef struct MaterialStruct
00013 {
00014 GLfloat ambient[4];
00015 GLfloat diffuse[4];
00016 GLfloat specular[4];
00017 GLfloat shininess[1];
00018 } Material;
00019
00020
00021 Material Materials[MATERIAL_N];
00022
00023
00024 void setDiffuseMaterialColor( const float *mc )
00025 {
00026 glMaterialfv(GL_FRONT, GL_DIFFUSE, mc );
00027 glMaterialfv(GL_FRONT, GL_AMBIENT, mc );
00028 glMaterialfv(GL_FRONT, GL_SPECULAR, colorNone );
00029 glColor4fv(mc);
00030 }
00031
00032
00033 void setMaterial(int i)
00034 {
00035
00036 glMaterialfv(GL_FRONT, GL_AMBIENT, Materials[ i ].ambient );
00037 glMaterialfv(GL_FRONT, GL_SPECULAR, Materials[ i ].specular );
00038 glMaterialfv(GL_FRONT, GL_DIFFUSE, Materials[ i ].diffuse );
00039 glMaterialfv(GL_FRONT, GL_EMISSION, ColorNone);
00040 glMaterialfv(GL_FRONT, GL_SHININESS, Materials[ i ].shininess );
00041
00042
00043 glMaterialfv(GL_BACK, GL_AMBIENT, Materials[ i ].ambient );
00044 glMaterialfv(GL_BACK, GL_SPECULAR, ColorNone );
00045 glMaterialfv(GL_BACK, GL_DIFFUSE, ColorNone );
00046 glMaterialfv(GL_BACK, GL_EMISSION, ColorNone);
00047 glMaterialfv(GL_BACK, GL_SHININESS, NoShininess );
00048
00049 }
00050
00051 void initMaterials()
00052 {
00053
00054 Materials[MATERIAL_SKIN].ambient[0] = 0.2;
00055 Materials[MATERIAL_SKIN].ambient[1] = 0.2;
00056 Materials[MATERIAL_SKIN].ambient[2] = 0.2;
00057 Materials[MATERIAL_SKIN].ambient[3] = 1.0;
00058
00059 Materials[MATERIAL_SKIN].diffuse[0] = 0.1;
00060 Materials[MATERIAL_SKIN].diffuse[1] = 0.1;
00061 Materials[MATERIAL_SKIN].diffuse[2] = 0.1;
00062 Materials[MATERIAL_SKIN].diffuse[3] = 1;
00063
00064 Materials[MATERIAL_SKIN].specular[0] = 233.0f/256.0f;
00065 Materials[MATERIAL_SKIN].specular[1] = 192.0f/256.0f;
00066 Materials[MATERIAL_SKIN].specular[2] = 102.0f/256.0f;
00067 Materials[MATERIAL_SKIN].specular[3] = 1;
00068
00069 Materials[MATERIAL_SKIN].shininess[0] = 6.8;
00070
00071
00072 Materials[MATERIAL_WOOD].ambient[0] = 0.2;
00073 Materials[MATERIAL_WOOD].ambient[1] = 0.2;
00074 Materials[MATERIAL_WOOD].ambient[2] = 0.2;
00075 Materials[MATERIAL_WOOD].ambient[3] = 1.0;
00076
00077 Materials[MATERIAL_WOOD].diffuse[0] = 0.1;
00078 Materials[MATERIAL_WOOD].diffuse[1] = 0.1;
00079 Materials[MATERIAL_WOOD].diffuse[2] = 0.1;
00080 Materials[MATERIAL_WOOD].diffuse[3] = 1;
00081
00082 Materials[MATERIAL_WOOD].specular[0] = 156.0f/256.0f;
00083 Materials[MATERIAL_WOOD].specular[1] = 111.0f/256.0f;
00084 Materials[MATERIAL_WOOD].specular[2] = 12.0f/256.0f;
00085 Materials[MATERIAL_WOOD].specular[3] = 1;
00086
00087 Materials[MATERIAL_WOOD].shininess[0] = 6.8;
00088
00089
00090
00091 Materials[MATERIAL_CRYPT].ambient[0] = 0.2;
00092 Materials[MATERIAL_CRYPT].ambient[1] = 0.2;
00093 Materials[MATERIAL_CRYPT].ambient[2] = 0.2;
00094 Materials[MATERIAL_CRYPT].ambient[3] = 1.0;
00095
00096 Materials[MATERIAL_CRYPT].diffuse[0] = 0.1;
00097 Materials[MATERIAL_CRYPT].diffuse[1] = 0.1;
00098 Materials[MATERIAL_CRYPT].diffuse[2] = 0.1;
00099 Materials[MATERIAL_CRYPT].diffuse[3] = 1;
00100
00101 Materials[MATERIAL_CRYPT].specular[0] = 156.0f/256.0f;
00102 Materials[MATERIAL_CRYPT].specular[1] = 147.0f/256.0f;
00103 Materials[MATERIAL_CRYPT].specular[2] = 127.0f/256.0f;
00104 Materials[MATERIAL_CRYPT].specular[3] = 1;
00105
00106 Materials[MATERIAL_CRYPT].shininess[0] = 16.8;
00107
00108
00109 Materials[MATERIAL_CERAMIC].ambient[0] = 0.3;
00110 Materials[MATERIAL_CERAMIC].ambient[1] = 0.2;
00111 Materials[MATERIAL_CERAMIC].ambient[2] = 0.2;
00112 Materials[MATERIAL_CERAMIC].ambient[3] = 1.0;
00113
00114 Materials[MATERIAL_CERAMIC].diffuse[0] = 0.2;
00115 Materials[MATERIAL_CERAMIC].diffuse[1] = 0.1;
00116 Materials[MATERIAL_CERAMIC].diffuse[2] = 0.1;
00117 Materials[MATERIAL_CERAMIC].diffuse[3] = 1;
00118
00119 Materials[MATERIAL_CERAMIC].specular[0] = 250.0f/256.0f;
00120 Materials[MATERIAL_CERAMIC].specular[1] = 120.0f/256.0f;
00121 Materials[MATERIAL_CERAMIC].specular[2] = 93.0f/256.0f;
00122 Materials[MATERIAL_CERAMIC].specular[3] = 1;
00123
00124 Materials[MATERIAL_CERAMIC].shininess[0] = 16.8;
00125
00126
00127
00128 Materials[MATERIAL_BRASS].ambient[0] = 0.329412;
00129 Materials[MATERIAL_BRASS].ambient[1] = 0.223529;
00130 Materials[MATERIAL_BRASS].ambient[2] = 0.027451;
00131 Materials[MATERIAL_BRASS].ambient[3] = 1.0;
00132
00133 Materials[MATERIAL_BRASS].diffuse[0] = 0.780392;
00134 Materials[MATERIAL_BRASS].diffuse[1] = 0.568627;
00135 Materials[MATERIAL_BRASS].diffuse[2] = 0.113725;
00136 Materials[MATERIAL_BRASS].diffuse[3] = 1.0;
00137
00138 Materials[MATERIAL_BRASS].specular[0] = 0.99;
00139 Materials[MATERIAL_BRASS].specular[1] = 0.94;
00140 Materials[MATERIAL_BRASS].specular[2] = 0.80;
00141 Materials[MATERIAL_BRASS].specular[3] = 1.0;
00142
00143 Materials[MATERIAL_BRASS].shininess[0] = 27.8974;
00144
00145
00146 Materials[MATERIAL_SILVER].ambient[0] = 0.19225;
00147 Materials[MATERIAL_SILVER].ambient[1] = 0.19225;
00148 Materials[MATERIAL_SILVER].ambient[2] = 0.19225;
00149 Materials[MATERIAL_SILVER].ambient[3] = 1.0;
00150
00151 Materials[MATERIAL_SILVER].diffuse[0] = 0.50754;
00152 Materials[MATERIAL_SILVER].diffuse[1] = 0.50754;
00153 Materials[MATERIAL_SILVER].diffuse[2] = 0.50754;
00154 Materials[MATERIAL_SILVER].diffuse[3] = 1.0;
00155
00156 Materials[MATERIAL_SILVER].specular[0] = 0.508273;
00157 Materials[MATERIAL_SILVER].specular[1] = 0.508273;
00158 Materials[MATERIAL_SILVER].specular[2] = 0.508273;
00159 Materials[MATERIAL_SILVER].specular[3] = 1.0;
00160
00161 Materials[MATERIAL_SILVER].shininess[0] = 51.2;
00162
00163
00164 Materials[MATERIAL_BLACK_PLASTIC].ambient[0] = 0;
00165 Materials[MATERIAL_BLACK_PLASTIC].ambient[1] = 0;
00166 Materials[MATERIAL_BLACK_PLASTIC].ambient[2] = 0;
00167 Materials[MATERIAL_BLACK_PLASTIC].ambient[3] = 1.0;
00168
00169 Materials[MATERIAL_BLACK_PLASTIC].diffuse[0] = 0.01;
00170 Materials[MATERIAL_BLACK_PLASTIC].diffuse[1] = 0.01;
00171 Materials[MATERIAL_BLACK_PLASTIC].diffuse[2] = 0.01;
00172 Materials[MATERIAL_BLACK_PLASTIC].diffuse[3] = 1.0;
00173
00174 Materials[MATERIAL_BLACK_PLASTIC].specular[0] = 0.5;
00175 Materials[MATERIAL_BLACK_PLASTIC].specular[1] = 0.5;
00176 Materials[MATERIAL_BLACK_PLASTIC].specular[2] = 0.5;
00177 Materials[MATERIAL_BLACK_PLASTIC].specular[3] = 1.0;
00178
00179 Materials[MATERIAL_BLACK_PLASTIC].shininess[0] = 32;
00180
00181
00182 Materials[MATERIAL_PEARL].ambient[0] = 0.25;
00183 Materials[MATERIAL_PEARL].ambient[1] = 0.20725;
00184 Materials[MATERIAL_PEARL].ambient[2] = 0.20725;
00185 Materials[MATERIAL_PEARL].ambient[3] = .922;
00186
00187 Materials[MATERIAL_PEARL].diffuse[0] = 1.0;
00188 Materials[MATERIAL_PEARL].diffuse[1] = 0.829;
00189 Materials[MATERIAL_PEARL].diffuse[2] = 0.829;
00190 Materials[MATERIAL_PEARL].diffuse[3] = .922;
00191
00192 Materials[MATERIAL_PEARL].specular[0] = 0.296648;
00193 Materials[MATERIAL_PEARL].specular[1] = 0.296648;
00194 Materials[MATERIAL_PEARL].specular[2] = 0.296648;
00195 Materials[MATERIAL_PEARL].specular[3] = .922;
00196
00197 Materials[MATERIAL_PEARL].shininess[0] = 11.264;
00198
00199
00200
00201 Materials[MATERIAL_RUBY].ambient[0] = 0.1745;
00202 Materials[MATERIAL_RUBY].ambient[1] = 0.01175;
00203 Materials[MATERIAL_RUBY].ambient[2] = 0.01175;
00204 Materials[MATERIAL_RUBY].ambient[3] = .55;
00205
00206 Materials[MATERIAL_RUBY].diffuse[0] = 0.61424;
00207 Materials[MATERIAL_RUBY].diffuse[1] = 0.04136;
00208 Materials[MATERIAL_RUBY].diffuse[2] = 0.04136;
00209 Materials[MATERIAL_RUBY].diffuse[3] = .55;
00210
00211 Materials[MATERIAL_RUBY].specular[0] = .727811;
00212 Materials[MATERIAL_RUBY].specular[1] = 0.626959;
00213 Materials[MATERIAL_RUBY].specular[2] = 0.626959;
00214 Materials[MATERIAL_RUBY].specular[3] = 0.55;
00215
00216 Materials[MATERIAL_RUBY].shininess[0] = 76.8;
00217
00218
00219
00220 Materials[MATERIAL_JADE].ambient[0] = 0.135;
00221 Materials[MATERIAL_JADE].ambient[1] = 0.2225;
00222 Materials[MATERIAL_JADE].ambient[2] = 0.1575;
00223 Materials[MATERIAL_JADE].ambient[3] = 0.95;
00224
00225 Materials[MATERIAL_JADE].diffuse[0] = 0.54;
00226 Materials[MATERIAL_JADE].diffuse[1] = 0.89;
00227 Materials[MATERIAL_JADE].diffuse[2] = 0.63;
00228 Materials[MATERIAL_JADE].diffuse[3] = 0.95;
00229
00230 Materials[MATERIAL_JADE].specular[0] = 0.316228;
00231 Materials[MATERIAL_JADE].specular[1] = 0.316228;
00232 Materials[MATERIAL_JADE].specular[2] = 0.316228;
00233 Materials[MATERIAL_JADE].specular[3] = 0.95;
00234
00235 Materials[MATERIAL_JADE].shininess[0] = 12.8;
00236
00237
00238
00239 Materials[MATERIAL_CHROME].ambient[0] = 0.25;
00240 Materials[MATERIAL_CHROME].ambient[1] = 0.25;
00241 Materials[MATERIAL_CHROME].ambient[2] = 0.25;
00242 Materials[MATERIAL_CHROME].ambient[3] = 1.0;
00243
00244 Materials[MATERIAL_CHROME].diffuse[0] = 0.4;
00245 Materials[MATERIAL_CHROME].diffuse[1] = 0.4;
00246 Materials[MATERIAL_CHROME].diffuse[2] = 0.4;
00247 Materials[MATERIAL_CHROME].diffuse[3] = 1.0;
00248
00249 Materials[MATERIAL_CHROME].specular[0] = 0.774597;
00250 Materials[MATERIAL_CHROME].specular[1] = 0.774597;
00251 Materials[MATERIAL_CHROME].specular[2] = 0.774597;
00252 Materials[MATERIAL_CHROME].specular[3] = 1.0;
00253
00254 Materials[MATERIAL_CHROME].shininess[0] = 76.8;
00255
00256
00257 Materials[MATERIAL_COPPER].ambient[0] = 0.19125;
00258 Materials[MATERIAL_COPPER].ambient[1] = 0.0735;
00259 Materials[MATERIAL_COPPER].ambient[2] = 0.0225;
00260 Materials[MATERIAL_COPPER].ambient[3] = 1.0;
00261
00262 Materials[MATERIAL_COPPER].diffuse[0] = 0.7038;
00263 Materials[MATERIAL_COPPER].diffuse[1] = 0.27048;
00264 Materials[MATERIAL_COPPER].diffuse[2] = 0.0828;
00265 Materials[MATERIAL_COPPER].diffuse[3] = 1.0;
00266
00267 Materials[MATERIAL_COPPER].specular[0] = 0.256777;
00268 Materials[MATERIAL_COPPER].specular[1] = 0.137622;
00269 Materials[MATERIAL_COPPER].specular[2] = 0.086014;
00270 Materials[MATERIAL_COPPER].specular[3] = 1.0;
00271
00272 Materials[MATERIAL_COPPER].shininess[0] = 12.8;
00273
00274
00275 Materials[MATERIAL_GOLD].ambient[0] = 0.24725;
00276 Materials[MATERIAL_GOLD].ambient[1] = 0.1995;
00277 Materials[MATERIAL_GOLD].ambient[2] = 0.0745;
00278 Materials[MATERIAL_GOLD].ambient[3] = 1.0;
00279
00280 Materials[MATERIAL_GOLD].diffuse[0] = 0.75164;
00281 Materials[MATERIAL_GOLD].diffuse[1] = 0.60648;
00282 Materials[MATERIAL_GOLD].diffuse[2] = 0.22648;
00283 Materials[MATERIAL_GOLD].diffuse[3] = 1.0;
00284
00285 Materials[MATERIAL_GOLD].specular[0] = 0.628281;
00286 Materials[MATERIAL_GOLD].specular[1] = 0.555802;
00287 Materials[MATERIAL_GOLD].specular[2] = 0.366065;
00288 Materials[MATERIAL_GOLD].specular[3] = 1.0;
00289
00290 Materials[MATERIAL_GOLD].shininess[0] = 51.2;
00291
00292
00293 Materials[MATERIAL_PEWTER].ambient[0] = 0.105882;
00294 Materials[MATERIAL_PEWTER].ambient[1] = 0.058824;
00295 Materials[MATERIAL_PEWTER].ambient[2] = 0.113725;
00296 Materials[MATERIAL_PEWTER].ambient[3] = 1.0;
00297
00298 Materials[MATERIAL_PEWTER].diffuse[0] = 0.427451;
00299 Materials[MATERIAL_PEWTER].diffuse[1] = 0.470588;
00300 Materials[MATERIAL_PEWTER].diffuse[2] = 0.541176;
00301 Materials[MATERIAL_PEWTER].diffuse[3] = 1.0;
00302
00303 Materials[MATERIAL_PEWTER].specular[0] = 0.333333;
00304 Materials[MATERIAL_PEWTER].specular[1] = 0.333333;
00305 Materials[MATERIAL_PEWTER].specular[2] = 0.521569;
00306 Materials[MATERIAL_PEWTER].specular[3] = 1.0;
00307
00308 Materials[MATERIAL_PEWTER].shininess[0] = 9.84615;
00309
00310
00311
00312 Materials[MATERIAL_EMERALD].ambient[0] = 0.0215;
00313 Materials[MATERIAL_EMERALD].ambient[1] = 0.1745;
00314 Materials[MATERIAL_EMERALD].ambient[2] = 0.0215;
00315 Materials[MATERIAL_EMERALD].ambient[3] = .55;
00316
00317 Materials[MATERIAL_EMERALD].diffuse[0] = 0.07568;
00318 Materials[MATERIAL_EMERALD].diffuse[1] = 0.61424;
00319 Materials[MATERIAL_EMERALD].diffuse[2] = 0.07568;
00320 Materials[MATERIAL_EMERALD].diffuse[3] = .55;
00321
00322 Materials[MATERIAL_EMERALD].specular[0] = 0.633;
00323 Materials[MATERIAL_EMERALD].specular[1] = 0.727811;
00324 Materials[MATERIAL_EMERALD].specular[2] = 0.633;
00325 Materials[MATERIAL_EMERALD].specular[3] = .55;
00326
00327 Materials[MATERIAL_EMERALD].shininess[0] = 76.8;
00328
00329
00330 Materials[MATERIAL_OBSIDIAN].ambient[0] = 0.05375;
00331 Materials[MATERIAL_OBSIDIAN].ambient[1] = 0.05;
00332 Materials[MATERIAL_OBSIDIAN].ambient[2] = 0.06625;
00333 Materials[MATERIAL_OBSIDIAN].ambient[3] = .82;
00334
00335 Materials[MATERIAL_OBSIDIAN].diffuse[0] = 0.18275;
00336 Materials[MATERIAL_OBSIDIAN].diffuse[1] = 0.17;
00337 Materials[MATERIAL_OBSIDIAN].diffuse[2] = 0.22525;
00338 Materials[MATERIAL_OBSIDIAN].diffuse[3] = .82;
00339
00340 Materials[MATERIAL_OBSIDIAN].specular[0] = .332741;
00341 Materials[MATERIAL_OBSIDIAN].specular[1] = .328634;
00342 Materials[MATERIAL_OBSIDIAN].specular[2] = .346435;
00343 Materials[MATERIAL_OBSIDIAN].specular[3] = .82;
00344
00345 Materials[MATERIAL_OBSIDIAN].shininess[0] = 38.4;
00346
00347
00348 Materials[MATERIAL_TURQUOISE].ambient[0] = 0.1;
00349 Materials[MATERIAL_TURQUOISE].ambient[1] = 0.18725;
00350 Materials[MATERIAL_TURQUOISE].ambient[2] = 0.1745;
00351 Materials[MATERIAL_TURQUOISE].ambient[3] = .8;
00352
00353 Materials[MATERIAL_TURQUOISE].diffuse[0] = 0.396;
00354 Materials[MATERIAL_TURQUOISE].diffuse[1] = 0.74151;
00355 Materials[MATERIAL_TURQUOISE].diffuse[2] = 0.69102;
00356 Materials[MATERIAL_TURQUOISE].diffuse[3] = .8;
00357
00358 Materials[MATERIAL_TURQUOISE].specular[0] = .297254;
00359 Materials[MATERIAL_TURQUOISE].specular[1] = 0.30829;
00360 Materials[MATERIAL_TURQUOISE].specular[2] = 0.306678;
00361 Materials[MATERIAL_TURQUOISE].specular[3] = .8;
00362
00363 Materials[MATERIAL_TURQUOISE].shininess[0] = 12.8;
00364
00365
00366
00367 Materials[MATERIAL_BLACK_RUBBER].ambient[0] = 0.02;
00368 Materials[MATERIAL_BLACK_RUBBER].ambient[1] = 0.02;
00369 Materials[MATERIAL_BLACK_RUBBER].ambient[2] = 0.02;
00370 Materials[MATERIAL_BLACK_RUBBER].ambient[3] = 1.0;
00371
00372 Materials[MATERIAL_BLACK_RUBBER].diffuse[0] = 0.01;
00373 Materials[MATERIAL_BLACK_RUBBER].diffuse[1] = 0.01;
00374 Materials[MATERIAL_BLACK_RUBBER].diffuse[2] = 0.01;
00375 Materials[MATERIAL_BLACK_RUBBER].diffuse[3] = 1.0;
00376
00377 Materials[MATERIAL_BLACK_RUBBER].specular[0] = 0.4;
00378 Materials[MATERIAL_BLACK_RUBBER].specular[1] = 0.4;
00379 Materials[MATERIAL_BLACK_RUBBER].specular[2] = 0.4;
00380 Materials[MATERIAL_BLACK_RUBBER].specular[3] = 1.0;
00381
00382 Materials[MATERIAL_BLACK_RUBBER].shininess[0] = 10;
00383
00384
00385
00386
00387 Materials[MATERIAL_BRONZE].ambient[0] = 0.2125;
00388 Materials[MATERIAL_BRONZE].ambient[1] = 0.1275;
00389 Materials[MATERIAL_BRONZE].ambient[2] = 0.054;
00390 Materials[MATERIAL_BRONZE].ambient[3] = 1.0;
00391
00392 Materials[MATERIAL_BRONZE].diffuse[0] = 0.714;
00393 Materials[MATERIAL_BRONZE].diffuse[1] = 0.4284;
00394 Materials[MATERIAL_BRONZE].diffuse[2] = 0.18144;
00395 Materials[MATERIAL_BRONZE].diffuse[3] = 1.0;
00396
00397 Materials[MATERIAL_BRONZE].specular[0] = 0.39;
00398 Materials[MATERIAL_BRONZE].specular[1] = 0.27;
00399 Materials[MATERIAL_BRONZE].specular[2] = 0.166;
00400 Materials[MATERIAL_BRONZE].specular[3] = 1.0;
00401
00402 Materials[MATERIAL_BRONZE].shininess[0] = 25.6;
00403
00404 }
00405
00406
00407 #endif
00408