D3DXMatrix functions do nothing

This topic is 2422 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

 float origin[3] = {1, 0, 0}, angles[3] = {D3DXToRadian(180), 0, 0}, scale[3] = {1, 1, 1}; D3DXMatrixIdentity (&v_mat_world); D3DXMatrixTranslation (&v_mat_world, origin[0], origin[1], origin[2]); D3DXMatrixRotationX (&v_mat_world, angles[0]); D3DXMatrixRotationY (&v_mat_world, angles[1]); D3DXMatrixRotationZ (&v_mat_world, angles[2]); D3DXMatrixScaling (&v_mat_world, scale[0], scale[1], scale[2]);  Edited by Lyev

Share on other sites
You overwrite the matrix with each function call. The last operation sets the matrix to identity since the scaling factors happen to be 1.

In order to combine the effects of the transformations, you have to multiply the matrices together by your own code. Edited by Nik02

Share on other sites
So something like this?
 D3DXMATRIX trans, rotx, roty, rotz, scaling; D3DXMatrixIdentity (&v_mat_world); D3DXMatrixTranslation (&trans, origin[0], origin[1], origin[2]); D3DXMatrixRotationX (&rotx, angles[0]); D3DXMatrixRotationY (&roty, angles[1]); D3DXMatrixRotationZ (&rotz, angles[2]); D3DXMatrixScaling (&scaling, scale[0], scale[1], scale[2]); D3DXMatrixMultiply (&v_mat_world, &v_mat_world, &rotx); D3DXMatrixMultiply (&v_mat_world, &v_mat_world, &roty); D3DXMatrixMultiply (&v_mat_world, &v_mat_world, &rotz); D3DXMatrixMultiply (&v_mat_world, &v_mat_world, &scaling); D3DXMatrixMultiply (&v_mat_world, &v_mat_world, &trans); 

Share on other sites
Yea, but you don't need the first identity step. You can use the translation as the baseline.

Share on other sites
In addition, if you are using C++, the * operator of D3DXMATRIX is overloaded to multiply matrices, so you don't need to explicitly use D3DXMatrixMultiply.

• What is your GameDev Story?

In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

• 15
• 9
• 11
• 9
• 9
• Forum Statistics

• Total Topics
634133
• Total Posts
3015747
×