ok i recently had a job interview where they asked me if i was able to do the matrix calculations myself, i realised i couldnt do it and didnt get the job
so ive set to learn the math for matrix calculations and found some very good doccumentations, however i have changed my rendering function to support my own matrix multiplications etc but ive ended up with some very strange results, i.e when the character rotates it seems to twist round and go really thin at certain points in the rotation, im sure its a simple enough problem but i seem to be blind to it
heres my rendering loop, there ae still some of the DX funcs included as im still working on my own
D3DXMatrixIdentity(&Total);
D3DXMATRIX SC;
D3DXMatrixIdentity(&SC);
//D3DXMatrixScaling(&SC, Scale.x, Scale.y, Scale.z);
d3d::ScaleMatrix(SC,Scale);
D3DXMatrixRotationX(&RotX, rotx);
D3DXMatrixRotationY(&RotY, roty);
D3DXMatrixRotationZ(&RotZ, rotz);
D3DXMatrixTranslation(&Pos,_cpos.x,_cpos.y,_cpos.z);
d3d::MultiplyMatrix(Total,SC,Total);
//D3DXMatrixMultiply(&Total,&Total,&SC);
//D3DXMatrixMultiply(&Total,&Total,&RotX);
d3d::MultiplyMatrix(Total,RotX, Total);
d3d::MultiplyMatrix(Total,RotY, Total);
d3d::MultiplyMatrix(Total,RotZ, Total);
//D3DXMatrixMultiply(&Total,&Total,&RotY);
//D3DXMatrixMultiply(&Total,&Total,&RotZ);
//D3DXMatrixMultiply(&Total,&Total,&Pos);
d3d::MultiplyMatrix(Total,Pos, Total);
and here is the calculations
void d3d::MultiplyMatrix(D3DXMATRIX &m1,D3DXMATRIX &m2,D3DXMATRIX &m3)
{
//D3DXMatrixIdentity(&m3);
m3._11 = ((m1._11 * m2._11) + (m1._12 * m2._21) + (m1._13 * m2._31) + (m1._14 * m2._41));
m3._12 = ((m1._11 * m2._12) + (m1._12 * m2._22) + (m1._13 * m2._32) + (m1._14 * m2._42));
m3._13 = ((m1._11 * m2._13) + (m1._12 * m2._23) + (m1._13 * m2._33) + (m1._14 * m2._43));
m3._14 = ((m1._11 * m2._14) + (m1._12 * m2._24) + (m1._13 * m2._34) + (m1._14 * m2._44));
m3._21 = ((m1._21 * m2._11) + (m1._22 * m2._21) + (m1._23 * m2._31) + (m1._24 * m2._41));
m3._22 = ((m1._21 * m2._12) + (m1._22 * m2._22) + (m1._23 * m2._32) + (m1._24 * m2._42));
m3._23 = ((m1._21 * m2._13) + (m1._22 * m2._23) + (m1._23 * m2._33) + (m1._24 * m2._43));
m3._24 = ((m1._21 * m2._14) + (m1._22 * m2._24) + (m1._23 * m2._34) + (m1._24 * m2._44));
m3._31 = ((m1._31 * m2._11) + (m1._32 * m2._21) + (m1._33 * m2._31) + (m1._34 * m2._41));
m3._32 = ((m1._31 * m2._12) + (m1._32 * m2._22) + (m1._33 * m2._32) + (m1._34 * m2._42));
m3._33 = ((m1._31 * m2._13) + (m1._32 * m2._23) + (m1._33 * m2._33) + (m1._34 * m2._43));
m3._34 = ((m1._31 * m2._14) + (m1._32 * m2._24) + (m1._33 * m2._34) + (m1._34 * m2._44));
m3._41 = ((m1._41 * m2._11) + (m1._42 * m2._21) + (m1._43 * m2._31) + (m1._44 * m2._41));
m3._42 = ((m1._41 * m2._12) + (m1._42 * m2._22) + (m1._43 * m2._32) + (m1._44 * m2._42));
m3._43 = ((m1._41 * m2._13) + (m1._42 * m2._23) + (m1._43 * m2._33) + (m1._44 * m2._43));
m3._44 = ((m1._41 * m2._14) + (m1._42 * m2._24) + (m1._43 * m2._34) + (m1._44 * m2._44));