Beispiel #1
0
CTransform CTransformFromAxisAngle(const CVector3f& axis, float angle) {
  CTransform result;
  CVector3f axisN = axis.normalized();

  float c = std::cos(angle);
  float s = std::sin(angle);
  float t = 1.f - c;

  result.basis.m[0][0] = t * axisN[0] * axisN[0] + c;
  result.basis.m[1][0] = t * axisN[0] * axisN[1] - axisN[2] * s;
  result.basis.m[2][0] = t * axisN[0] * axisN[2] + axisN[1] * s;

  result.basis.m[0][1] = t * axisN[0] * axisN[1] + axisN[2] * s;
  result.basis.m[1][1] = t * axisN[1] * axisN[1] + c;
  result.basis.m[2][1] = t * axisN[1] * axisN[2] - axisN[0] * s;

  result.basis.m[0][2] = t * axisN[0] * axisN[2] - axisN[1] * s;
  result.basis.m[1][2] = t * axisN[1] * axisN[2] + axisN[0] * s;
  result.basis.m[2][2] = t * axisN[2] * axisN[2] + c;

  return result;
}