455 m.m[0][0] = m1.m[0][0] + m2.m[0][0];
456 m.m[0][1] = m1.m[0][1] + m2.m[0][1];
457 m.m[0][2] = m1.m[0][2] + m2.m[0][2];
458 m.m[0][3] = m1.m[0][3] + m2.m[0][3];
459 m.m[1][0] = m1.m[1][0] + m2.m[1][0];
460 m.m[1][1] = m1.m[1][1] + m2.m[1][1];
461 m.m[1][2] = m1.m[1][2] + m2.m[1][2];
462 m.m[1][3] = m1.m[1][3] + m2.m[1][3];
463 m.m[2][0] = m1.m[2][0] + m2.m[2][0];
464 m.m[2][1] = m1.m[2][1] + m2.m[2][1];
465 m.m[2][2] = m1.m[2][2] + m2.m[2][2];
466 m.m[2][3] = m1.m[2][3] + m2.m[2][3];
467 m.m[3][0] = m1.m[3][0] + m2.m[3][0];
468 m.m[3][1] = m1.m[3][1] + m2.m[3][1];
469 m.m[3][2] = m1.m[3][2] + m2.m[3][2];
470 m.m[3][3] = m1.m[3][3] + m2.m[3][3];
471 m.flagBits = QDoubleMatrix4x4::General;
478 m.m[0][0] = m1.m[0][0] - m2.m[0][0];
479 m.m[0][1] = m1.m[0][1] - m2.m[0][1];
480 m.m[0][2] = m1.m[0][2] - m2.m[0][2];
481 m.m[0][3] = m1.m[0][3] - m2.m[0][3];
482 m.m[1][0] = m1.m[1][0] - m2.m[1][0];
483 m.m[1][1] = m1.m[1][1] - m2.m[1][1];
484 m.m[1][2] = m1.m[1][2] - m2.m[1][2];
485 m.m[1][3] = m1.m[1][3] - m2.m[1][3];
486 m.m[2][0] = m1.m[2][0] - m2.m[2][0];
487 m.m[2][1] = m1.m[2][1] - m2.m[2][1];
488 m.m[2][2] = m1.m[2][2] - m2.m[2][2];
489 m.m[2][3] = m1.m[2][3] - m2.m[2][3];
490 m.m[3][0] = m1.m[3][0] - m2.m[3][0];
491 m.m[3][1] = m1.m[3][1] - m2.m[3][1];
492 m.m[3][2] = m1.m[3][2] - m2.m[3][2];
493 m.m[3][3] = m1.m[3][3] - m2.m[3][3];
494 m.flagBits = QDoubleMatrix4x4::General;
500 int flagBits = m1.flagBits | m2.flagBits;
501 if (flagBits < QDoubleMatrix4x4::Rotation2D) {
503 m.m[3][0] +=
m.m[0][0] * m2.m[3][0];
504 m.m[3][1] +=
m.m[1][1] * m2.m[3][1];
505 m.m[3][2] +=
m.m[2][2] * m2.m[3][2];
507 m.m[0][0] *= m2.m[0][0];
508 m.m[1][1] *= m2.m[1][1];
509 m.m[2][2] *= m2.m[2][2];
510 m.flagBits = flagBits;
515 m.m[0][0] = m1.m[0][0] * m2.m[0][0]
516 + m1.m[1][0] * m2.m[0][1]
517 + m1.m[2][0] * m2.m[0][2]
518 + m1.m[3][0] * m2.m[0][3];
519 m.m[0][1] = m1.m[0][1] * m2.m[0][0]
520 + m1.m[1][1] * m2.m[0][1]
521 + m1.m[2][1] * m2.m[0][2]
522 + m1.m[3][1] * m2.m[0][3];
523 m.m[0][2] = m1.m[0][2] * m2.m[0][0]
524 + m1.m[1][2] * m2.m[0][1]
525 + m1.m[2][2] * m2.m[0][2]
526 + m1.m[3][2] * m2.m[0][3];
527 m.m[0][3] = m1.m[0][3] * m2.m[0][0]
528 + m1.m[1][3] * m2.m[0][1]
529 + m1.m[2][3] * m2.m[0][2]
530 + m1.m[3][3] * m2.m[0][3];
532 m.m[1][0] = m1.m[0][0] * m2.m[1][0]
533 + m1.m[1][0] * m2.m[1][1]
534 + m1.m[2][0] * m2.m[1][2]
535 + m1.m[3][0] * m2.m[1][3];
536 m.m[1][1] = m1.m[0][1] * m2.m[1][0]
537 + m1.m[1][1] * m2.m[1][1]
538 + m1.m[2][1] * m2.m[1][2]
539 + m1.m[3][1] * m2.m[1][3];
540 m.m[1][2] = m1.m[0][2] * m2.m[1][0]
541 + m1.m[1][2] * m2.m[1][1]
542 + m1.m[2][2] * m2.m[1][2]
543 + m1.m[3][2] * m2.m[1][3];
544 m.m[1][3] = m1.m[0][3] * m2.m[1][0]
545 + m1.m[1][3] * m2.m[1][1]
546 + m1.m[2][3] * m2.m[1][2]
547 + m1.m[3][3] * m2.m[1][3];
549 m.m[2][0] = m1.m[0][0] * m2.m[2][0]
550 + m1.m[1][0] * m2.m[2][1]
551 + m1.m[2][0] * m2.m[2][2]
552 + m1.m[3][0] * m2.m[2][3];
553 m.m[2][1] = m1.m[0][1] * m2.m[2][0]
554 + m1.m[1][1] * m2.m[2][1]
555 + m1.m[2][1] * m2.m[2][2]
556 + m1.m[3][1] * m2.m[2][3];
557 m.m[2][2] = m1.m[0][2] * m2.m[2][0]
558 + m1.m[1][2] * m2.m[2][1]
559 + m1.m[2][2] * m2.m[2][2]
560 + m1.m[3][2] * m2.m[2][3];
561 m.m[2][3] = m1.m[0][3] * m2.m[2][0]
562 + m1.m[1][3] * m2.m[2][1]
563 + m1.m[2][3] * m2.m[2][2]
564 + m1.m[3][3] * m2.m[2][3];
566 m.m[3][0] = m1.m[0][0] * m2.m[3][0]
567 + m1.m[1][0] * m2.m[3][1]
568 + m1.m[2][0] * m2.m[3][2]
569 + m1.m[3][0] * m2.m[3][3];
570 m.m[3][1] = m1.m[0][1] * m2.m[3][0]
571 + m1.m[1][1] * m2.m[3][1]
572 + m1.m[2][1] * m2.m[3][2]
573 + m1.m[3][1] * m2.m[3][3];
574 m.m[3][2] = m1.m[0][2] * m2.m[3][0]
575 + m1.m[1][2] * m2.m[3][1]
576 + m1.m[2][2] * m2.m[3][2]
577 + m1.m[3][2] * m2.m[3][3];
578 m.m[3][3] = m1.m[0][3] * m2.m[3][0]
579 + m1.m[1][3] * m2.m[3][1]
580 + m1.m[2][3] * m2.m[3][2]
581 + m1.m[3][3] * m2.m[3][3];
582 m.flagBits = flagBits;