Ejemplo n.º 1
0
        private Ray ViewportToRayMouse(int x, int y)
        {
            Matrix4 cameraProjectionMatrix = mCamera.GetProjMatrix();
            Matrix4 cameraWorldMatrix      = mCamera.GetWorldMatrix();
            Vector3 direction;

            // convert to view space
            direction.X = ((2.0f * x / mWidth - 1)) / cameraProjectionMatrix.M11;
            direction.Y = -((2.0f * y / mHeight - 1)) / cameraProjectionMatrix.M22;
            direction.Z = 1.0f / cameraProjectionMatrix.M33;

            direction = Vector4.Transform(new Vector4(direction.X, direction.Y, direction.Z, 0.0f), cameraWorldMatrix).Xyz;

            Vector3 rayPos = cameraWorldMatrix.Row3.Xyz;
            Vector3 rayDir = direction.Normalized();

            return(new Ray(rayPos, rayDir));
        }