Пример #1
0
// function that draw a star
void drawStar(Star *star)
{
    glPushMatrix();
        glTranslated(star->x,star->y,star->z);
        if(showLabels) draw3DText(star->x,star->y+1.10*star->sphereModel.radius,star->z, star->name);
        glRotated(star->sphereModel.angle,0.0,1.0,0.0); // rotate around y axis of star

        // case solid sphere
        //glColor3d(star->sphereModel.r, star->sphereModel.g, star->sphereModel.b);
        //glutSolidSphere(star->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS);

        // case textured sphere
        // when draw a star, it is not affected by the light!!!
        glDisable(GL_LIGHTING); // disable light
        GLUquadric *quad;
        quad = gluNewQuadric();
        glBindTexture(GL_TEXTURE_2D,star->sphereModel.textureId);
        gluQuadricTexture(quad,GL_TRUE);
        // rotate to has right texture position
        glRotated(90.0,1.0,0.0,0.0); // rotate around x axis of star
        gluSphere(quad,star->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS);
        glEnable(GL_LIGHTING); // renable light

        // light produced by the star
        glEnable(GL_LIGHT0);
        GLfloat light0_position[] = {0.0,0.0,0.0,star->light_intensity};
        GLfloat light0_ambient[] = {0.2,0.2,0.2,star->light_intensity};
        GLfloat light0_diffused[] = {1.0,1.0,1.0,star->light_intensity};
        GLfloat light0_specular[] = {1.0,1.0,1.0,star->light_intensity};
        glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
        glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
        glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffused);
        glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);
    glPopMatrix();
}
Пример #2
0
// function that draw a planet
void drawPlanet(Planet *planet)
{
    glPushMatrix();
        glTranslated(planet->star->x,planet->star->y,planet->star->z);
        glRotated(planet->angle,0.0,1.0,0.0); // rotate around y axis of planet's star
        glPushMatrix();
            //drawText(planet->x,planet->y+3*planet->sphereModel.radius,planet->z, planet->name);
            if(showLabels) draw3DText(planet->x,planet->y+1.10*planet->sphereModel.radius,planet->z, planet->name);
            glTranslated(planet->x,planet->y,planet->z);
            glRotated(planet->sphereModel.angle,0.0,1.0,0.0); // rotate around y axis of planet

            // case solid sphere
            //glColor3d(planet->sphereModel.r, planet->sphereModel.g, planet->sphereModel.b);
            //glutSolidSphere(planet->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS);

            // case textured sphere
            GLUquadric *quad;
            quad = gluNewQuadric();
            //glEnable(GL_TEXTURE_2D);
            glBindTexture(GL_TEXTURE_2D,planet->sphereModel.textureId);
            gluQuadricTexture(quad,GL_TRUE);
            // rotate to has right texture position
            glRotated(90.0,1.0,0.0,0.0); // rotate around x axis of star
            gluSphere(quad,planet->sphereModel.radius,SPHERE_SLICE,SPHERE_STACKS);
            // red dot, check rotation time used during test
            //glColor3d(1.0,0.0,0.0);
            //glTranslated(planet->sphereModel.radius,0.0,0.0);
            //glutSolidSphere(0.1,SPHERE_SLICE,SPHERE_STACKS);
        glPopMatrix();
    glPopMatrix();
}
Пример #3
0
static void mainForegroundUpdateProc(Layer* this_layer, GContext *ctx) {
  GRect b = layer_get_bounds(this_layer);

  #ifdef PBL_ROUND
  b.size.h -= 16; // Because of the time at the top, default position is too low on a round screen
  #endif

  // Draw the three lives
  GPoint lives = GPoint( b.size.w/2 - PIECE_PIXELS, b.size.h - 6);
  for (int L=0; L<3; ++L) {
    GColor in;
    GColor out;
    if (s_score.lives >= (3 - L)) {
      if (L == 0) { in = COLOR_FALLBACK(GColorMintGreen, GColorWhite); out = COLOR_FALLBACK(GColorDarkGreen, GColorBlack); }
      else if (L == 1) { in = COLOR_FALLBACK(GColorRajah, GColorWhite); out = COLOR_FALLBACK(GColorWindsorTan, GColorBlack); }
      else { in = COLOR_FALLBACK(GColorMelon, GColorWhite); out = COLOR_FALLBACK(GColorDarkCandyAppleRed, GColorBlack); }
    } else {
      in = COLOR_FALLBACK(GColorLightGray, GColorBlack);
      out = COLOR_FALLBACK(GColorDarkGray, GColorBlack);
    }
    GPoint p = lives;
    p.x += PIECE_PIXELS * L;
    graphics_context_set_stroke_color(ctx, out);
    graphics_context_set_fill_color(ctx, in);
    graphics_context_set_stroke_width(ctx, 3);
    graphics_fill_circle(ctx, p, 3);
    graphics_draw_circle(ctx, p, 3);
    // Animation?
    if (s_spentLifeAnimRadius > 0 && s_score.lives == (3 - L)) {
      graphics_context_set_stroke_width(ctx, 5);
      graphics_context_set_stroke_color(ctx, COLOR_FALLBACK(in,out));
      graphics_draw_circle(ctx, p, s_spentLifeAnimRadius / SUB_PIXEL );
    }
  }

  // Draw the game over message
  if (s_gameOverMessage == true) {
    static const char txtGame[] = "GAME";
    static const char txtOver[] = "OVER";
    b.origin.y += 30;
    draw3DText(ctx, b, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD), txtGame, 1, GTextAlignmentCenter, true, GColorWhite, GColorBlack);
    b.origin.y += 40;
    draw3DText(ctx, b, fonts_get_system_font(FONT_KEY_BITHAM_42_BOLD), txtOver, 1, GTextAlignmentCenter, true, GColorWhite, GColorBlack);
  }
}