ang_to_matrix(ANGLE* angle, float* matrix)

ang_for_matrix(ANGLE* angle, float* matrix)

LC Konvertiert einen Eulerwinkel in eine float4x4-DirectX-Drehungsmatrix und umgekehrt. Läßt sich dazu verwenden, Entities um Drehungsmatritzen, die von anderen Softwarepaketen, wie etwa Physik-Engines, empfangen wurden, zu drehen.

Parameter:

angle - pan/tilt/roll-Eulerwinkel
matrix - Pointer auf eine float[16]-Drehungsmatrix oder eine D3DXMATRIX*.

Geschwindigkeit:

Mittel

Bemerkungen:

Algorithmus:

matrix[0][0] = cos(tilt)*cos(pan);
matrix[0][2] = cos(tilt)*sin(pan);
matrix[0][1] = sin(tilt);
matrix[0][3] = 0;
matrix[1][0] = -cos(roll)*sin(tilt)*cos(pan)+sin(roll)*sin(pan);
matrix[1][1] = cos(roll)*cos(tilt);
matrix[1][2] = -cos(roll)*sin(tilt)*sin(pan)-sin(roll)*cos(pan);
matrix[1][3] = 0;
matrix[2][0] = -sin(roll)*sin(tilt)*cos(pan)-cos(roll)*sin(pan);
matrix[2][1] = sin(roll)*cos(tilt);
matrix[2][2] = cos(roll)*cos(pan)-sin(roll)*sin(tilt)*sin(pan);
matrix[2][3] = 0;
matrix[3][0] = 0;
matrix[3][1] = 0;
matrix[3][2] = 0;
matrix[3][3] = 1;

Beispiele (lite-C):

...
#include <d3d9.h>

// calculate the difference between two angles
function ang_from_1_to_2(ANGLE *a,ANGLE *a1,ANGLE *a2)
{
D3DXMATRIX m1,m2,m2i,m;
ang_to_matrix(a1,&m1);
ang_to_matrix(a2,&m2);
D3DXMatrixTranspose(&m2i,&m2);
D3DXMatrixMultiply(&m,&m2i,&m1);
ang_for_matrix(a,&m);
}

Siehe auch:

vec_to_angle, vec_rotate, ang_rotate, ang_for_axis, ang_diff, view_to_matrix

► latest version online