Changeset 4906
- Timestamp:
- Dec 22, 2014 2:24:33 PM (9 years ago)
- Location:
- nanovis/branches/1.1/vrmath
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
nanovis/branches/1.1/vrmath/Matrix4x4d.cpp
r4890 r4906 229 229 void Matrix4x4d::multiply(const Matrix4x4d& m1, const Matrix4x4d& m2) 230 230 { 231 double mat[16]; 232 const double *mat1 = m1._data; 233 const double *mat2 = m2._data; 234 235 // 1 row 236 mat[0] = mat1[0] * mat2[0] + mat1[4] * mat2[1] + 237 mat1[8] * mat2[2] + mat1[12] * mat2[3]; 238 mat[4] = mat1[0] * mat2[4] + mat1[4] * mat2[5] + 239 mat1[8] * mat2[6] + mat1[12] * mat2[7]; 240 mat[8] = mat1[0] * mat2[8] + mat1[4] * mat2[9] + 241 mat1[8] * mat2[10] + mat1[12] * mat2[11]; 242 mat[12] = mat1[0] * mat2[12] + mat1[4] * mat2[13] + 243 mat1[8] * mat2[14] + mat1[12] * mat2[15]; 244 245 // 2 row 246 mat[1] = mat1[1] * mat2[0] + mat1[5] * mat2[1] + 247 mat1[9] * mat2[2] + mat1[13] * mat2[3]; 248 mat[5] = mat1[1] * mat2[4] + mat1[5] * mat2[5] + 249 mat1[9] * mat2[6] + mat1[13] * mat2[7]; 250 mat[9] = mat1[1] * mat2[8] + mat1[5] * mat2[9] + 251 mat1[9] * mat2[10] + mat1[13] * mat2[11]; 252 mat[13] = mat1[1] * mat2[12] + mat1[5] * mat2[13] + 253 mat1[9] * mat2[14] + mat1[13] * mat2[15]; 254 255 // 3 row 256 mat[2] = mat1[2] * mat2[0] + mat1[6] * mat2[1] + 257 mat1[10] * mat2[2] + mat1[14] * mat2[3]; 258 mat[6] = mat1[2] * mat2[4] + mat1[6] * mat2[5] + 259 mat1[10] * mat2[6] + mat1[14] * mat2[7]; 260 mat[10] = mat1[2] * mat2[8] + mat1[6] * mat2[9] + 261 mat1[10] * mat2[10] + mat1[14] * mat2[11]; 262 mat[14] = mat1[2] * mat2[12] + mat1[6] * mat2[13] + 263 mat1[10] * mat2[14] + mat1[14] * mat2[15]; 264 265 // 4 row 266 mat[3] = mat1[3] * mat2[0] + mat1[7] * mat2[1] + 267 mat1[11] * mat2[2] + mat1[15] * mat2[3]; 268 mat[7] = mat1[3] * mat2[4] + mat1[7] * mat2[5] + 269 mat1[11] * mat2[6] + mat1[15] * mat2[7]; 270 mat[11] = mat1[3] * mat2[8] + mat1[7] * mat2[9] + 271 mat1[11] * mat2[10] + mat1[15] * mat2[11]; 272 mat[15] = mat1[3] * mat2[12] + mat1[7] * mat2[13] + 273 mat1[11] * mat2[14] + mat1[15] * mat2[15]; 274 275 // set matrix 276 set(mat); 231 if (&m1 == this && &m2 != this) { 232 multiply(m2); 233 } else if (&m1 != this && &m2 != this) { 234 multiplyFast(m1, m2); 235 } else { 236 double mat[16]; 237 const double *mat1 = m1._data; 238 const double *mat2 = m2._data; 239 240 // 1 row 241 mat[0] = mat1[0] * mat2[0] + mat1[4] * mat2[1] + 242 mat1[8] * mat2[2] + mat1[12] * mat2[3]; 243 mat[4] = mat1[0] * mat2[4] + mat1[4] * mat2[5] + 244 mat1[8] * mat2[6] + mat1[12] * mat2[7]; 245 mat[8] = mat1[0] * mat2[8] + mat1[4] * mat2[9] + 246 mat1[8] * mat2[10] + mat1[12] * mat2[11]; 247 mat[12] = mat1[0] * mat2[12] + mat1[4] * mat2[13] + 248 mat1[8] * mat2[14] + mat1[12] * mat2[15]; 249 250 // 2 row 251 mat[1] = mat1[1] * mat2[0] + mat1[5] * mat2[1] + 252 mat1[9] * mat2[2] + mat1[13] * mat2[3]; 253 mat[5] = mat1[1] * mat2[4] + mat1[5] * mat2[5] + 254 mat1[9] * mat2[6] + mat1[13] * mat2[7]; 255 mat[9] = mat1[1] * mat2[8] + mat1[5] * mat2[9] + 256 mat1[9] * mat2[10] + mat1[13] * mat2[11]; 257 mat[13] = mat1[1] * mat2[12] + mat1[5] * mat2[13] + 258 mat1[9] * mat2[14] + mat1[13] * mat2[15]; 259 260 // 3 row 261 mat[2] = mat1[2] * mat2[0] + mat1[6] * mat2[1] + 262 mat1[10] * mat2[2] + mat1[14] * mat2[3]; 263 mat[6] = mat1[2] * mat2[4] + mat1[6] * mat2[5] + 264 mat1[10] * mat2[6] + mat1[14] * mat2[7]; 265 mat[10] = mat1[2] * mat2[8] + mat1[6] * mat2[9] + 266 mat1[10] * mat2[10] + mat1[14] * mat2[11]; 267 mat[14] = mat1[2] * mat2[12] + mat1[6] * mat2[13] + 268 mat1[10] * mat2[14] + mat1[14] * mat2[15]; 269 270 // 4 row 271 mat[3] = mat1[3] * mat2[0] + mat1[7] * mat2[1] + 272 mat1[11] * mat2[2] + mat1[15] * mat2[3]; 273 mat[7] = mat1[3] * mat2[4] + mat1[7] * mat2[5] + 274 mat1[11] * mat2[6] + mat1[15] * mat2[7]; 275 mat[11] = mat1[3] * mat2[8] + mat1[7] * mat2[9] + 276 mat1[11] * mat2[10] + mat1[15] * mat2[11]; 277 mat[15] = mat1[3] * mat2[12] + mat1[7] * mat2[13] + 278 mat1[11] * mat2[14] + mat1[15] * mat2[15]; 279 280 // set matrix 281 set(mat); 282 } 277 283 } 278 284 … … 499 505 void Matrix4x4d::invert(const Matrix4x4d& mat) 500 506 { 501 const double *data = mat._data; 502 503 double det = 504 data[12] * data[9] * data[6] * data[3]- 505 data[8] * data[13] * data[6] * data[3]- 506 data[12] * data[5] * data[10] * data[3]+ 507 data[4] * data[13] * data[10] * data[3]+ 508 data[8] * data[5] * data[14] * data[3]- 509 data[4] * data[9] * data[14] * data[3]- 510 data[12] * data[9] * data[2] * data[7]+ 511 data[8] * data[13] * data[2] * data[7]+ 512 data[12] * data[1] * data[10] * data[7]- 513 data[0] * data[13] * data[10] * data[7]- 514 data[8] * data[1] * data[14] * data[7]+ 515 data[0] * data[9] * data[14] * data[7]+ 516 data[12] * data[5] * data[2] * data[11]- 517 data[4] * data[13] * data[2] * data[11]- 518 data[12] * data[1] * data[6] * data[11]+ 519 data[0] * data[13] * data[6] * data[11]+ 520 data[4] * data[1] * data[14] * data[11]- 521 data[0] * data[5] * data[14] * data[11]- 522 data[8] * data[5] * data[2] * data[15]+ 523 data[4] * data[9] * data[2] * data[15]+ 524 data[8] * data[1] * data[6] * data[15]- 525 data[0] * data[9] * data[6] * data[15]- 526 data[4] * data[1] * data[10] * data[15]+ 527 data[0] * data[5] * data[10] * data[15]; 528 529 if ( det == 0.0 ) return; 530 det = 1.0 / det; 531 532 double dstData[16]; 533 534 dstData[0] = (data[9]*data[14]*data[7] - 535 data[13]*data[10]*data[7] + 536 data[13]*data[6]*data[11] - 537 data[5]*data[14]*data[11] - 538 data[9]*data[6]*data[15] + 539 data[5]*data[10]*data[15]) * det; 540 541 dstData[4] = (data[12]*data[10]*data[7] - 542 data[8]*data[14]*data[7] - 543 data[12]*data[6]*data[11] + 544 data[4]*data[14]*data[11] + 545 data[8]*data[6]*data[15] - 546 data[4]*data[10]*data[15]) * det; 547 548 dstData[8] = (data[8]*data[13]*data[7] - 549 data[12]*data[9]*data[7] + 550 data[12]*data[5]*data[11] - 551 data[4]*data[13]*data[11] - 552 data[8]*data[5]*data[15] + 553 data[4]*data[9]*data[15]) * det; 554 555 dstData[12] = (data[12]*data[9]*data[6] - 556 data[8]*data[13]*data[6] - 557 data[12]*data[5]*data[10] + 558 data[4]*data[13]*data[10] + 559 data[8]*data[5]*data[14] - 560 data[4]*data[9]*data[14]) * det; 561 562 dstData[1] = (data[13]*data[10]*data[3] - 563 data[9]*data[14]*data[3] - 564 data[13]*data[2]*data[11] + 565 data[1]*data[14]*data[11] + 566 data[9]*data[2]*data[15] - 567 data[1]*data[10]*data[15]) * det; 568 569 dstData[5] = (data[8]*data[14]*data[3] - 570 data[12]*data[10]*data[3] + 571 data[12]*data[2]*data[11] - 572 data[0]*data[14]*data[11] - 573 data[8]*data[2]*data[15] + 574 data[0]*data[10]*data[15]) * det; 575 576 dstData[9] = (data[12]*data[9]*data[3] - 577 data[8]*data[13]*data[3] - 578 data[12]*data[1]*data[11] + 579 data[0]*data[13]*data[11] + 580 data[8]*data[1]*data[15] - 581 data[0]*data[9]*data[15]) * det; 582 583 dstData[13] = (data[8]*data[13]*data[2] - 584 data[12]*data[9]*data[2] + 585 data[12]*data[1]*data[10] - 586 data[0]*data[13]*data[10] - 587 data[8]*data[1]*data[14] + 588 data[0]*data[9]*data[14]) * det; 589 590 dstData[2] = (data[5]*data[14]*data[3] - 591 data[13]*data[6]*data[3] + 592 data[13]*data[2]*data[7] - 593 data[1]*data[14]*data[7] - 594 data[5]*data[2]*data[15] + 595 data[1]*data[6]*data[15]) * det; 596 597 dstData[6] = (data[12]*data[6]*data[3] - 598 data[4]*data[14]*data[3] - 599 data[12]*data[2]*data[7] + 600 data[0]*data[14]*data[7] + 601 data[4]*data[2]*data[15] - 602 data[0]*data[6]*data[15]) * det; 603 604 dstData[10] = (data[4]*data[13]*data[3] - 605 data[12]*data[5]*data[3] + 606 data[12]*data[1]*data[7] - 607 data[0]*data[13]*data[7] - 608 data[4]*data[1]*data[15] + 609 data[0]*data[5]*data[15]) * det; 610 611 dstData[14] = (data[12]*data[5]*data[2] - 612 data[4]*data[13]*data[2] - 613 data[12]*data[1]*data[6] + 614 data[0]*data[13]*data[6] + 615 data[4]*data[1]*data[14] - 616 data[0]*data[5]*data[14]) * det; 617 618 dstData[3] = (data[9]*data[6]*data[3] - 619 data[5]*data[10]*data[3] - 620 data[9]*data[2]*data[7] + 621 data[1]*data[10]*data[7] + 622 data[5]*data[2]*data[11] - 623 data[1]*data[6]*data[11]) * det; 624 625 dstData[7] = (data[4]*data[10]*data[3] - 626 data[8]*data[6]*data[3] + 627 data[8]*data[2]*data[7] - 628 data[0]*data[10]*data[7] - 629 data[4]*data[2]*data[11] + 630 data[0]*data[6]*data[11]) * det; 631 632 dstData[11] = (data[8]*data[5]*data[3] - 633 data[4]*data[9]*data[3] - 634 data[8]*data[1]*data[7] + 635 data[0]*data[9]*data[7] + 636 data[4]*data[1]*data[11] - 637 data[0]*data[5]*data[11]) * det; 638 639 dstData[15] = (data[4]*data[9]*data[2] - 640 data[8]*data[5]*data[2] + 641 data[8]*data[1]*data[6] - 642 data[0]*data[9]*data[6] - 643 data[4]*data[1]*data[10] + 644 data[0]*data[5]*data[10]) * det; 645 646 set(dstData); 507 if (&mat == this) { 508 invert(); 509 } else { 510 invertFast(mat); 511 } 647 512 } 648 513 … … 921 786 void Matrix4x4d::transpose(const Matrix4x4d& mat) 922 787 { 923 double m[16]; 924 925 m[0] = mat._data[0]; 926 m[1] = mat._data[4]; 927 m[2] = mat._data[8]; 928 m[3] = mat._data[12]; 929 930 m[4] = mat._data[1]; 931 m[5] = mat._data[5]; 932 m[6] = mat._data[9]; 933 m[7] = mat._data[13]; 934 935 m[8] = mat._data[2]; 936 m[9] = mat._data[6]; 937 m[10] = mat._data[10]; 938 m[11] = mat._data[14]; 939 940 m[12] = mat._data[3]; 941 m[13] = mat._data[7]; 942 m[14] = mat._data[11]; 943 m[15] = mat._data[15]; 944 945 set(m); 788 if (&mat == this) { 789 transpose(); 790 } else { 791 transposeFast(mat); 792 } 946 793 } 947 794 -
nanovis/branches/1.1/vrmath/Matrix4x4f.cpp
r4890 r4906 230 230 void Matrix4x4f::multiply(const Matrix4x4f& m1, const Matrix4x4f& m2) 231 231 { 232 float mat[16]; 233 const float *mat1 = m1._data; 234 const float *mat2 = m2._data; 235 236 // 1 row 237 mat[0] = float(mat1[0] * mat2[0] + mat1[4] * mat2[1] + 238 mat1[8] * mat2[2] + mat1[12] * mat2[3]); 239 mat[4] = float(mat1[0] * mat2[4] + mat1[4] * mat2[5] + 240 mat1[8] * mat2[6] + mat1[12] * mat2[7]); 241 mat[8] = float(mat1[0] * mat2[8] + mat1[4] * mat2[9] + 242 mat1[8] * mat2[10] + mat1[12] * mat2[11]); 243 mat[12] = float(mat1[0] * mat2[12] + mat1[4] * mat2[13] + 244 mat1[8] * mat2[14] + mat1[12] * mat2[15]); 245 246 // 2 row 247 mat[1] = float(mat1[1] * mat2[0] + mat1[5] * mat2[1] + 248 mat1[9] * mat2[2] + mat1[13] * mat2[3]); 249 mat[5] = float(mat1[1] * mat2[4] + mat1[5] * mat2[5] + 250 mat1[9] * mat2[6] + mat1[13] * mat2[7]); 251 mat[9] = float(mat1[1] * mat2[8] + mat1[5] * mat2[9] + 252 mat1[9] * mat2[10] + mat1[13] * mat2[11]); 253 mat[13] = float(mat1[1] * mat2[12] + mat1[5] * mat2[13] + 254 mat1[9] * mat2[14] + mat1[13] * mat2[15]); 255 256 // 3 row 257 mat[2] = float(mat1[2] * mat2[0] + mat1[6] * mat2[1] + 258 mat1[10] * mat2[2] + mat1[14] * mat2[3]); 259 mat[6] = float(mat1[2] * mat2[4] + mat1[6] * mat2[5] + 260 mat1[10] * mat2[6] + mat1[14] * mat2[7]); 261 mat[10] = float(mat1[2] * mat2[8] + mat1[6] * mat2[9] + 262 mat1[10] * mat2[10] + mat1[14] * mat2[11]); 263 mat[14] = float(mat1[2] * mat2[12] + mat1[6] * mat2[13] + 264 mat1[10] * mat2[14] + mat1[14] * mat2[15]); 265 266 // 4 row 267 mat[3] = float(mat1[3] * mat2[0] + mat1[7] * mat2[1] + 268 mat1[11] * mat2[2] + mat1[15] * mat2[3]); 269 mat[7] = float(mat1[3] * mat2[4] + mat1[7] * mat2[5] + 270 mat1[11] * mat2[6] + mat1[15] * mat2[7]); 271 mat[11] = float(mat1[3] * mat2[8] + mat1[7] * mat2[9] + 272 mat1[11] * mat2[10] + mat1[15] * mat2[11]); 273 mat[15] = float(mat1[3] * mat2[12] + mat1[7] * mat2[13] + 274 mat1[11] * mat2[14] + mat1[15] * mat2[15]); 275 276 // set matrix 277 set(mat); 232 if (&m1 == this && &m2 != this) { 233 multiply(m2); 234 } else if (&m1 != this && &m2 != this) { 235 multiplyFast(m1, m2); 236 } else { 237 float mat[16]; 238 const float *mat1 = m1._data; 239 const float *mat2 = m2._data; 240 241 // 1 row 242 mat[0] = float(mat1[0] * mat2[0] + mat1[4] * mat2[1] + 243 mat1[8] * mat2[2] + mat1[12] * mat2[3]); 244 mat[4] = float(mat1[0] * mat2[4] + mat1[4] * mat2[5] + 245 mat1[8] * mat2[6] + mat1[12] * mat2[7]); 246 mat[8] = float(mat1[0] * mat2[8] + mat1[4] * mat2[9] + 247 mat1[8] * mat2[10] + mat1[12] * mat2[11]); 248 mat[12] = float(mat1[0] * mat2[12] + mat1[4] * mat2[13] + 249 mat1[8] * mat2[14] + mat1[12] * mat2[15]); 250 251 // 2 row 252 mat[1] = float(mat1[1] * mat2[0] + mat1[5] * mat2[1] + 253 mat1[9] * mat2[2] + mat1[13] * mat2[3]); 254 mat[5] = float(mat1[1] * mat2[4] + mat1[5] * mat2[5] + 255 mat1[9] * mat2[6] + mat1[13] * mat2[7]); 256 mat[9] = float(mat1[1] * mat2[8] + mat1[5] * mat2[9] + 257 mat1[9] * mat2[10] + mat1[13] * mat2[11]); 258 mat[13] = float(mat1[1] * mat2[12] + mat1[5] * mat2[13] + 259 mat1[9] * mat2[14] + mat1[13] * mat2[15]); 260 261 // 3 row 262 mat[2] = float(mat1[2] * mat2[0] + mat1[6] * mat2[1] + 263 mat1[10] * mat2[2] + mat1[14] * mat2[3]); 264 mat[6] = float(mat1[2] * mat2[4] + mat1[6] * mat2[5] + 265 mat1[10] * mat2[6] + mat1[14] * mat2[7]); 266 mat[10] = float(mat1[2] * mat2[8] + mat1[6] * mat2[9] + 267 mat1[10] * mat2[10] + mat1[14] * mat2[11]); 268 mat[14] = float(mat1[2] * mat2[12] + mat1[6] * mat2[13] + 269 mat1[10] * mat2[14] + mat1[14] * mat2[15]); 270 271 // 4 row 272 mat[3] = float(mat1[3] * mat2[0] + mat1[7] * mat2[1] + 273 mat1[11] * mat2[2] + mat1[15] * mat2[3]); 274 mat[7] = float(mat1[3] * mat2[4] + mat1[7] * mat2[5] + 275 mat1[11] * mat2[6] + mat1[15] * mat2[7]); 276 mat[11] = float(mat1[3] * mat2[8] + mat1[7] * mat2[9] + 277 mat1[11] * mat2[10] + mat1[15] * mat2[11]); 278 mat[15] = float(mat1[3] * mat2[12] + mat1[7] * mat2[13] + 279 mat1[11] * mat2[14] + mat1[15] * mat2[15]); 280 281 // set matrix 282 set(mat); 283 } 278 284 } 279 285 … … 500 506 void Matrix4x4f::invert(const Matrix4x4f& mat) 501 507 { 502 float *data = (float *)mat._data; 503 504 float det = 505 data[12] * data[9] * data[6] * data[3]- 506 data[8] * data[13] * data[6] * data[3]- 507 data[12] * data[5] * data[10] * data[3]+ 508 data[4] * data[13] * data[10] * data[3]+ 509 data[8] * data[5] * data[14] * data[3]- 510 data[4] * data[9] * data[14] * data[3]- 511 data[12] * data[9] * data[2] * data[7]+ 512 data[8] * data[13] * data[2] * data[7]+ 513 data[12] * data[1] * data[10] * data[7]- 514 data[0] * data[13] * data[10] * data[7]- 515 data[8] * data[1] * data[14] * data[7]+ 516 data[0] * data[9] * data[14] * data[7]+ 517 data[12] * data[5] * data[2] * data[11]- 518 data[4] * data[13] * data[2] * data[11]- 519 data[12] * data[1] * data[6] * data[11]+ 520 data[0] * data[13] * data[6] * data[11]+ 521 data[4] * data[1] * data[14] * data[11]- 522 data[0] * data[5] * data[14] * data[11]- 523 data[8] * data[5] * data[2] * data[15]+ 524 data[4] * data[9] * data[2] * data[15]+ 525 data[8] * data[1] * data[6] * data[15]- 526 data[0] * data[9] * data[6] * data[15]- 527 data[4] * data[1] * data[10] * data[15]+ 528 data[0] * data[5] * data[10] * data[15]; 529 530 if ( det == 0.0f ) return; 531 det = 1 / det; 532 533 float dstData[16]; 534 535 dstData[0] = (data[9]*data[14]*data[7] - 536 data[13]*data[10]*data[7] + 537 data[13]*data[6]*data[11] - 538 data[5]*data[14]*data[11] - 539 data[9]*data[6]*data[15] + 540 data[5]*data[10]*data[15]) * det; 541 542 dstData[4] = (data[12]*data[10]*data[7] - 543 data[8]*data[14]*data[7] - 544 data[12]*data[6]*data[11] + 545 data[4]*data[14]*data[11] + 546 data[8]*data[6]*data[15] - 547 data[4]*data[10]*data[15]) * det; 548 549 dstData[8] = (data[8]*data[13]*data[7] - 550 data[12]*data[9]*data[7] + 551 data[12]*data[5]*data[11] - 552 data[4]*data[13]*data[11] - 553 data[8]*data[5]*data[15] + 554 data[4]*data[9]*data[15]) * det; 555 556 dstData[12] = (data[12]*data[9]*data[6] - 557 data[8]*data[13]*data[6] - 558 data[12]*data[5]*data[10] + 559 data[4]*data[13]*data[10] + 560 data[8]*data[5]*data[14] - 561 data[4]*data[9]*data[14]) * det; 562 563 dstData[1] = (data[13]*data[10]*data[3] - 564 data[9]*data[14]*data[3] - 565 data[13]*data[2]*data[11] + 566 data[1]*data[14]*data[11] + 567 data[9]*data[2]*data[15] - 568 data[1]*data[10]*data[15]) * det; 569 570 dstData[5] = (data[8]*data[14]*data[3] - 571 data[12]*data[10]*data[3] + 572 data[12]*data[2]*data[11] - 573 data[0]*data[14]*data[11] - 574 data[8]*data[2]*data[15] + 575 data[0]*data[10]*data[15]) * det; 576 577 dstData[9] = (data[12]*data[9]*data[3] - 578 data[8]*data[13]*data[3] - 579 data[12]*data[1]*data[11] + 580 data[0]*data[13]*data[11] + 581 data[8]*data[1]*data[15] - 582 data[0]*data[9]*data[15]) * det; 583 584 dstData[13] = (data[8]*data[13]*data[2] - 585 data[12]*data[9]*data[2] + 586 data[12]*data[1]*data[10] - 587 data[0]*data[13]*data[10] - 588 data[8]*data[1]*data[14] + 589 data[0]*data[9]*data[14]) * det; 590 591 dstData[2] = (data[5]*data[14]*data[3] - 592 data[13]*data[6]*data[3] + 593 data[13]*data[2]*data[7] - 594 data[1]*data[14]*data[7] - 595 data[5]*data[2]*data[15] + 596 data[1]*data[6]*data[15]) * det; 597 598 dstData[6] = (data[12]*data[6]*data[3] - 599 data[4]*data[14]*data[3] - 600 data[12]*data[2]*data[7] + 601 data[0]*data[14]*data[7] + 602 data[4]*data[2]*data[15] - 603 data[0]*data[6]*data[15]) * det; 604 605 dstData[10] = (data[4]*data[13]*data[3] - 606 data[12]*data[5]*data[3] + 607 data[12]*data[1]*data[7] - 608 data[0]*data[13]*data[7] - 609 data[4]*data[1]*data[15] + 610 data[0]*data[5]*data[15]) * det; 611 612 dstData[14] = (data[12]*data[5]*data[2] - 613 data[4]*data[13]*data[2] - 614 data[12]*data[1]*data[6] + 615 data[0]*data[13]*data[6] + 616 data[4]*data[1]*data[14] - 617 data[0]*data[5]*data[14]) * det; 618 619 dstData[3] = (data[9]*data[6]*data[3] - 620 data[5]*data[10]*data[3] - 621 data[9]*data[2]*data[7] + 622 data[1]*data[10]*data[7] + 623 data[5]*data[2]*data[11] - 624 data[1]*data[6]*data[11]) * det; 625 626 dstData[7] = (data[4]*data[10]*data[3] - 627 data[8]*data[6]*data[3] + 628 data[8]*data[2]*data[7] - 629 data[0]*data[10]*data[7] - 630 data[4]*data[2]*data[11] + 631 data[0]*data[6]*data[11]) * det; 632 633 dstData[11] = (data[8]*data[5]*data[3] - 634 data[4]*data[9]*data[3] - 635 data[8]*data[1]*data[7] + 636 data[0]*data[9]*data[7] + 637 data[4]*data[1]*data[11] - 638 data[0]*data[5]*data[11]) * det; 639 640 dstData[15] = (data[4]*data[9]*data[2] - 641 data[8]*data[5]*data[2] + 642 data[8]*data[1]*data[6] - 643 data[0]*data[9]*data[6] - 644 data[4]*data[1]*data[10] + 645 data[0]*data[5]*data[10]) * det; 646 647 set(dstData); 508 if (&mat == this) { 509 invert(); 510 } else { 511 invertFast(mat); 512 } 648 513 } 649 514 … … 846 711 void Matrix4x4f::transpose(const Matrix4x4f& mat) 847 712 { 848 float m[16]; 849 850 m[0] = mat._data[0]; 851 m[1] = mat._data[4]; 852 m[2] = mat._data[8]; 853 m[3] = mat._data[12]; 854 855 m[4] = mat._data[1]; 856 m[5] = mat._data[5]; 857 m[6] = mat._data[9]; 858 m[7] = mat._data[13]; 859 860 m[8] = mat._data[2]; 861 m[9] = mat._data[6]; 862 m[10] = mat._data[10]; 863 m[11] = mat._data[14]; 864 865 m[12] = mat._data[3]; 866 m[13] = mat._data[7]; 867 m[14] = mat._data[11]; 868 m[15] = mat._data[15]; 869 870 set(m); 713 if (&mat == this) { 714 transpose(); 715 } else { 716 transposeFast(mat); 717 } 871 718 } 872 719
Note: See TracChangeset
for help on using the changeset viewer.