Exemple #1
0
int main()
{
    int exit_flag = 0, i;

    VERTEX cube[8];
    cube[0].local = (_3D) {
        -10.0, -10.0, 0.0
    };
    cube[1].local = (_3D) {
        10.0, -10.0, 0.0
    };
    cube[2].local = (_3D) {
        10.0, 10.0, 0.0
    };
    cube[3].local = (_3D) {
        -10.0, 10.0, -10.0
    };

    cube[4].local = (_3D) {
        -10.0, -10.0, 10.0
    };
    cube[5].local = (_3D) {
        10.0, -10.0, 10.0
    };
    cube[6].local = (_3D) {
        10.0, 10.0, 10.0
    };
    cube[7].local = (_3D) {
        -10.0, 10.0, 10.0
    };

    _3D world_pos = {0.0, 0.0, 100.0};

    init();


    printf("D1:=%f;\nD2:=%f;\nD3:=%f;\nD4:=%f;\n", dist_3d(cube[0].local, cube[1].local),
           dist_3d(cube[1].local, cube[2].local),
           dist_3d(cube[2].local, cube[3].local),
           dist_3d(cube[3].local, cube[0].local));

    readkey();

    int xang, yang, zang;

    while(!exit_flag)
    {
        rest(10);

        xang = 0;
        yang = 0;
        zang = 0;

        if(keypressed())
        {
            if(key[KEY_ESC]) {
                exit_flag = 1;
            }
            if(key[KEY_A]) {
                world_pos.x -= 1.0;
            }
            if(key[KEY_D]) {
                world_pos.x += 1.0;
            }
            if(key[KEY_W]) {
                world_pos.z += 3.0;
            }
            if(key[KEY_S]) {
                world_pos.z -= 3.0;
            }
            if(key[KEY_UP]) {
                xang = 3;
            }
            if(key[KEY_DOWN]) {
                xang = -3;
            }
            if(key[KEY_RIGHT]) {
                yang = 3;
            }
            if(key[KEY_LEFT]) {
                yang = -3;
            }
        }

        clear_to_color(buffer, 0);

        for(i = 0; i < 8; i++)
        {
            rotate_vertex(&cube[i], xang, yang, zang);
            project_vertex(&cube[i], world_pos);
        }
        /*
            printf("%f, %f, %f\n", dist_3d(cube[0].local, cube[1].local),
                                 dist_3d(cube[1].local, cube[2].local),
                                 dist_3d(cube[2].local, cube[0].local));
        */

        printf("Sx1:=%f;\nSy1:=%f;\nSx2:=%f;\nSy2:=%f;\nSx3:=%f;\nSy3:=%f;\nSx4:=%f;\nSy4:=%f;\n", cube[0].screen[0].x, cube[0].screen[0].y,
               cube[1].screen[0].x, cube[1].screen[0].y,
               cube[2].screen[0].x, cube[2].screen[0].y, cube[3].screen[0].x, cube[3].screen[0].y);

        printf("t = %f\n\n\n\n\n\n", (cube[0].local.x + world_pos.x) / cube[0].screen[0].x);

        /*printf("{%f %f %f}\n", cube[0].local.x + world_pos.x,
         cube[0].local.y + world_pos.y, cube[0].local.z + world_pos.z);
        */

        _2d_line(cube[0].screen[0], cube[1].screen[0], RED);
        _2d_line(cube[1].screen[0], cube[2].screen[0], RED);
        _2d_line(cube[2].screen[0], cube[3].screen[0], RED);
        _2d_line(cube[3].screen[0], cube[0].screen[0], RED);

        /*
           _2d_line(cube[4].screen[0], cube[5].screen[0], RED);
           _2d_line(cube[5].screen[0], cube[6].screen[0], RED);
           _2d_line(cube[6].screen[0], cube[7].screen[0], RED);
           _2d_line(cube[7].screen[0], cube[4].screen[0], RED);

           _2d_line(cube[0].screen[0], cube[4].screen[0], RED);
           _2d_line(cube[1].screen[0], cube[5].screen[0], RED);
           _2d_line(cube[2].screen[0], cube[6].screen[0], RED);
           _2d_line(cube[3].screen[0], cube[7].screen[0], RED);
        */

        /*
           _2d_line(cube[0].screen[1], cube[1].screen[1], BLUE);
           _2d_line(cube[1].screen[1], cube[2].screen[1], BLUE);
           _2d_line(cube[2].screen[1], cube[3].screen[1], BLUE);
           _2d_line(cube[3].screen[1], cube[0].screen[1], BLUE);

           _2d_line(cube[4].screen[1], cube[5].screen[1], BLUE);
           _2d_line(cube[5].screen[1], cube[6].screen[1], BLUE);
           _2d_line(cube[6].screen[1], cube[7].screen[1], BLUE);
           _2d_line(cube[7].screen[1], cube[4].screen[1], BLUE);

           _2d_line(cube[0].screen[1], cube[4].screen[1], BLUE);
           _2d_line(cube[1].screen[1], cube[5].screen[1], BLUE);
           _2d_line(cube[2].screen[1], cube[6].screen[1], BLUE);
           _2d_line(cube[3].screen[1], cube[7].screen[1], BLUE);
        */

        blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
    }

    destroy_bitmap(buffer);
    return 0;
}
Exemple #2
0
int main()
{
 int exit_flag = 0, i;

 VERTEX cube[8];
 cube[0].local = (_3D){-10.0, -10.0, -10.0};
 cube[1].local = (_3D){10.0, -10.0, -10.0};
 cube[2].local = (_3D){10.0, 10.0, -10.0};
 cube[3].local = (_3D){-10.0, 10.0, -10.0};
 cube[4].local = (_3D){-10.0, -10.0, 10.0};
 cube[5].local = (_3D){10.0, -10.0, 10.0};
 cube[6].local = (_3D){10.0, 10.0, 10.0};
 cube[7].local = (_3D){-10.0, 10.0, 10.0};

 _3D world_pos = {0.0, 0.0, 100.0};

 init();

 while(!exit_flag)
  {
   rest(10);

   if(keypressed())
    {
     if(key[KEY_ESC]) { exit_flag = 1; }
     if(key[KEY_LEFT]) { world_pos.x -= 1.0; }
     if(key[KEY_RIGHT]) { world_pos.x += 1.0; }
     if(key[KEY_UP]) { world_pos.z += 3.0; }
     if(key[KEY_DOWN]) { world_pos.z -= 3.0; }
    }

   clear_to_color(buffer, 0);

   for(i = 0; i < 8; i++)
    {
     rotate_vertex(&cube[i], 1, 2, 3);
     project_vertex(&cube[i], world_pos);
    }

   _2d_line(cube[0].screen[0], cube[1].screen[0], RED);
   _2d_line(cube[1].screen[0], cube[2].screen[0], RED);
   _2d_line(cube[2].screen[0], cube[3].screen[0], RED);
   _2d_line(cube[3].screen[0], cube[0].screen[0], RED);

   _2d_line(cube[4].screen[0], cube[5].screen[0], RED);
   _2d_line(cube[5].screen[0], cube[6].screen[0], RED);
   _2d_line(cube[6].screen[0], cube[7].screen[0], RED);
   _2d_line(cube[7].screen[0], cube[4].screen[0], RED);

   _2d_line(cube[0].screen[0], cube[4].screen[0], RED);
   _2d_line(cube[1].screen[0], cube[5].screen[0], RED);
   _2d_line(cube[2].screen[0], cube[6].screen[0], RED);
   _2d_line(cube[3].screen[0], cube[7].screen[0], RED);

   _2d_line(cube[0].screen[1], cube[1].screen[1], BLUE);
   _2d_line(cube[1].screen[1], cube[2].screen[1], BLUE);
   _2d_line(cube[2].screen[1], cube[3].screen[1], BLUE);
   _2d_line(cube[3].screen[1], cube[0].screen[1], BLUE);

   _2d_line(cube[4].screen[1], cube[5].screen[1], BLUE);
   _2d_line(cube[5].screen[1], cube[6].screen[1], BLUE);
   _2d_line(cube[6].screen[1], cube[7].screen[1], BLUE);
   _2d_line(cube[7].screen[1], cube[4].screen[1], BLUE);

   _2d_line(cube[0].screen[1], cube[4].screen[1], BLUE);
   _2d_line(cube[1].screen[1], cube[5].screen[1], BLUE);
   _2d_line(cube[2].screen[1], cube[6].screen[1], BLUE);
   _2d_line(cube[3].screen[1], cube[7].screen[1], BLUE);

   blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
  }

 destroy_bitmap(buffer);
 return 0;
}
//############################################################################
inline LaserBoy_3D_double rotate_vertex_on_coordinates(LaserBoy_3D_double p1, LaserBoy_3D_double p2, LaserBoy_3D_double a)
{
    return rotate_vertex(p1 - p2, a) + p2;
}