Changeset 3934
- Timestamp:
- 11/18/09 14:43:02 (4 years ago)
- File:
-
- 1 edited
-
neercs/trunk/src/wm.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/wm.c
r3932 r3934 437 437 438 438 /* 3D Cube. Yeah I know, it's a mess. Just look anywhere else. */ 439 static void draw_face(caca_canvas_t * cv, 440 int p1x, int p1y, 441 int p2x, int p2y, 442 int p3x, int p3y, 443 int p4x, int p4y, caca_canvas_t * tex, int color) 444 { 445 if (get_direction(p1x, p1y, p2x, p2y, p3x, p3y) >= 0) 446 { 447 int coords[6]; 448 float uv[6]; 449 coords[0] = p1x; 450 coords[1] = p1y; 451 coords[2] = p2x; 452 coords[3] = p2y; 453 coords[4] = p3x; 454 coords[5] = p3y; 455 uv[0] = 1; 456 uv[1] = 1; 457 uv[2] = 0; 458 uv[3] = 1; 459 uv[4] = 0; 460 uv[5] = 0; 461 #if defined HAVE_CACA_TRIANGLE_TEXTURING 462 caca_fill_triangle_textured(cv, coords, tex, uv); 463 #endif 464 465 coords[0] = p1x; 466 coords[1] = p1y; 467 coords[2] = p3x; 468 coords[3] = p3y, coords[4] = p4x; 469 coords[5] = p4y; 470 uv[0] = 1; 471 uv[1] = 1; 472 uv[2] = 0; 473 uv[3] = 0; 474 uv[4] = 1; 475 uv[5] = 0; 476 #if defined HAVE_CACA_TRIANGLE_TEXTURING 477 caca_fill_triangle_textured(cv, coords, tex, uv); 478 #endif 479 caca_set_color_ansi(cv, color, CACA_BLACK); 480 caca_draw_thin_line(cv, p1x, p1y, p2x, p2y); 481 caca_draw_thin_line(cv, p2x, p2y, p3x, p3y); 482 caca_draw_thin_line(cv, p3x, p3y, p4x, p4y); 483 caca_draw_thin_line(cv, p4x, p4y, p1x, p1y); 484 } 485 } 486 487 #define CUBE_TIME 1000000 439 488 void wm_refresh_cube(struct screen_list *screen_list) 440 489 { … … 448 497 else 449 498 { 450 451 #define CUBE_TIME 1000000452 499 453 500 long long unsigned int cur_time = get_us() - screen_list->last_switch; … … 472 519 {1, 1, 1}, 473 520 521 {-1, -1, -1}, 474 522 {-1, -1, 1}, 475 {-1, -1, -1},523 {-1, 1, 1}, 476 524 {-1, 1, -1}, 477 {-1, 1, 1},478 525 }; 479 526 480 527 float cube_transformed[12][3]; 481 528 float cube_projected[12][2]; … … 488 535 angle = -angle; 489 536 537 float sina = sin(angle); 538 float cosa = cos(angle); 539 490 540 for (i = 0; i < 12; i++) 491 541 { 492 cube_transformed[i][2] = 493 cube[i][2] * cos(angle) - cube[i][0] * sin(angle); 494 cube_transformed[i][0] = 495 cube[i][2] * sin(angle) + cube[i][0] * cos(angle); 542 cube_transformed[i][2] = cube[i][2] * cosa - cube[i][0] * sina; 543 cube_transformed[i][0] = cube[i][2] * sina + cube[i][0] * cosa; 496 544 cube_transformed[i][1] = cube[i][1]; 497 545 … … 515 563 caca_clear_canvas(screen_list->cv); 516 564 517 #if defined HAVE_CACA_TRIANGLE_TEXTURING518 519 565 caca_canvas_t *first = 520 566 screen_list->screen[screen_list->prevpty]->cv; 521 567 caca_canvas_t *second = screen_list->screen[screen_list->pty]->cv; 522 568 523 int coords[6]; 524 525 float uv[6]; 526 527 528 if (get_direction(cube_projected[0][0], cube_projected[0][1], 529 cube_projected[1][0], cube_projected[1][1], 530 cube_projected[2][0], cube_projected[2][1]) >= 0) 531 { 532 coords[0] = cube_projected[0][0]; 533 coords[1] = cube_projected[0][1]; 534 coords[2] = cube_projected[1][0]; 535 coords[3] = cube_projected[1][1]; 536 coords[4] = cube_projected[2][0]; 537 coords[5] = cube_projected[2][1]; 538 uv[0] = 1; 539 uv[1] = 1; 540 uv[2] = 0; 541 uv[3] = 1; 542 uv[4] = 0; 543 uv[5] = 0; 544 caca_fill_triangle_textured(screen_list->cv, 545 coords, first, uv); 546 547 coords[0] = cube_projected[0][0]; 548 coords[1] = cube_projected[0][1]; 549 coords[2] = cube_projected[2][0]; 550 coords[3] = cube_projected[2][1], 551 coords[4] = cube_projected[3][0]; 552 coords[5] = cube_projected[3][1]; 553 uv[0] = 1; 554 uv[1] = 1; 555 uv[2] = 0; 556 uv[3] = 0; 557 uv[4] = 1; 558 uv[5] = 0; 559 caca_fill_triangle_textured(screen_list->cv, 560 coords, first, uv); 561 caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, 562 CACA_BLACK); 563 caca_draw_thin_line(screen_list->cv, cube_projected[0][0], 564 cube_projected[0][1], cube_projected[1][0], 565 cube_projected[1][1]); 566 caca_draw_thin_line(screen_list->cv, cube_projected[1][0], 567 cube_projected[1][1], cube_projected[2][0], 568 cube_projected[2][1]); 569 caca_draw_thin_line(screen_list->cv, cube_projected[2][0], 570 cube_projected[2][1], cube_projected[3][0], 571 cube_projected[3][1]); 572 caca_draw_thin_line(screen_list->cv, cube_projected[3][0], 573 cube_projected[3][1], cube_projected[0][0], 574 cube_projected[0][1]); 575 } 569 570 draw_face(screen_list->cv, 571 cube_projected[0][0], cube_projected[0][1], 572 cube_projected[1][0], cube_projected[1][1], 573 cube_projected[2][0], cube_projected[2][1], 574 cube_projected[3][0], cube_projected[3][1], 575 first, CACA_LIGHTGREEN); 576 577 576 578 if (screen_list->cube.side) 577 579 { 578 if (get_direction(cube_projected[4][0], cube_projected[4][1], 579 cube_projected[5][0], cube_projected[5][1], 580 cube_projected[6][0], 581 cube_projected[6][1]) >= 0) 582 { 583 coords[0] = cube_projected[4][0]; 584 coords[1] = cube_projected[4][1]; 585 coords[2] = cube_projected[5][0]; 586 coords[3] = cube_projected[5][1]; 587 coords[4] = cube_projected[6][0]; 588 coords[5] = cube_projected[6][1]; 589 uv[0] = 1; 590 uv[1] = 1; 591 uv[2] = 0; 592 uv[3] = 1; 593 uv[4] = 0; 594 uv[5] = 0; 595 596 597 caca_fill_triangle_textured(screen_list->cv, 598 coords, second, uv); 599 coords[0] = cube_projected[4][0]; 600 coords[1] = cube_projected[4][1]; 601 coords[2] = cube_projected[6][0]; 602 coords[3] = cube_projected[6][1]; 603 coords[4] = cube_projected[7][0]; 604 coords[5] = cube_projected[7][1]; 605 uv[0] = 1; 606 uv[1] = 1; 607 uv[2] = 0; 608 uv[3] = 0; 609 uv[4] = 1; 610 uv[5] = 0; 611 caca_fill_triangle_textured(screen_list->cv, 612 coords, second, uv); 613 caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 614 615 caca_draw_thin_line(screen_list->cv, 616 cube_projected[4][0], 617 cube_projected[4][1], 618 cube_projected[5][0], 619 cube_projected[5][1]); 620 caca_draw_thin_line(screen_list->cv, cube_projected[5][0], 621 cube_projected[5][1], 622 cube_projected[6][0], 623 cube_projected[6][1]); 624 caca_draw_thin_line(screen_list->cv, cube_projected[6][0], 625 cube_projected[6][1], 626 cube_projected[7][0], 627 cube_projected[7][1]); 628 caca_draw_thin_line(screen_list->cv, cube_projected[7][0], 629 cube_projected[7][1], 630 cube_projected[4][0], 631 cube_projected[4][1]); 632 } 580 draw_face(screen_list->cv, 581 cube_projected[4][0], cube_projected[4][1], 582 cube_projected[5][0], cube_projected[5][1], 583 cube_projected[6][0], cube_projected[6][1], 584 cube_projected[7][0], cube_projected[7][1], 585 second, CACA_RED); 633 586 } 634 587 else 635 588 { 636 if (get_direction(cube_projected[9][0], cube_projected[9][1], 637 cube_projected[8][0], cube_projected[8][1], 638 cube_projected[10][0], 639 cube_projected[10][1]) > 0.0f) 640 { 641 coords[0] = cube_projected[9][0]; 642 coords[1] = cube_projected[9][1]; 643 coords[2] = cube_projected[8][0]; 644 coords[3] = cube_projected[8][1]; 645 coords[4] = cube_projected[10][0]; 646 coords[5] = cube_projected[10][1]; 647 uv[0] = 1; 648 uv[1] = 1; 649 uv[2] = 0; 650 uv[3] = 1; 651 uv[4] = 1; 652 uv[5] = 0; 653 654 caca_fill_triangle_textured(screen_list->cv, 655 coords, second, uv); 656 657 coords[0] = cube_projected[8][0]; 658 coords[1] = cube_projected[8][1]; 659 coords[2] = cube_projected[10][0]; 660 coords[3] = cube_projected[10][1]; 661 coords[4] = cube_projected[11][0]; 662 coords[5] = cube_projected[11][1]; 663 uv[0] = 0; 664 uv[1] = 1; 665 uv[2] = 1; 666 uv[3] = 0; 667 uv[4] = 0; 668 uv[5] = 0; 669 670 caca_fill_triangle_textured(screen_list->cv, 671 coords, second, uv); 672 caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 673 caca_draw_thin_line(screen_list->cv, 674 cube_projected[8][0], 675 cube_projected[8][1], 676 cube_projected[9][0], 677 cube_projected[9][1]); 678 caca_draw_thin_line(screen_list->cv, cube_projected[9][0], 679 cube_projected[9][1], 680 cube_projected[10][0], 681 cube_projected[10][1]); 682 caca_draw_thin_line(screen_list->cv, cube_projected[10][0], 683 cube_projected[10][1], 684 cube_projected[11][0], 685 cube_projected[11][1]); 686 caca_draw_thin_line(screen_list->cv, cube_projected[11][0], 687 cube_projected[11][1], 688 cube_projected[8][0], 689 cube_projected[8][1]); 690 } 589 draw_face(screen_list->cv, 590 cube_projected[8][0], cube_projected[8][1], 591 cube_projected[9][0], cube_projected[9][1], 592 cube_projected[10][0], cube_projected[10][1], 593 cube_projected[11][0], cube_projected[11][1], 594 second, CACA_RED); 691 595 } 692 #else693 #warning temporary : HAVE_CACA_TRIANGLE_TEXTURING is not defined694 #endif695 596 696 597 screen_list->changed = 1;
Note: See TracChangeset
for help on using the changeset viewer.
