#define use_fatal_failure #define use_mathematics #define use_png_library #include "xtandard.h" #include "xector.h" #include "xormat.h" #include "xarticle.h" #include "xhape.h" #include "xision.h" static void print_shape (shape_node * sh) { print ("shape data:\n"); print ("v = %i // %i\n", sh->vertex_count, sh->vertex_limit); print ("i = %i // %i\n", sh->index_count, sh->index_limit); } static void render_shape (vision_structure * vision, shape_node * sh) { //~uint vc = sh->vertex_count; //~uint ic = sh->index_count; //~float va [100] = { 0 }; //~uint ia [100] = { 0 }; //~for (uint i = 0; i < vc; i += 5) { //~va [i+0] = sh->vertex_array [i/5]->x; //~va [i+1] = sh->vertex_array [i/5]->y; //~va [i+2] = sh->vertex_array [i/5]->z; //~va [i+3] = sh->unwrap_array [i/5]->x; //~va [i+4] = sh->unwrap_array [i/5]->y; //~} //~for (uint i = 0; i < ic; i += 5) { //~ia [i] = sh->index_array [i]; //~} vision_render_base (vision, sh->vertex_count, sh->vertex_array, sh->index_count, sh->index_array, 0, 0xff7733ff); } int main (void) { //~vector_3 as = { +2,0,0 }; //~vector_3 bs = { -2,0,0 }; //~vector_3 cs = { 0,+2,0 }; //~vector_3 ds = { 0,-2,0 }; //~vector_3 es = { 0,0,+2 }; //~vector_3 fs = { 0,0,-2 }; shape_node * a = shape_tetrahedron_colour (+2,0,0, 1, 0xff7733ff); shape_node * b = shape_tetrahedron_colour (-2,0,0, 1, 0xff7733ff); shape_node * c = shape_tetrahedron_colour (0,+2,0, 1, 0xff7733ff); shape_node * d = shape_tetrahedron_colour (0,-2,0, 1, 0xff7733ff); shape_node * e = shape_tetrahedron_colour (0,0,+2, 1, 0xff7733ff); shape_node * f = shape_tetrahedron_colour (0,0,-2, 1, 0xff7733ff); //~print ("> v = %i // %i\n", a->vertex_count, a->vertex_limit); //~print ("> i = %i // %i\n", a->index_count, a->index_limit); print_shape (a); vision_structure * vision = vision_initialize (60, 60, false, 6000, 3000, 256); particle_structure * particle = particle_initialize (1024); uint i0 = vision_sprite_import (vision, "xui/goblin/end_turn_button.png"); uint i1 = vision_sprite_import (vision, "xui/goblin/separator_center.png"); uint i2 = vision_sprite_import (vision, "xui/goblin/separator_left.png"); uint i3 = vision_sprite_import (vision, "xui/goblin/separator_middle.png"); uint i4 = vision_sprite_import (vision, "xui/goblin/separator_right.png"); vision_configure (vision, 800, 600, "Xube"); while (vision->active == true) { if (vision->signal [signal_q] == true) break; if (vision->signal [signal_i] == true) { vision_change_field_of_view (vision, + 0.1f); } if (vision->signal [signal_o] == true) { vision_change_field_of_view (vision, - 0.1f); } if (vision->signal [signal_a] == true) { vision_change_translation (vision, + 0.1f, 0.0f, 0.0f); } if (vision->signal [signal_d] == true) { vision_change_translation (vision, - 0.1f, 0.0f, 0.0f); } if (vision->signal [signal_s] == true) { vision_change_translation (vision, 0.0f, 0.0f, + 0.1f); } if (vision->signal [signal_w] == true) { vision_change_translation (vision, 0.0f, 0.0f, - 0.1f); } //~vision_change_rotation (vision, 0.0f, xxx); if (vision->signal [signal_1] == true) { vector_3 p = {0,0,0}; vector_3 t = {0,0,0}; vector_3 s = {0.1f,0.1f,0.1f}; particle_append (particle, 0, 1.0f, 0, 0, & p, & t, & s); } if (vision->signal [signal_2] == true) { vector_3 p = {1,1,1}; particle_effect_splash (particle, 0, 2.0f, 0, 0, & p, 60, 0.03, 3); } if (vision->signal [signal_3] == true) { vector_3 p = {1,1,1}; particle_effect_evaporate (particle, 0, 2.0f, 0, 0, & p, 20, 0.001, 3); } render_shape (vision, a); render_shape (vision, b); render_shape (vision, c); render_shape (vision, d); render_shape (vision, e); render_shape (vision, f); //~float t0 [] = {1,0,0,0,0,1,0,1,0}; //~float t1 [] = {1,0,0,0,0,1,0,1,0}; //~float t2 [] = {1,0,0,0,0,1,0,1,0}; //~float t3 [] = {1,0,0,0,0,1,0,1,0}; //~float t4 [] = {1,0,0,0,0,1,0,1,0}; //~float t5 [] = {1,0,0,0,0,1,0,1,0}; //~vision_render_triangle (vision, t0, 0xff7733ff); //~vision_render_triangle (vision, t1, 0xff7733ff); //~vision_render_triangle (vision, t2, 0xff7733ff); //~vision_render_triangle (vision, t3, 0xff7733ff); //~vision_render_triangle (vision, t4, 0xff7733ff); //~vision_render_triangle (vision, t5, 0xff7733ff); //~for (uint i = 0; i < particle->count; ++i) { //~Vector3 vector = {particle->position [i]->x, particle->position [i]->y, particle->position [i]->z}; //~DrawBillboard (camera, texture, vector, 1, RED); //~} //~float va [] = { //~-1, -1, 0, 0, 1, 1, 1, 1, 1, //~-1, +1, 0, 0, 0, 1, 1, 1, 1, //~+1, +1, 0, 1, 0, 1, 1, 1, 1, //~+1, -1, 0, 1, 1, 1, 1, 1, 1 //~}; //~uint ia [] = { 2, 1, 0, 3, 2, 1 }; //~vision_render_base (vision, sizeof(va)/4, va, sizeof(ia)/4, ia, 1, 0xff7733ff); vision_synchronize (vision, 0xff); particle_synchronize (particle, 60); } png_image_export ("meme.png", vision->spritesheet_data, 256, 256); particle = particle_deinitialize (particle); vision = vision_deinitialize (vision); return (0); }