0
matMul函數執行將矩陣乘法存儲在矩陣C中的矩陣乘法。對於computeTransformationMatrix函數,目標是將旋轉矩陣,縮放矩陣,平移矩陣和投影矩陣組合爲單個變換矩陣M.所有變換矩陣均爲4x4除了投影矩陣是2X4矩陣。常量已在其他地方正確定義,儘管以下未顯示。將轉換合併到每個轉換矩陣一次(顯示在底部)應用matMul函數,直到最終創建複合轉換矩陣M的唯一方法?如何將所有線性變換合併到複合變換矩陣中?
void matMul(Matrix A, Matrix B, int ARows, int ACols, int BCols, Matrix C){
int i,j,k, sum;
for(i=0;i<ARows;i++){
sum = 0;
for(j=0;j<ACols;j++){
for(k=0;k<BCols;k++){
sum += A[i][k]*B[k][j];
}
C[i][j] = sum;
}
}
}
void computeTransformationMatrix(Matrix M, float scale, float xt, float yt, float zt) {
// to return final transformation in M
Matrix P; // projection matrix
Matrix S; // scaling matrix
Matrix T; // translation matrix
Matrix R_X, R_Y, R_Z; //rotation matrices
// initialize transformation matrices
rotationMatrixX(ROTATION_ANGLE_X, R_X);
rotationMatrixY(ROTATION_ANGLE_Y, R_Y);
rotationMatrixZ(ROTATION_ANGLE_Z, R_Z);
projectionMatrix(P);
scalingMatrix(scale, scale, -scale, S);
translationMatrix(xt, yt, zt, T);
Matrix TM1, TM2, TM3, TM4;//store transformed matrices
matMul(R_X, R_Y, 4, 4, 4, TM1);
matMul(R_Z, TM1, 4, 4, 4, TM2);
matMul(T,TM2, 4, 4, 4, TM3);
matMul(S, TM3, 4, 4, 4, TM4);
matMul(P, TM4, 2, 4, 4, M);
}
你會怎麼做呢?我不認爲想要同時乘以三個矩陣是非常明智的,但是這將是關於您使用非線程代碼所能做的所有事情。使用線程代碼,您可能能夠加速單個矩陣乘法,但我相信您仍然需要按順序執行它們。 –