/// <summary> /// translates scene so that focusPointS lies on camera forward axis. Also updates /// camera.Target to be at this point. /// </summary> public void PanFocusOnScenePoint(FScene scene, fCamera camera, Vector3f focusPointS) { Vector3f focusPointW = scene.ToWorldP(focusPointS); // figure out the pan that we would apply to camera, then apply the delta to the scene Vector3f camPosW = camera.GetPosition(); Vector3f camForward = camera.Forward(); float fDist = Vector3.Dot((focusPointW - camPosW), camForward); if (fDist == 0) { fDist = 2.0f * ((Camera)camera).nearClipPlane; } Vector3f newCamPosW = focusPointW - fDist * camForward; Vector3f delta = camPosW - newCamPosW; scene.RootGameObject.Translate(delta, false); camera.SetTarget(focusPointW + delta); }
public void ScenePanFocus(FScene scene, fCamera camera, Vector3f focusPointW, bool bAnimated) { CameraAnimator animator = camera.Animator(); if (bAnimated == false || animator == null) { // figure out the pan that we would apply to camera, then apply the delta to the scene Vector3f camPosW = camera.GetPosition(); Vector3f camForward = camera.Forward(); float fDist = Vector3.Dot((focusPointW - camPosW), camForward); Vector3f newCamPosW = focusPointW - fDist * camForward; Vector3f delta = camPosW - newCamPosW; scene.RootGameObject.Translate(delta, false); camera.SetTarget(focusPointW + delta); } else { animator.PanFocus(focusPointW); } }
public override void PreRender() { fCamera cam = Parent.Context.ActiveCamera; float zNear = 2 * cam.NearClipPlane; Vector3f forwardW = cam.Forward(); Vector3f gridCenterW = cam.GetPosition() + zNear * forwardW; Vector3f inCenterW = (Parent as FScene).ToWorldP(Center); //Vector3f gridDirS = (Parent as FScene).ToSceneN(forwardW); //Frame3f gridFrame = new Frame3f(gridCenter, gridDir); //Frame3f gridFrame = new Frame3f(Center, gridDirS); //Frame3f gridFrameW = new Frame3f(inCenterW, forwardW); Frame3f gridFrameW = new Frame3f(gridCenterW, forwardW); RootGameObject.SetWorldFrame(gridFrameW); if (grids_valid == false) { update_grids(); } }