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); }
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(); }