/** * Draws the gears. */ static void gears_draw(void) { const static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 }; const static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 }; const static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 }; GLfloat transform[16]; identity(transform); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Translate and rotate the view */ translate(transform, 0, 0, -20); rotate(transform, 2 * M_PI * view_rot[0] / 360.0, 1, 0, 0); rotate(transform, 2 * M_PI * view_rot[1] / 360.0, 0, 1, 0); rotate(transform, 2 * M_PI * view_rot[2] / 360.0, 0, 0, 1); /* Draw the gears */ draw_gear(gear1, transform, -3.0, -2.0, angle, red); draw_gear(gear2, transform, 3.1, -2.0, -2 * angle - 9.0, green); draw_gear(gear3, transform, -3.1, 4.2, -2 * angle - 25.0, blue); glutSwapBuffers(); }
/** * Draws the gears. */ static void gears_draw( bool real ) { const static GLfloat red[4] = { 0.9, 0.4, 0.2, 1.0 }; const static GLfloat green[4] = { 0.0, 0.9, 0.3, 1.0 }; const static GLfloat blue[4] = { 0.4, 0.4, 1.0, 1.0 }; GLfloat transform[16]; identity(transform); if (real) glClearColor(0.0, 0.0, 0.0, 0.0); else glClearColor(1.0, 1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Translate and rotate the view */ translate(transform, 0, 0, -14); rotate(transform, 2 * M_PI * view_rot[0] / 360.0, 1, 0, 0); rotate(transform, 2 * M_PI * view_rot[1] / 360.0, 0, 1, 0); rotate(transform, 2 * M_PI * view_rot[2] / 360.0, 0, 0, 1); glEnable( GL_TEXTURE_2D ); /* Draw the gears */ draw_gear(gear1, transform, -3.0, -2.0, angle, red); draw_gear(gear2, transform, 3.1, -2.0, -2 * angle - 9.0, green); draw_gear(gear3, transform, -3.1, 4.2, -2 * angle - 25.0, blue); }
static void gears_draw(GLData *gld) { Evas_GL_API *gl = gld->glapi; static const GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 }; static const GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 }; static const GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 }; GLfloat m[16]; gl->glClearColor(0.8, 0.8, 0.1, 0.5); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); memcpy(m, gld->proj, sizeof m); rotate(m, 2 * M_PI * gld->view_rotx / 360.0, 1, 0, 0); rotate(m, 2 * M_PI * gld->view_roty / 360.0, 0, 1, 0); rotate(m, 2 * M_PI * gld->view_rotz / 360.0, 0, 0, 1); draw_gear(gld, gld->gear1, m, -3.0, -2.0, gld->angle, red); draw_gear(gld, gld->gear2, m, 3.1, -2.0, -2 * gld->angle - 9.0, green); draw_gear(gld, gld->gear3, m, -3.1, 4.2, -2 * gld->angle - 25.0, blue); }
/* Render all gears. */ static void draw_gears (ModeInfo *mi) { pinion_configuration *pp = &pps[MI_SCREEN(mi)]; Bool wire_p = MI_IS_WIREFRAME(mi); int i; glColor4f (1, 1, 0.8, 1); glInitNames(); for (i = 0; i < pp->ngears; i++) draw_gear (mi, i); /* draw a line connecting gears that are, uh, geared. */ if (debug_p) { static const GLfloat color[4] = {1.0, 0.0, 0.0, 1.0}; GLfloat off = 0.1; GLfloat ox=0, oy=0, oz=0; if (!wire_p) glDisable(GL_LIGHTING); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color); glColor3f (color[0], color[1], color[2]); for (i = 0; i < pp->ngears; i++) { gear *g = pp->gears[i]; glBegin(GL_LINE_STRIP); glVertex3f (g->x, g->y, g->z - off); glVertex3f (g->x, g->y, g->z + off); if (i > 0 && !g->base_p) glVertex3f (ox, oy, oz + off); glEnd(); ox = g->x; oy = g->y; oz = g->z; } if (!wire_p) glEnable(GL_LIGHTING); } }