typedef float[4][4] Matrix4x4; //
กำหนดรูปแบบ matrix ขนาด 4
คูณ 4 Matrix4x4 gMatrix; void SetIdentity( Matrix4x4 matrix ) { matrix[0][0] = 1.0; matrix[0][1] = 0.0; matrix[0][2] = 0.0; matrix[0][3] = 0.0; matrix[1][0] = 0.0; matrix[1][1] = 1.0; matrix[1][2] = 0.0; matrix[1][3] = 0.0; matrix[2][0] = 0.0; matrix[2][1] = 0.0; matrix[2][2] = 1.0; matrix[2][3] = 0.0; matrix[3][0] = 0.0; matrix[3][1] = 0.0; matrix[3][2] = 0.0; matrix[3][3] = 1.0; } void CopyMatrix( Matrix4x4 A, Matrix4x4 B ) { int i, j; for( i=0; i<4; i++ ) for( j=0; j<4; j++ ) C[i][j] = A[i][j]; } |
. . . . . .จากสูตรข้างบนเป็นการสร้าง Identity matrix จะเห็นว่ามีการกำหนดให้ค่าใน matrix บางตัวมีค่า 1.0 ที่เหลือมีค่า 0.0 ตรงนี้เป็นการเริ่มต้นการทำงานของ matrix ครับ เพราะยังต้องผ่านกระบวนการอื่นๆ อีกต่อไป แต่มันก็ไม่ได้มีอะไรมากมาย แค่นำ matrix สองตัวมาคูณกันแค่นั้นเองครับ ส่วน function CopyMatrix ก็นำค่าจาก matrix A ไปให้ matrix C ครับ ไม่มีอะไรมากมาย และ ตัวแปรโกลบอล gMatrix เป็นตัวแปรใช้งานทั่วไปครับ มาดูต่อไป....... |
void MulMatrix( Matrix4x4 A, Matrix4x4 B, Matrix4x4
C ) { for( int i=0; i<4; i++ ) for( j=0; j<4; j++ ) C[i][j] = (A[i][0] * B[0][j]) + (A[i][0] * B[0][j]) + (A[i][1] * B[1][j]) + (A[i][2] * B[2][j]); } |
. . . . . .ข้างบนนี้เป็น function การคูณ matrix A และ matrix B ผลลัพท์จะอยู่ที่ matrix C ครับ ลองดูการทำงาน ของมันนะครับ ไม่ได้สลับซับซ้อนอะไรเหมือนที่บอกไปตอนต้นๆครับ เขียนแบบนี้ละครับ |