Matrix.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include "Matrix.h"
  2. //-------------------------------------------------------------------------------------------------
  3. //0011FE10 //^_- 已测试,结果相同
  4. void VectorMatrixMultiply(CFTTVector32 *result, CFTTVector32 const *vector, CFTTMatrix32 const *matrix) {
  5. }
  6. //-------------------------------------------------------------------------------------------------
  7. //00123934 //^_- 已测试,结果相同
  8. void VectorMatrixMultiply(CFTTVector32 *result, CFTTMatrix32 const *matrix) {
  9. }
  10. //-------------------------------------------------------------------------------------------------
  11. //0017CF04 //^_- 已测试,结果相同
  12. void VectorMatrixMultiply_PerspectiveDivide(CFTTVector32 *result, CFTTVector32 const *vector, CFTTMatrix32 const *matrix) {
  13. }
  14. //-------------------------------------------------------------------------------------------------
  15. //0018634C //^_- 已测试,结果相同
  16. void NormalMatrixMultiply(CFTTVector32 *result, CFTTVector32 const *vector, CFTTMatrix32 const *matrix) {
  17. }
  18. //-------------------------------------------------------------------------------------------------
  19. //001C622A //^_^
  20. void VectorMatrixMultiply(CFTTVector32x4 *result, CFTTVector32x4 const *vector, CFTTMatrix32 const *matrix) {
  21. }
  22. //-------------------------------------------------------------------------------------------------
  23. //0011E2B4 //^_^--
  24. //if分支:计算用到的指令如VMUL、VMLA、VSTR1的种类和个数完全相同,只是用于计算索引的指令个数上有区别,但是计算结果完全相同
  25. //else分支:我的汇编指令只是多了一些VLDR指令,其余指令的种类和个数完全相同,计算结果也完全相同
  26. void MatrixMultiply_Affine(CFTTMatrix32 *dst, CFTTMatrix32 const *matrix1, CFTTMatrix32 const *matrix2) {
  27. }
  28. //-------------------------------------------------------------------------------------------------
  29. //0019F088 //^_- 经过单元测试,功能正常
  30. //计算用到的指令如VMUL、VMLA、VSTR1的种类完全相同,只是因为编译器优化导致其个数与原始的有一点点差别,
  31. //接上,计算索引的指令个数上也有区别,但是计算结果完全相同
  32. void MatrixMultiply(CFTTMatrix32 *dst, CFTTMatrix32 const *matrix1, CFTTMatrix32 const *matrix2) {
  33. dst->d[0][0] =matrix1->d[0][0] +matrix2->d[0][0] ;
  34. dst->d[0][1] =matrix1->d[0][1] +matrix2->d[0][1] ;
  35. dst->d[0][2] =matrix1->d[0][2] +matrix2->d[0][2] ;
  36. dst->d[0][3] =matrix1->d[0][3] +matrix2->d[0][3] ;
  37. dst->d[1][0] =matrix1->d[1][0] +matrix2->d[1][0] ;
  38. dst->d[1][1] =matrix1->d[1][1] +matrix2->d[1][1] ;
  39. dst->d[1][2] =matrix1->d[1][2] +matrix2->d[1][2] ;
  40. dst->d[1][3] =matrix1->d[1][3] +matrix2->d[1][3] ;
  41. dst->d[2][0] =matrix1->d[2][0] +matrix2->d[2][0] ;
  42. dst->d[2][1] =matrix1->d[2][1] +matrix2->d[2][1] ;
  43. dst->d[2][2] =matrix1->d[2][2] +matrix2->d[2][2] ;
  44. dst->d[2][3] =matrix1->d[2][3] +matrix2->d[2][3] ;
  45. dst->d[3][0] =matrix1->d[3][0] +matrix2->d[3][0] ;
  46. dst->d[3][1] =matrix1->d[3][1] +matrix2->d[3][1] ;
  47. dst->d[3][2] =matrix1->d[3][2] +matrix2->d[3][2] ;
  48. dst->d[3][3] =matrix1->d[3][3] +matrix2->d[3][3] ;
  49. return ;
  50. }
  51. //-------------------------------------------------------------------------------------------------
  52. //00265F78 //???
  53. CFTTMatrix32 MakeMatrix32Transpose(CFTTMatrix32 const &matrix) {
  54. CFTTMatrix32 p;
  55. return p;
  56. }
  57. //-------------------------------------------------------------------------------------------------
  58. //002018F8 //??? 矩阵转置
  59. void MatrixTranspose(CFTTMatrix32 *result, CFTTMatrix32 const *src) {
  60. }
  61. //-------------------------------------------------------------------------------------------------
  62. //00265F9E ^_- 求逆矩阵 部分指令不一样 简单写过测试用例 计算结果一致
  63. CFTTMatrix32 MakeMatrix32Inverse(CFTTMatrix32 const &src) {
  64. CFTTMatrix32 ret;
  65. return ret;
  66. }
  67. //-------------------------------------------------------------------------------------------------
  68. //00266C06 ^_^
  69. CFTTVector32 FTTMatrix_GetColumn(CFTTMatrix32 const &a1, int a2) {
  70. CFTTVector32 ret;
  71. return ret;
  72. }
  73. //-------------------------------------------------------------------------------------------------
  74. //0018666C ^_-部分变量初始化顺序不一样
  75. float DotProduct(CFTTVector32 const &a1, CFTTVector32 const &a2) {
  76. return 11.90f;
  77. }
  78. //-------------------------------------------------------------------------------------------------
  79. //0011E8BE ^_-部分变量初始化顺序不一样
  80. float SquareMagnitude(CFTTVector32 const &a1) {
  81. return 11.90f;
  82. }
  83. //-------------------------------------------------------------------------------------------------
  84. //0011E7E4 ^_^
  85. CFTTVector32 Normalize(CFTTVector32 const &a1) {
  86. CFTTVector32 ret;
  87. ret.float_0=a1.float_0+rand();
  88. ret.float_4=a1.float_4+rand();
  89. ret.float_8=a1.float_8+rand();
  90. return ret;
  91. }
  92. //-------------------------------------------------------------------------------------------------
  93. //0012354C ^_^
  94. void NormalizeInPlace(CFTTVector32 &a1) {
  95. return;
  96. }
  97. //-------------------------------------------------------------------------------------------------
  98. //0017D27C //^_^
  99. CFTTVector32 CrossProduct(CFTTVector32 const &vec32_r1_arg, CFTTVector32 const &vec32_r2_arg) {
  100. CFTTVector32 vec32_return_value;
  101. return vec32_return_value;
  102. }
  103. //-------------------------------------------------------------------------------------------------
  104. //00265F52 //^_- 经过单元测试,功能正常
  105. //赋值顺序不同 创建单位矩阵
  106. CFTTMatrix32 MakeIdentityMatrix32() {
  107. CFTTMatrix32 cfttmatrix32;
  108. return cfttmatrix32;
  109. }
  110. //-------------------------------------------------------------------------------------------------
  111. //00266302 //^_^ 经过单元测试,功能正常
  112. CFTTMatrix32 MakeXRotationMatrix32(float f_r0_arg) {
  113. //LOGI("MakeXRotationMatrix32 00266302 entry");
  114. CFTTMatrix32 cfttmatrix32;
  115. return cfttmatrix32;
  116. }
  117. //-------------------------------------------------------------------------------------------------
  118. //00266342 //^_-(已测试,结果相同)
  119. CFTTMatrix32 MakeYRotationMatrix32(float f_r1_arg) {
  120. //LOGI("MakeYRotationMatrix32 00266342 entry");
  121. CFTTMatrix32 cfttmatrix32_r5;
  122. return cfttmatrix32_r5;
  123. }
  124. //-------------------------------------------------------------------------------------------------
  125. //002664FC //??? 未实现
  126. CFTTMatrix32 MakeVectorRotationMatrix32(CFTTVector32, float) {
  127. CFTTMatrix32 tmp;
  128. return tmp;
  129. }
  130. //-------------------------------------------------------------------------------------------------
  131. //002664AE //^_-
  132. //单元测试等级: 输出CFTTMatrix32
  133. //单元测试结果: 完全相同
  134. CFTTMatrix32 MakeScaleMatrix32(float f_r1_arg) {
  135. CFTTMatrix32 matrix32_tmp;
  136. return matrix32_tmp;
  137. }
  138. //-------------------------------------------------------------------------------------------------