Пример #1
0
int render_metaballs(float time, float ltime)
{
	int obj = 0;
	float dist1 = 128 + sinf(time * M_PI * 1.0 * 0.8 * 0.4 + 0) * 95;
	float dist2 = 128 + sinf(time * M_PI * 1.2 * 0.8 * 0.4 + 1) * 95;
	float dist3 = 130 + sinf(time * M_PI * 1.3 * 0.8 * 0.4 + 2) * 95;
	float dist4 = 100 + sinf(time * M_PI * 1.4 * 0.8 * 0.4 + 3) * 95;
	float dist5 = 128 + sinf(time * M_PI * 1.5 * 0.5 * 0.4 + 4) * 95;
	float dist6 = 128 + sinf(time * M_PI * 1.6 * 0.5 * 0.4 + 5) * 95;
	float dist7 = 130 + sinf(time * M_PI * 1.7 * 0.5 * 0.4 + 6) * 95;
	float dist8 = 100 + sinf(time * M_PI * 1.8 * 0.5 * 0.4 + 7) * 95;

	if (time < 1.0)
		dist1 -= 256-256*sinf((time) * M_PI / 2);
	if (time < 3.0)
		dist2 += 256-256*sinf((time-2.0) * M_PI / 2);
	if (time < 5.0) {
		dist7 -= 256-256*sinf((time-4.0) * M_PI / 2);
		dist3 += 256-256*sinf((time-4.0) * M_PI / 2);
	}
	if (time < 7.0) {
		dist8 -= 256-256*sinf((time-6.0) * M_PI / 2);
		dist4 -= 256-256*sinf((time-6.0) * M_PI / 2);
	}

	if (ltime < 7.0)
		dist1 -= 256-256*sinf((ltime-6.0) * M_PI / 2);
	if (ltime < 5.0)
		dist2 += 256-256*sinf((ltime-4.0) * M_PI / 2);
	if (ltime < 3.0) {
		dist7 -= 256-256*sinf((ltime-2.0) * M_PI / 2);
		dist3 += 256-256*sinf((ltime-2.0) * M_PI / 2);
	}
	if (ltime < 1.0) {
		dist8 -= 256-256*sinf((ltime) * M_PI / 2);
		dist4 -= 256-256*sinf((ltime) * M_PI / 2);
	}

	memset(mbuf, 0, sizeof mbuf);

	if (ltime > 6.0)
		draw_metaball(dist1, dist5, 45);
	if (time > 2.0 && ltime > 4.0)
		draw_metaball(dist2, dist6, 10);
	if (time > 4.0 && ltime > 2.0)
		draw_metaball(dist7, dist3, 30);
	if (time > 6.0)
		draw_metaball(dist8, dist4, 70);

	olPushMatrix();
	olTranslate(-1.0f, -1.0f);
	olScale(2.0f/256.0f, 2.0f/256.0f);

	//printf("%d %d\n", mbuf[0][0], mbuf[128][128]);

	obj = trace(&mbuf[0][0], &mtmp[0][0], 20000, 256, 256, 1);

	olPopMatrix();
	return obj;
}
Пример #2
0
void render_fire(float left)
{
	int x,y,i;
	int w = 256;
	int h = 256;

	for(i=0; i<2; i++) {
		int *p = &mbuf[h-1][0];

		for (x=0;x<256;x++) {
			if (left > 0.7 && (random() % 100) > 60)
				*p++ = 1024;
			else
				*p++ = 0;
		}

		if (left > 2.0 && random() % 32 == 0)
			mbuf[h-1][random()%w] = random()%120000;


		for (y=254;y>=0;y--) {
			p = &mbuf[y][0];
			*p++ = 0;
			for (x=1;x<255;x++) {
				*p = (*p + p[w-1] + p[w] + p[w+1]) / 4;
				if (*p)
					(*p)--;
				p++;
			}
			*p++ = 0;
		}
	}

	olPushMatrix();
	olScale(1, -1);
	olTranslate(-1.0f, -1.0f);
	olScale(2.0f/256.0f, 2.0f/256.0f);

	olPushColor();
	olMultColor(C_RED+C_GREEN_I(150));
	trace(&mbuf[0][0], &mtmp[0][0], 200, 256, 235, 2);
	olPopColor();
	olPushColor();
	olMultColor(C_RED+C_GREEN_I(100));
	trace(&mbuf[0][0], &mtmp[0][0], 250, 256, 235, 2);
	olPopColor();
	olPushColor();
	olMultColor(C_RED+C_GREEN_I(50));
	trace(&mbuf[0][0], &mtmp[0][0], 300, 256, 235, 2);
	olPopColor();
	olPushColor();
	olMultColor(C_RED+C_GREEN_I(0));
	trace(&mbuf[0][0], &mtmp[0][0], 400, 256, 235, 2);
	olPopColor();
	olPopMatrix();

}
Пример #3
0
void circle(float x, float y, float r, uint32_t color)
{
	olPushMatrix();
	olPushColor();
	olMultColor(color);
	olTranslate(x, y);
	olRotate((x+y)*123);
	/*olBegin(OL_BEZIERSTRIP);
	olVertex(0, r, color);
	int i;
	for (i=0; i<2; i++) {
		olVertex(CP*r, r, C_WHITE);
		olVertex(r, CP*r, C_WHITE);
		olVertex(r, 0, C_WHITE);
		olVertex(r, -CP*r, C_WHITE);
		olVertex(CP*r, -r, C_WHITE);
		olVertex(0, -r, C_WHITE);
		olVertex(-CP*r, -r, C_WHITE);
		olVertex(-r, -CP*r, C_WHITE);
		olVertex(-r, 0, C_WHITE);
		olVertex(-r, CP*r, C_WHITE);
		olVertex(-CP*r, r, C_WHITE);
		olVertex(0, r, C_WHITE);
	}*/
/*	olVertex(0, r, color);
	olVertex(0, r, color);
	olVertex(r*0.1, r, color);
	olVertex(r*0.1, r, color);*/

	float circum = 2 * M_PI * r;
	int segments = circum / (1/30.0);
	if (segments < 50)
		segments = 50;
	int i;
	olBegin(OL_POINTS);
	olVertex(r, 0);
	for (i=0; i<=(2*segments+10); i++) {
		float w = i * M_PI * 2.0 / segments;
		uint32_t c = C_WHITE;
		if (i > 2*segments)
			c = C_GREY((10-(i-segments)) * 28);
		else if (i < 3)
			c = C_GREY(i * 85);
		olVertex(r*cosf(w), r*sinf(w));
	}
	olEnd();
	olPopColor();
	olPopMatrix();
}
Пример #4
0
static VALUE
ol_pushMatrix()
{
  olPushMatrix();
  return Qnil;
}