public static DXViewport ConvertToViewport(Viewport3D vp)
        {
            DXViewport viewport = new DXViewport();
            viewport.X = vp.Left;
            viewport.Y = vp.Top;
            viewport.Width = vp.Width;
            viewport.Height = vp.Height;

            return viewport;
        }
        public static DXViewport ConvertToViewport(Viewport3D vp)
        {
            DXViewport viewport = new DXViewport();

            viewport.X      = vp.Left;
            viewport.Y      = vp.Top;
            viewport.Width  = vp.Width;
            viewport.Height = vp.Height;

            return(viewport);
        }
Beispiel #3
0
        public void SetMousePosition(Point posPoint)
        {
            Console.WriteLine(posPoint);
            #region first try

            /*_mousePosition.X = _mapVector3.X + (float)posPoint.X - _control.Device.Viewport.Width / 2;
             * _mousePosition.Y = _mapVector3.Y + (float)posPoint.Y - _control.Device.Viewport.Height / 2;*/

            /*Matrix view = _control.Device.GetTransform(Dx9.TransformState.View);
             * Matrix projection = _control.Device.GetTransform(Dx9.TransformState.Projection);
             * Console.WriteLine(Matrix.LookAtLH(_mapVector3, new Vector3(_mapVector3.X, _mapVector3.Y, 0), new Vector3(0, -1, 0)));
             * Console.WriteLine(Matrix.PerspectiveFovLH((float)Math.PI / 3, (float)_control.Device.Viewport.Width / _control.Device.Viewport.Height, 0f, 2000f));
             * Console.WriteLine("World     : " + _control.Device.GetTransform(Dx9.TransformState.World));
             * Console.WriteLine("View      : " + view);
             * Console.WriteLine("Projection: " + projection);
             *
             *
             * Matrix worldview = Matrix.Multiply(Matrix.Identity,
             *  Matrix.LookAtLH(_mapVector3, new Vector3(_mapVector3.X, _mapVector3.Y, 0), new Vector3(0, -1, 0)));//_control.Device.GetTransform(Dx9.TransformState.View));
             * Matrix worldviewprojection = Matrix.Multiply(worldview,
             *  Matrix.PerspectiveFovLH((float) Math.PI/3,(float) _control.Device.Viewport.Width/_control.Device.Viewport.Height, 0f, 2000f));//_control.Device.GetTransform(Dx9.TransformState.Projection));
             * worldviewprojection.Invert();
             *
             * float pointX = (float)((2.0 * ((float)posPoint.X) / _control.Device.Viewport.Width) - 1.0f);
             * float pointY = (float)((2.0 * (((float)posPoint.Y) / _control.Device.Viewport.Height)) - 1.0f) * -1.0f;
             * Vector3 orig = new Vector3(pointX, pointY, 0.0f);
             * Vector3 far  = new Vector3(pointX, pointY, 1.0f);
             *
             * //This gets mouse position on near plane
             * Vector3 origin = Vector3.TransformCoordinate(orig, worldviewprojection);
             *
             * //This gets mouse position on far plane
             * Vector3 posfar = Vector3.TransformCoordinate(far, worldviewprojection);
             *
             * _mousePosition = origin;
             *
             * Console.WriteLine("Origin: " + _mousePosition);
             * Console.WriteLine("-------------------------");*/
            #endregion

            #region second try

            /*int screenWidth = _control.Device.Viewport.Width;
             * int screenHeight = _control.Device.Viewport.Height;
             * float aspectRatio = screenWidth / (float)screenHeight;
             * float fov = (float)Math.PI / 3f;
             * float near = 0.1f;
             * float far = 2000f;
             *
             * float nx = (float)posPoint.X / (screenWidth / 2 - 1) / aspectRatio;
             * float ny = (1 - (float)posPoint.Y) / (screenHeight / 2f);
             *
             * float ratioX = (float)Math.Tan(fov / 2) * nx;
             * float ratioY = (float)Math.Tan(fov / 2) * ny;
             *
             * Vector3 P1 = new Vector3();
             * Vector3 P2 = new Vector3();
             *
             * Vector3 P3 = new Vector3();
             *
             * P1.X = ratioX * near;
             * P1.Y = ratioY * near;
             * P1.Z = near;
             *
             *
             * P2.X = ratioX * far;
             * P2.Y = ratioY * far;
             * P2.Z = far;*/

            /*P3.X = ratioX*_mapVector3.Z + _mapVector3.X;//-screenWidth/2f;
             * P3.Y = ratioY*_mapVector3.Z*-1 + _mapVector3.Y;//-screenHeight/2f;
             *
             * _mousePosition = P3;
             *
             * Console.WriteLine(posPoint);
             * Console.WriteLine(_mousePosition);
             * Console.WriteLine("-------------------------");*/
            #endregion

            #region third try

            /*Matrix worldview = Matrix.Multiply(Matrix.Identity,_control.Device.GetTransform(Dx9.TransformState.View));
             * Matrix worldviewprojection = Matrix.Multiply(worldview,_control.Device.GetTransform(Dx9.TransformState.Projection));
             *
             * Ray ray = GetPickRay((float)posPoint.X, (float)posPoint.Y, _control.Device.Viewport.Width, _control.Device.Viewport.Height, worldviewprojection);
             *
             * Vector3 result = IntersectLine(ray.Position, ray.Position + ray.Direction);
             * _mousePosition = result;
             *
             * Console.WriteLine(_mousePosition);*/
            #endregion

            #region fours try

            float m_iClientSizeW = _control.Device.Viewport.Width;
            float m_iClientSizeH = _control.Device.Viewport.Height;

            Matrix worldview           = _control.Device.GetTransform(Dx9.TransformState.View);
            Matrix worldviewprojection = Matrix.Multiply(worldview, _control.Device.GetTransform(Dx9.TransformState.Projection));

            Dx9.Viewport vp = _control.Device.Viewport;

            // Unproject near plane
            Vector3 vNear  = new Vector3((float)posPoint.X, (float)posPoint.Y, 0);
            Vector3 vFar   = new Vector3((float)posPoint.X, (float)posPoint.Y, 1);
            Vector3 vNearW = Vector3.Unproject(vNear,
                                               0, 0,
                                               m_iClientSizeW, m_iClientSizeH,
                                               0, 1, Matrix.Identity * worldviewprojection);

            Vector3 vFarW = Vector3.Unproject(vFar,
                                              0, 0,
                                              m_iClientSizeW, m_iClientSizeH,
                                              0, 1, Matrix.Identity * worldviewprojection);

            Ray ray = new Ray(vNearW, vFarW - vNearW);

            Console.WriteLine(ray.Position);
            Console.WriteLine(ray.Direction);

            #endregion

            #region five try

            /*Matrix worldview = _control.Device.GetTransform(Dx9.TransformState.View);
             * Matrix worldviewprojection = Matrix.Multiply(worldview, _control.Device.GetTransform(Dx9.TransformState.Projection));
             *
             * Vector3 worldSpaceCoordinates = new Vector3((float)posPoint.X, (float)posPoint.Y, 0);
             *
             * Dx9.Viewport vp = _control.Device.Viewport;
             * Vector3 screenCoords = Vector3.Project(worldSpaceCoordinates, vp.X, vp.Y, vp.Width, vp.Height, vp.MinZ, vp.MaxZ, worldviewprojection);
             *
             * _mousePosition = screenCoords;
             *
             * Console.WriteLine(_mousePosition);*/
            #endregion

            Console.WriteLine("--------------------------------------");

            _control.ForceRendering();
        }