void ScaleMatrix( Matrix4x4 matrix, float sx, float sy, float sz ) { Matrix4x4 tmat; tmat[0][0] = sx; tmat[0][1] = 0; tmat[0][2] = 0; tmat[0][3] = 0; tmat[1][0] = 0; tmat[1][1] = sy; tmat[1][2] = 0; tmat[1][3] = 0; tmat[2][0] = 0; tmat[2][1] = 0; tmat[2][2] = sz; tmat[2][3] = 0; tmat[3][0] = 0; tmat[3][1] = 0; tmat[3][2] = 0; tmat[3][3] = 1; MulMatrix( matrix, tmat, gMatrix ); CopyMatrix( gMatrix, matrix ); } |
. . . . . .การปรับค่า Scale ในระบบ matrix ให้ดูตำแหน่งของค่า sx, sy และ sz นะครับว่าอยู่ในช่องไหนของ matrix จากนั้น เราก็นำค่า matrix มาคูณกับ matrix อีกตัวหนึ่ง โดยใช้ function MulMatrix และ copy ค่าไปยัง matrix ที่ส่งมาครับ ต่อไป.... |
void RotateMatrix( Matrix4x4 matrix, float ax, float ay, float az ) { Matrix4x4 xmat, ymat, zmat, tmat; } |
. . . . . .บางคนเห็นคงจะ ไอ๋หย๋า !!!! อารายเนี่ย แต่ไม่ยากครับแค่ matrix สามตัวคือ matrix X, Y และ Z ครับ ดูดีดี เพราะมี function SIN และ COS เกี่ยวข้องด้วยครับ และนำ matrix ทั้งสามมาคูณกับ โดยเริ่มจาก matrix ที่ส่งเข้ามา คูณกับ matrix Y ครับ และนำผลลัพท์ไปคูณกับ matrix X และก็ไปคูณกับ matrix Z มันก็แค่นี้ละครับ เห็นมะง่ายๆ ทีนี้เรามาดูว่าค่า SIN และ COS มันเป็นลบเป็นบวกได้ยังงัย ดูรูปข้างล่างครับ |
. . . . . .จากรูปข้างบนคงพอจะเข้าไปนะครับ ถ้าเราจะหมุน (rotate) แกน X เราก็ให้ค่า SIN, และ COS ที่ช่อง YZ ถ้าเราจะหมุนแกน Y เราก็ให้ค่าที่ชอง XZ ถ้าเราจะหมุนแกน Z เราก็ให้ค่าที่ช่อง XY ก็ลองทบทวบดูนะครับ ไม่ยากหรอก หึหึหึ....ดู source code ประกอบก็ได้ครับ จะได้เข้าใจยิ่งขึ้นครับ |