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]);
D3DXMatrix functions do nothing
When I call these functions the matrix, v_mat_world, remains unchanged, please help :S
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.
In order to combine the effects of the transformations, you have to multiply the matrices together by your own code.
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);
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.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement