/// <summary> /// Apply the inverse local rotate/translate/scale at transform to frameIn /// </summary> public static Frame3f ApplyInverseTransform(ITransformed transform, Frame3f frameIn) { Frame3f result = transform.GetLocalFrame(CoordSpace.ObjectCoords).ToFrame(frameIn); result.Scale(1.0f / transform.GetLocalScale()); return(result); }
/// <summary> /// input objectF is in Object (local) coords of so, apply all intermediate /// transforms to get it to Scene coords /// </summary> public static Frame3f ObjectToScene(SceneObject so, Frame3f objectF) { Frame3f sceneF = objectF; SceneObject curSO = so; while (curSO != null) { Frame3f curF = curSO.GetLocalFrame(CoordSpace.ObjectCoords); Vector3f scale = curSO.GetLocalScale(); Util.gDevAssert(curSO == so || IsUniformScale(scale)); sceneF.Scale(scale); sceneF = curF.FromFrame(ref sceneF); SOParent parent = curSO.Parent; if (parent is FScene) { return(sceneF); } curSO = (parent as SceneObject); } if (curSO == null) { DebugUtil.Error("SceneTransforms.ObjectToScene: found null parent SO!"); } return(sceneF); }
/// <summary> /// Apply the inverse local rotate/translate/scale at transform to frameIn /// </summary> public static Frame3f ApplyInverseTransform(ITransformed transform, Frame3f frameIn) { Frame3f result = transform.GetLocalFrame(CoordSpace.ObjectCoords).ToFrame(ref frameIn); Vector3f scale = transform.GetLocalScale(); Util.gDevAssert(IsUniformScale(scale)); result.Scale(1.0f / scale); return(result); }
/// <summary> /// input objectF is in Object (local) coords of so, apply all intermediate /// transforms to get it to Scene coords /// </summary> public static Frame3f ObjectToScene(TransformableSO so, Frame3f objectF) { Frame3f sceneF = objectF; TransformableSO curSO = so; while (curSO != null) { Frame3f curF = curSO.GetLocalFrame(CoordSpace.ObjectCoords); Vector3f scale = curSO.GetLocalScale(); sceneF.Scale(scale); sceneF = curF.FromFrame(sceneF); SOParent parent = curSO.Parent; if (parent is FScene) { return(sceneF); } curSO = (parent as TransformableSO); } if (curSO == null) { DebugUtil.Error("SceneTransforms.TransformTo: found null parent SO!"); } return(sceneF); }