Esempio n. 1
0
        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));
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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));
 }