/* Initialises texturing, lighting, display lists, and everything else associated with the model. */ void myinit(void) { GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_position1[] = {1.0, 1.0, 1.0, 0.0}; GLfloat light_position2[] = {-1.0, 1.0, 1.0, 0.0}; glClearColor(0.0, 0.0, 0.0, 0.0); obj = gluNewQuadric(); make_table(); make_image(); /* Set up Texturing */ glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D(GL_TEXTURE_2D, 0, 3, IMAGE_WIDTH, IMAGE_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, image); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); /* Set up Lighting */ glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position1); glLightfv(GL_LIGHT1, GL_POSITION, light_position2); /* Initial render mode is with full shading and LIGHT 0 enabled. */ glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glDisable(GL_ALPHA_TEST); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_SMOOTH); /* Initialise display lists */ glNewList(list_piston_shaded, GL_COMPILE); draw_piston(); glEndList(); glNewList(list_flywheel_shaded, GL_COMPILE); draw_flywheel(); glEndList(); gluQuadricTexture(obj, GL_TRUE); glNewList(list_piston_texture, GL_COMPILE); draw_piston(); glEndList(); glNewList(list_flywheel_texture, GL_COMPILE); draw_flywheel(); glEndList(); gluQuadricTexture(obj, GL_FALSE); }
void az_draw_bad_incorporeal_piston( const az_baddie_t *baddie, float frozen, az_clock_t clock) { assert(baddie->kind == AZ_BAD_INCORPOREAL_PISTON || baddie->kind == AZ_BAD_INCORPOREAL_PISTON_EXT); assert(frozen == 0); assert(baddie->armor_flare == 0); draw_piston(baddie, az_color3f(0.2, 0.2, 0.2), az_color3f(0.1, 0.1, 0.1)); }
void az_draw_bad_piston( const az_baddie_t *baddie, float frozen, az_clock_t clock) { assert(baddie->kind == AZ_BAD_PISTON); const float flare = baddie->armor_flare; draw_piston(baddie, az_color3f(0.65f + 0.35f * flare, 0.65f + 0.2f * frozen, 0.7f + 0.3f * frozen), az_color3f(0.25f + 0.5f * flare, 0.25f + 0.15f * frozen, 0.3f + 0.2f * frozen)); }
/* Draws the crank bell, and the pivot pin for the piston. Also calls the appropreate display list of a piston doing the nesacary rotations before hand. */ void draw_crankbell(void) { glPushMatrix(); glColor4f(1.0, 0.5, 0.5, 1.0); glRotatef(90, 0.0, 1.0, 0.0); myCylinder(obj, 0.3, 0.08, 0.12); glColor4f(0.5, 0.1, 0.5, 1.0); glTranslatef(0.0, 0.2, 0.0); myCylinder(obj, 0.06, 0.0, 0.34); glTranslatef(0.0, 0.0, 0.22); glRotatef(90, 0.0, 1.0, 0.0); glRotatef(crank_angle - head_angle, 1.0, 0.0, 0.0); if (shaded) { if (texture) glCallList(list_piston_texture); else glCallList(list_piston_shaded); } else draw_piston(); glPopMatrix(); }