Sign in to follow this  

D3DXMatrix functions do nothing

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

When I call these functions the matrix, v_mat_world, remains unchanged, please help :S

[code]
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]);
[/code] Edited by Lyev

Share this post


Link to post
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 this post


Link to post
Share on other sites
So something like this?
[code]
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);
[/code]

Share this post


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

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites
Sign in to follow this