Ejemplo n.º 1
0
        public static Viewport FromViewport2d(Viewport2d v)
        {
            Viewport ret = new Viewport();

            ret.Height = v.Height;
            ret.MaxZ   = (float)v.MaxZ;
            ret.MinZ   = (float)v.MinZ;
            ret.Width  = v.Width;
            ret.X      = v.X;
            ret.Y      = v.Y;
            return(ret);
        }
Ejemplo n.º 2
0
        public void Project(object viewport, Matrix4d projection, Matrix4d view, Matrix4d world)
        {
            //Microsoft.DirectX.Vector3 test = ConvertDX.FromVector3d(this);
            //test.Project(viewport, ConvertDX.FromMatrix4d(projection), ConvertDX.FromMatrix4d(view), ConvertDX.FromMatrix4d(world));

            Viewport2d vp = ConvertDX.ToViewport2d((Microsoft.DirectX.Direct3D.Viewport)viewport);

            Matrix4d m = world * view * projection;
            double   w = 1.0;

            MultiplyMatrix(m, ref w);

            this.X /= w;
            this.Y /= w;
            this.Z /= w;

            // Make x/y range from 0 to 1
            this.X = this.X * 0.5 + 0.5;
            this.Y = this.Y * 0.5 + 0.5;

            // Convert to to viewport coordinates (Y is inverted)
            this.X = this.X * vp.Width + vp.X;
            this.Y = vp.Height - this.Y * vp.Height + vp.Y;
        }
Ejemplo n.º 3
0
        public void Unproject(object viewport, Matrix4d projection, Matrix4d view, Matrix4d world)
        {
            //Microsoft.DirectX.Vector3 test = ConvertDX.FromVector3d(this);
            //test.Unproject(viewport, ConvertDX.FromMatrix4d(projection), ConvertDX.FromMatrix4d(view), ConvertDX.FromMatrix4d(world));

            Viewport2d vp = ConvertDX.ToViewport2d((Microsoft.DirectX.Direct3D.Viewport)viewport);

            // Convert from viewport coordinates
            this.X = (this.X - vp.X) / vp.Width;
            this.Y = (vp.Height + vp.Y - this.Y) / vp.Height;

            // Make x/y range from -1 to 1
            this.X = this.X * 2.0 - 1.0;
            this.Y = this.Y * 2.0 - 1.0;

            Matrix4d m = Matrix4d.Invert(world * view * projection);
            double   w = 1.0;

            MultiplyMatrix(m, ref w);

            this.X /= w;
            this.Y /= w;
            this.Z /= w;
        }