private Matrix44 CorrectCameraTransform(Matrix44 origin) { Matrix44 rotationMatrix; Vector3 translation; Vector3 scale; origin.Decompose(out scale, out rotationMatrix, out translation); var newRotation = rotationMatrix.Rotation * CameraPostRotation; return(Matrix44.CreateRotation(newRotation) * Matrix44.CreateScale(scale) * Matrix44.CreateTranslation(translation)); }
Matrix44 CalcGizmoTransform(Matrix44 modelGlobalTransform, float gizmoRadiusInPixels) { var viewport = GetCurrentViewport3D(); var camera = viewport.Camera; Vector3 scale, translation; Quaternion rotation; modelGlobalTransform.Decompose(out scale, out rotation, out translation); float distance = (camera.Position - translation).Length; var vfov = camera.FieldOfView / camera.AspectRatio; float s = gizmoRadiusInPixels * distance * (2 * (float)Math.Tan(vfov / 2) / viewport.Height); return(Matrix44.CreateRotation(rotation) * Matrix44.CreateScale(s, s, s) * Matrix44.CreateTranslation(translation)); }
/*! * This is a conveniance function that allows you to set the rotation, scale, and translation of an AV object with a 4x4 matrix transform. * \n A 4x4 transformation matrix to set the AVObject's transform attributes with. * \sa INode::GetLocalTransform */ public void SetLocalTransform(Matrix44 value) => value.Decompose(translation, rotation, scale);