static void snowMove (CompDisplay *d, SnowFlake *sf) { float fireFlySpeed = firefliesGetSnowSpeed (d); int snowUpdateDelay = firefliesGetSnowUpdateDelay (d); float xs = bezierCurve(sf->xs, sf->lifecycle); float ys = bezierCurve(sf->ys, sf->lifecycle); float zs = bezierCurve(sf->zs, sf->lifecycle); sf->x += (float)(xs * (double)snowUpdateDelay) / (100 - fireFlySpeed); sf->y += (float)(ys * (double)snowUpdateDelay) / (100 - fireFlySpeed); sf->z += (float)(zs * (double)snowUpdateDelay) / (100 - fireFlySpeed); }
static void snowMove (CompDisplay *d, SnowFlake *sf) { float tmp = 1.0f / (100.0f - starGetSnowSpeed (d)); int snowUpdateDelay = starGetSnowUpdateDelay (d); float xs = bezierCurve(sf->xs, tmp); float ys = bezierCurve(sf->ys, tmp); float zs = bezierCurve(sf->zs, tmp); sf->x += (float)(xs * (double)snowUpdateDelay) / (100 - (tmp + 0.5)); sf->y += (float)(ys * (double)snowUpdateDelay) / (100 - (tmp + 0.5)); sf->z += (float)(zs * (double)snowUpdateDelay) / (100 - (tmp + 0.5)); }
static void snowThink (SnowScreen *ss, SnowFlake *sf) { int boxing; boxing = firefliesGetScreenBoxing (ss->s->display); sf->age += 0.01; sf->lifecycle = (sf->age / 10) / sf->lifespan * (firefliesGetSnowSpeed(ss->s->display) / 10); int glowStage = (sf->lifecycle * GLOW_STAGES); sf->glowAlpha = bezierCurve(glowCurve[glowStage], sf->lifecycle); //if (sf->glowAlpha > 1.0) // sf->glowAlpha = 1.0; if ( sf->y <= -boxing || sf->y >= ss->s->height + boxing || sf->x <= -boxing || sf->x >= ss->s->width + boxing || sf->z <= -((float) firefliesGetScreenDepth (ss->s->display)) || sf->z >= 1 || sf->age > sf->lifespan) { initiateSnowFlake(ss,sf); } snowMove(ss->s->display, sf); }
Apple::Apple() { Vector3 p0 = Vector3( 0, 0, 0 ); Vector3 p1 = Vector3( -.2, -1, 0 ); Vector3 p2 = Vector3( -1.5, -.5, 0 ); Vector3 p3 = Vector3( -2, 1, 0 ); Vector3 p4 = Vector3( -3, 2.5, 0 ); Vector3 p5 = Vector3( -.5, 4, 0 ); Vector3 p6 = Vector3( 0, 2, 0 ); controlPoints.push_back( p0 ); controlPoints.push_back( p1 ); controlPoints.push_back( p2 ); controlPoints.push_back( p3 ); controlPoints.push_back( p4 ); controlPoints.push_back( p5 ); controlPoints.push_back( p6 ); bezierCurve( 10, 10, controlPoints, objPoints, objNormals, objTexCoords ); ambient[0] = 1.; ambient[1] = .0f; ambient[2] = .0f; ambient[3] = 1.0f; diffuse[0] = 1.f; diffuse[1] = .0f; diffuse[2] = .0f; diffuse[3] = 1.0f; specular[0] = 1.; specular[1] = 1.; specular[2] = 1.; specular[3] = 1.0f; shininess[0] = 128; int w = 256; texture = loadPPM( "apple.ppm", w, w ); glGenTextures( 1, textureID ); glBindTexture( GL_TEXTURE_2D, textureID[0] ); glTexImage2D( GL_TEXTURE_2D, 0, 3, w, w, 0, GL_RGB, GL_UNSIGNED_BYTE, texture ); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); }
Mushroom::Mushroom() { Vector3 p0 = Vector3( 0, 0, 0 ); Vector3 p1 = Vector3( -1, .2, 0 ); Vector3 p2 = Vector3( -1.1, .5, 0 ); Vector3 p3 = Vector3( -1, 1, 0 ); Vector3 p4 = Vector3( -.9, 1.5, 0 ); Vector3 p5 = Vector3( -2, 1.5, 0 ); Vector3 p6 = Vector3( -2.5f, 1.2f, 0 ); Vector3 p7 = Vector3( -2.8f, 1.f, 0.f ); Vector3 p8 = Vector3( -3.f, 2.f, 0.f ); Vector3 p9 = Vector3( -2.5f, 2.5f, 0.f ); Vector3 p10 = Vector3( -2.f, 3.f, 0.f ); Vector3 p11 = Vector3( -1.f, 3.5f, 0.f ); Vector3 p12 = Vector3( 0, 3.2f, 0.f ); controlPoints.push_back( p0 ); controlPoints.push_back( p1 ); controlPoints.push_back( p2 ); controlPoints.push_back( p3 ); controlPoints.push_back( p4 ); controlPoints.push_back( p5 ); controlPoints.push_back( p6 ); controlPoints.push_back( p7 ); controlPoints.push_back( p8 ); controlPoints.push_back( p9 ); controlPoints.push_back( p10 ); controlPoints.push_back( p11 ); controlPoints.push_back( p12 ); bezierCurve( 10, 20, controlPoints, objPoints, objNormals, objTexCoords ); ambient[0] = .5f; ambient[1] = .5f; ambient[2] = .5f; ambient[3] = 1.0f; diffuse[0] = .82f; diffuse[1] = .41f; diffuse[2] = .12f; diffuse[3] = 1.0f; specular[0] = 0; specular[1] = 0; specular[2] = 0; specular[3] = 1.0f; shininess[0] = 0; int w = 256; texture = loadPPM( "bowl.ppm", w, w ); glGenTextures( 1, textureID ); glBindTexture( GL_TEXTURE_2D, textureID[0] ); glTexImage2D( GL_TEXTURE_2D, 0, 3, w, w, 0, GL_RGB, GL_UNSIGNED_BYTE, texture ); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); }
Bowl::Bowl() { Vector3 p0 = Vector3( 0, 0, 0 ); Vector3 p1 = Vector3( -3, .3, 0 ); Vector3 p2 = Vector3( -5, .3, 0 ); Vector3 p3 = Vector3( -5, 4, 0 ); Vector3 p4 = Vector3( -4.8, 5, 0 ); Vector3 p5 = Vector3( -4.8, 3, 0 ); Vector3 p6 = Vector3( -3.5, 2, 0 ); Vector3 p7 = Vector3( -2.f, .5f, 0.f ); Vector3 p8 = Vector3( -1.f, .5f, 0.f ); Vector3 p9 = Vector3( 0.f, .5, 0.f ); controlPoints.push_back( p0 ); controlPoints.push_back( p1 ); controlPoints.push_back( p2 ); controlPoints.push_back( p3 ); controlPoints.push_back( p4 ); controlPoints.push_back( p5 ); controlPoints.push_back( p6 ); controlPoints.push_back( p7 ); controlPoints.push_back( p8 ); controlPoints.push_back( p9 ); bezierCurve( 10, 100, controlPoints, objPoints, objNormals, objTexCoords ); ambient[0] = .3f; ambient[1] = .3f; ambient[2] = .3f; ambient[3] = 1.0f; diffuse[0] = .8f; diffuse[1] = .5f; diffuse[2] = .24f; diffuse[3] = 1.0f; specular[0] = 0; specular[1] = 0; specular[2] = 0; specular[3] = 1.0f; shininess[0] = 0; int w = 256; texture = loadPPM( "bowl.ppm", w, w ); glGenTextures( 1, textureID ); glBindTexture( GL_TEXTURE_2D, textureID[0] ); glTexImage2D( GL_TEXTURE_2D, 0, 3, w, w, 0, GL_RGB, GL_UNSIGNED_BYTE, texture ); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); }
static void elementMove (CompDisplay *display, element *ele, int ms) { float autumnSpeed = elementsGetAutumnSpeed (display)/30.0f; float ffSpeed = elementsGetFireflySpeed (display) / 700.0f; float snowSpeed = elementsGetSnowSpeed (display) / 500.0f; float starsSpeed = elementsGetStarsSpeed (display) / 500.0f; float bubblesSpeed = (100.0 - elementsGetViscosity (display))/30.0f; float globalSpeed = elementsGetGlobalSpeed (display) * ms; if (ele->type == 0) { ele->x += (ele->autumnFloat[0][ele->autumnAge[0]] * (float) globalSpeed) * 0.0125; ele->y += (ele->autumnFloat[1][ele->autumnAge[1]] * (float) globalSpeed) * 0.0125 + autumnSpeed; ele->z += (ele->dz[0] * (float) globalSpeed) * autumnSpeed / 100.0; ele->rAngle += ((float) globalSpeed) / (10.1f - ele->rSpeed); ele->autumnAge[0] += ele->autumnChange; ele->autumnAge[1] += 1; if (ele->autumnAge[1] >= MAX_AUTUMN_AGE) { ele->autumnAge[1] = 0; } if (ele->autumnAge[0] >= MAX_AUTUMN_AGE) { ele->autumnAge[0] = MAX_AUTUMN_AGE - 1; ele->autumnChange = -1; } if (ele->autumnAge[0] <= -1) { ele->autumnAge[0] = 0; ele->autumnChange = 1; } } else if (ele->type == 1) { ele->age += 0.01; ele->lifecycle = (ele->age / 10) / ele->lifespan * (ffSpeed * 70); int glowStage = (ele->lifecycle * GLOW_STAGES); ele->glowAlpha = bezierCurve(glowCurve[glowStage], ele->lifecycle, ele->type); float xs = bezierCurve(ele->dx, ele->lifecycle, ele->type); float ys = bezierCurve(ele->dy, ele->lifecycle, ele->type); float zs = bezierCurve(ele->dz, ele->lifecycle, ele->type); ele->x += (float)(xs * (double)globalSpeed) * ffSpeed; ele->y += (float)(ys * (double)globalSpeed) * ffSpeed; ele->z += (float)(zs * (double)globalSpeed) * ffSpeed; } else if (ele->type == 2) { ele->x += (ele->dx[0] * (float) ms) * snowSpeed; ele->y += (ele->dy[0] * (float) ms) * snowSpeed; ele->z += (ele->dz[0] * (float) ms) * snowSpeed; ele->rAngle += ((float) ms) / (10.1f - ele->rSpeed); } else if (ele->type == 3) { float tmp = 1.0f / (100.0f - starsSpeed); float xs = bezierCurve(ele->dx, tmp, ele->type); float ys = bezierCurve(ele->dy, tmp, ele->type); float zs = bezierCurve(ele->dz, tmp, ele->type); ele->x += (float)(xs * (double)globalSpeed) * starsSpeed; ele->y += (float)(ys * (double)globalSpeed) * starsSpeed; ele->z += (float)(zs * (double)globalSpeed) * starsSpeed; } else if (ele->type == 4) { ele->x += (ele->autumnFloat[0][ele->autumnAge[0]] * (float) globalSpeed) * 0.125; ele->y += (ele->dy[0] * (float) globalSpeed) * bubblesSpeed; ele->z += (ele->dz[0] * (float) globalSpeed) * bubblesSpeed / 100.0; ele->rAngle += ((float) globalSpeed) / (10.1f - ele->rSpeed); ele->autumnAge[0] += ele->autumnChange; if (ele->autumnAge[0] >= MAX_AUTUMN_AGE) { ele->autumnAge[0] = MAX_AUTUMN_AGE - 1; ele->autumnChange = -9; } if (ele->autumnAge[0] <= -1) { ele->autumnAge[0] = 0; ele->autumnChange = 9; } } else { compLogMessage ("Elements", CompLogLevelWarn, "Not a valid element type"); } }