setRotationMatrix function
Constructs a rotation matrix in rotationMatrix
.
Sets rotationMatrix
to a rotation matrix built from
forwardDirection
and upDirection
. The right direction is
constructed to be orthogonal to forwardDirection
and
upDirection
.
forwardDirection
specifies the direction of the forward vector.
upDirection
specifies the direction of the up vector.
Use case is to build the per-model rotation matrix from vectors
forwardDirection
and upDirection
. See sample code below for
a context.
class Model {
Vector3 _center = new Vector3.zero(); // per-model translation
Vector3 _scale = new Vector3(1.0, 1.0, 1.0); // per-model scaling
Matrix4 _rotation = new Matrix4.identity(); // per-model rotation
Matrix4 _MV = new Matrix4.identity(); // per-model model-view
void updateModelViewUniform(RenderingContext gl, UniformLocation u_MV,
Vector3 camPosition, camFocusPosition, camUpDirection) {
// V = View (inverse of camera)
// T = Translation
// R = Rotation
// S = Scaling
setViewMatrix(_MV, camPosition, camFocusPosition, camUpDirection); // MV = V
_MV.translate(_center); // MV = V*T
_MV.multiply(_rotation); // MV = V*T*R
// _rotation is updated with setRotationMatrix(_rotation, forward, up);
_MV.scale(_scale); // MV = V*T*R*S
gl.uniformMatrix4fv(u_MV, false, _MV.storage);
}
}
Implementation
void setRotationMatrix(
Matrix4 rotationMatrix, Vector3 forwardDirection, Vector3 upDirection) {
setModelMatrix(rotationMatrix, forwardDirection, upDirection, 0.0, 0.0, 0.0);
}