예제 #1
0
// Draw Particles
void drawScene( ) {
    int i, j;
    float x, y, z;
    
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    
    glLoadIdentity();
    
    
    glRotatef(pan, 0.0, 1.0, 0.0);
    glRotatef(tilt, 1.0, 0.0, 0.0);
    
    // GROUND?!
    glColor3f(r, g, b);
    glBegin(GL_QUADS);
    // along z - y const
    for (i = -10; i+1 < 11; i++) {
        // along x - y const
        for (j = -10; j+1 < 11; j++) {
            glColor3fv(ground_colors[i+10][j+10]);
            glVertex3f(ground_points[j+10][i+10][0],
                       ground_points[j+10][i+10][1], 
                       ground_points[j+10][i+10][2] + zoom);
            glColor3fv(ground_colors[i+10][j+1+10]);
            glVertex3f(ground_points[j+1+10][i+10][0], 
                       ground_points[j+1+10][i+10][1],
                       ground_points[j+1+10][i+10][2] + zoom);
            glColor3fv(ground_colors[i+1+10][j+1+10]);
            glVertex3f(ground_points[j+1+10][i+1+10][0],
                       ground_points[j+1+10][i+1+10][1],
                       ground_points[j+1+10][i+1+10][2] + zoom);
            glColor3fv(ground_colors[i+1+10][j+10]);
            glVertex3f(ground_points[j+10][i+1+10][0],
                       ground_points[j+10][i+1+10][1],
                       ground_points[j+10][i+1+10][2] + zoom);			
        }
        
    }
    glEnd();
    // Which Particles
    if (fall == RAIN) {
        drawRain();
    }else if (fall == HAIL) {
        drawHail();
    }else if (fall == SNOW) {
        drawSnow();
    }	
    
    glutSwapBuffers();
}
예제 #2
0
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // „Ƕ„Ç£„É≥„Éâ„Ƕ„ÅÆËÉåÊôØ„Çí°ó„Çä„ŧ„Å∂„Å? & Èö†Èù¢Âá¶ÁêÅEÇíÂèØËÉΩ„Å´„Åô„Çã
    glEnable(GL_DEPTH_TEST);    // Èö†Èù¢Âá¶ÁêÅEñãÂß?
    glEnable(GL_NORMALIZE);
    glEnable(GL_LIGHTING);
    glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
    
    glPushMatrix();
    glTranslatef(0.0, 1.0, 0.0);
    polarview();    // „Éù„ÅE„É©„ɺ„Éì„É•„ɺ„Å∏„ÅÆ„Éì„É•„ɺ„ǧ„É≥„Ç∞§âÊèõ
    glPushMatrix();
    glLightfv(GL_LIGHT0, GL_POSITION, light0);
    glPopMatrix();
    
    shading(5);
    drawGround2D();
    
    shading(6);
    glDisable(GL_LIGHTING);
    drawGrass();
    glEnable(GL_LIGHTING);
    
    shading(5);
    drawPlant();
    
    if (rainFlag == GL_TRUE)
        drawRain();
    
    glDisable(GL_LIGHTING);
    
    glDisable(GL_DEPTH_TEST);
    
    drawCloud();
    
    if (thunderFlag == GL_TRUE && rainFlag == GL_TRUE) {
        if (lightningnum == 0 || lightningnum == 4)
            lightning();
        lightningnum++;
        if (lightningnum == 5) {
            lightningnum = 0;
            thunderFlag = GL_FALSE;
        }
        if (rand() % 10 == 4)
            fallFlag = GL_TRUE;
    }
    else thunderFlag = GL_FALSE;
    
    glPopMatrix();
    glutSwapBuffers();
}
예제 #3
0
/* 
 * 描画処理 
 */
static void
ToHeartRainEffect(Lvns *lvns)
{
    int i;

    static u_char rain_pal[RAIN_PAL_SIZE][3] = {
      {143, 199, 255},
      {159, 207, 255},
      {175, 215, 255},
      {191, 223, 255},
      {207, 231, 255},
      {223, 239, 255},
      {239, 247, 255},
      {255, 255, 255}
    };

    lvnsimage_copy_palette(lvns->background, lvns->vram);

    /* 背景 */
    lvnsimage_copy(lvns->background, lvns->vram);

    /* 背面の雨 */
    for (i = 0; i < rain_num; i++) {
      if (rain[i].pos == RAIN_BACK) drawRain(lvns, i);
    }

    /* キャラクタ立ち絵を追加 */
    LVNS->mergeCharacter(lvns);

    /* 前面の雨 */
    for (i = 0; i < rain_num; i++) {
      if (rain[i].pos == RAIN_FRONT) drawRain(lvns, i);
    }

    /* 雨用パレット追加 */
    lvnsimage_set_palette3(lvns->vram, rain_pal, TOHEART_COL_SAKURA, RAIN_PAL_SIZE);
    lvns->vram->palette_num = TOHEART_COL_SAKURA + RAIN_PAL_SIZE;
}