private Matrix44 CorrectCameraTransform(Matrix44 origin) { origin.Decompose(out var scale, out Matrix44 rotationMatrix, out var translation); var newRotation = rotationMatrix.Rotation * CameraPostRotation; return(Matrix44.CreateRotation(newRotation) * Matrix44.CreateScale(scale) * Matrix44.CreateTranslation(translation)); }
public void Scale(Vector3 scale) { Matrix44 m = Matrix44.CreateScale(scale); if (MtxMode == NDSMatrixMode.Position || MtxMode == NDSMatrixMode.Position_Vector) { CurPosMtx = CurPosMtx * m; } }
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)); }
public override void Render() { if (Widget == null) { return; } Widget.RenderChainBuilder?.AddToRenderChain(renderChain); var oldCullMode = Renderer.CullMode; var oldWorld = Renderer.World; Renderer.CullMode = CullMode.None; Renderer.World = Matrix44.CreateScale(new Vector3(1, -1, 1)) * GlobalTransform; renderChain.RenderAndClear(); Renderer.Flush(); Renderer.World = oldWorld; Renderer.CullMode = oldCullMode; }
protected internal override Lime.RenderObject GetRenderObject() { if (Widget == null) { return(null); } var ro = RenderObjectPool <RenderObject> .Acquire(); ro.World = Matrix44.CreateScale(new Vector3(1, -1, 1)) * GlobalTransform; ro.Opaque = false; ro.DistanceToCamera = CalcDistanceToCamera(Viewport.Camera); try { Widget.RenderChainBuilder?.AddToRenderChain(renderChain); renderChain.GetRenderObjects(ro.Objects); } finally { renderChain.Clear(); } return(ro); }
public void Scale(float sx, float sy) { Effect(Matrix44.CreateScale(sx, sy, 1)); }