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);
}
Esempio n. 2
0
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");
	}
}