void generateRay(const Point2 &dirSample, const Point2 &lensSample, Float timeSample, Ray &ray) const { ++cameraRays; Float u = dirSample.x * m_invResolution.x, v = dirSample.y * m_invResolution.y; Vector direction = squareToSphereY(u, v); Point2 uvPrime = sphereToSquareY(direction); if ((std::abs(uvPrime.x-u) > Epsilon || std::abs(uvPrime.y-v)>Epsilon) && u < 1 && v < 1 && u > 0 && v > 0) cout << uvPrime.toString() << " vs " << u << ", " << v << endl; /* Construct ray in camera space */ Ray localRay(Point(0.0f), direction, m_shutterOpen + m_shutterOpenTime * timeSample); /* Transform into world space */ m_cameraToWorld(localRay, ray); }
Vector Camera::GetLookVector() { return Vector(-m_cameraToWorld(0,2), -m_cameraToWorld(1,2), -m_cameraToWorld(2, 2)); }
Vector Camera::GetUpVector() { return Vector(m_cameraToWorld(0, 1), m_cameraToWorld(1, 1), m_cameraToWorld(2, 1)); }
Point Camera::GetEyePoint() { return Point(m_cameraToWorld(0,3), m_cameraToWorld(1,3), m_cameraToWorld(2, 3)); }