Make your own free website on Tripod.com

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;

xmat[0][0] = 1; xmat[0][1] = 0; xmat[0][2] = 0; xmat[0][3] = 0;
xmat[1][0] = 0; xmat[1][1] = COS(ax); xmat[1][2] = SIN(ax); xmat[1][3] = 0;
xmat[2][0] = 0; xmat[2][1] = -SIN(ax); xmat[2][2] = COS(ax); xmat[2][3] = 0;
xmat[3][0] = 0; xmat[3][1] = 0; xmat[3][2] = 0; xmat[3][3] = 1;

ymat[0][0] = COS(ay); ymat[0][1] = 0; ymat[0][2] = -SIN(ay); ymat[0][3] = 0;
ymat[1][0] = 0; ymat[1][1] = 1; ymat[1][2] = 0; ymat[1][3] = 0;
ymat[2][0] = SIN(ay); ymat[2][1] = 0; ymat[2][2] = COS(ay); ymat[2][3] = 0;
ymat[3][0] = 0; ymat[3][1] = 0; ymat[3][2] = 0; ymat[3][3] = 1;

zmat[0][0] = COS(az); zmat[0][1] = SIN(az); zmat[0][2] = 0; zmat[0][3] = 0;
zmat[1][0] = -SIN(az); zmat[1][1] = COS(az); zmat[1][2] = 0; zmat[1][3] = 0;
zmat[2][0] = 0; zmat[2][1] = 0; zmat[2][2] = 1; zmat[2][3] = 0;
zmat[3][0] = 0; zmat[3][1] = 0; zmat[3][2] = 0; zmat[3][3] = 1;

MulMatrix( matrix, ymat, gMatrix );
MulMatrix( gMatrix, xmat, tmat );
MulMatrix( tmat, zmat, matrix );

}

. . . . . .บางคนเห็นคงจะ ไอ๋หย๋า !!!! อารายเนี่ย แต่ไม่ยากครับแค่ 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 ประกอบก็ได้ครับ จะได้เข้าใจยิ่งขึ้นครับ