Game Development Reference

In-Depth Information

result.setTranspose(*this);

return result;

}

};

It will be useful at several points in the engine to transpose rather than request a

full inverse when we know the matrix is a rotation matrix only.

There is no point implementing a transpose function for the 3

4matrix.It

doesn't have a geometric correlate: transposing a homogeneous matrix doesn't make

sense geometrically. If there is any non-zero element in the fourth column, then it

will be transposed into the fourth row, which we don't have in our matrix.

This makes sense: we will only use transposition to do cheap inverses on rotation

matrices. If the 3

×

4 were a pure rotation matrix with no translation, then it would

have zeros in its fourth column. If this were the case, we could represent it as a 3

×

×

3

matrix.

There are other reasons to transpose a matrix, outside of our needs. If you are

working with an existing matrix library with a full 4

×

4 matrix implementation, it is

likely to have a transpose function.

9.4.4

C
ONVERTING A
Q
UATERNION TO A
M
ATRIX

In addition to matrix manipulation, we'll need an operation to convert a quaternion

to a matrix. Your graphics engine is likely to need transformations expressed as a

matrix. In order to draw an object we'll need to convert from its position vector and

orientation quaternion into a transform matrix for rendering.

Sometimes we'll want just the rotation matrix in its 3

3 form, and other times

we'll want the full transformation matrix. In each case the conversion from a quater-

nion to a matrix uses the results we saw in sections 9.2.3 and 9.2.4, where both the

quaternion and the rotation matrix were expressed in terms of an axis and an angle.

We could reconstruct the axis and angle from the quaternion and then feed it

into equation 9.3. If we do this, we can simplify out the axes and angles and find an

expression for the matrix purely in terms of the coefficients of the quaternion

×

⎡

⎣

⎤

⎦

(
2
y
2

2
z
2
)

1

−

+

2
xy

+

2
zw

2
xz

−

2
yw

(
2
x
2

2
z
2
)

Θ

=

2
xy

−

2
zw

1

−

+

2
yz

+

2
xw

2
xz

+

2
yw

2
yz

−

2
xw

1

−
(
2
x
2

+

2
y
2
)

where
w
,
x
,
y
,and
z
are the components of the quaternion

⎡

⎤

w

x

y

z

⎣

⎦

θ

ˆ

=