Exemple #1
0
int main(void)
{
 allegro_init();
 install_timer();
 install_keyboard();

 rgb_map = malloc(sizeof(RGB_MAP));
 create_rgb_table(rgb_map, desktop_palette, NULL);

 set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0);

 buffer = create_bitmap(SCREEN_W, SCREEN_H);
 set_projection_viewport(0, 0, SCREEN_W, SCREEN_H);

 init_shape();

 while (!key[KEY_ESC]) {
   move_shape();
   translate_shape();
   vsync();
   draw();
 }

 destroy_bitmap(buffer);
 free(rgb_map);
 allegro_exit();
 return 0;
}
Exemple #2
0
static void emit_spiral(bool inner)
{
	double mod;
	Vector3d *tmp;
	Vector3d translate;
	int i;

	/* initial; buffer setup */
	g_shape = g_vector_buffer[0];
	g_target = g_vector_buffer[1];

	/* create shape */
	create_shape(inner ?
		MARBLE_RUN_SEGMENT_HEIGHT/2 :
		MARBLE_RUN_SEGMENT_HEIGHT/2+MARBLE_RUN_WALL
	);

	/* remember start */
	if(inner)
		memcpy(g_vector_inner[0], g_shape, sizeof(g_vector_inner[0]));
	else
		emit_cap(g_vector_inner[0], g_shape, true);

	/* emit sculpture */
	translate = Vector3d::UnitZ()*(MARBLE_RUN_SEGMENT_HEIGHT+MARBLE_RUN_WALL)/MARBLE_RUN_RESOLUTION;
	for(i=0; i<(6*MARBLE_RUN_RESOLUTION); i++)
	{
		if(inner)
			mod = sin(i*M_PI/(((i / ((MARBLE_RUN_RESOLUTION)/10)) % 4)+1.5))/7;
		else
			mod = 0;

		/* translate all points */
		translate_shape(translate, mod);

		/* emit resulting layer */
		emit_stl_layer(inner);

		/* move to next layer */
		tmp = g_shape;
		g_shape = g_target;
		g_target = tmp;
	}

	/* remember end */
	if(inner)
		memcpy(g_vector_inner[1], g_shape, sizeof(g_vector_inner[1]));
	else
		emit_cap(g_vector_inner[1], g_shape, false);
}