Exemplo n.º 1
0
Vector SphericalCamera::screenToWorld(const Vector &ssP, const PTime time) const
{
  SphericalCoords sc;
  sc.longitude = ssP.x * M_PI;
  sc.latitude  = ssP.y * (M_PI * 0.5);
  sc.radius    = ssP.z;
  Vector csP = sphereToCart(sc);
  return cameraToWorld(csP, time);
}
Exemplo n.º 2
0
real_t OrthoCamera::generateRayDifferential(const CameraSample &sample,
                                            RayDifferential *rd) const {
  // compute main orthographic viewing ray
  // compute ray differentials for krthografic camera
  if (lensRadius > 0) {
    // caompute orthographic camera ray differentials accounting for lens
  } else {
    rd->rxOrigin = rd->o + dxCamera;
    rd->ryOrigin = rd->o + dyCamera;
    rd->rxDirection = rd->ryDirection = rd->d;
  }
  rd->time = ponos::lerp(sample.time, shutterOpen, shutterClose);
  rd->hasDifferentials = true;
  // TODO ENABLE ray->medium = medium;
  cameraToWorld(*rd, rd);
  return 1;
}
Exemplo n.º 3
0
real_t OrthoCamera::generateRay(const CameraSample &sample, HRay *ray) const {
  // generate raster and camera sample positions
  ponos::Point3 pFilm(sample.pFilm.x, sample.pFilm.y, 0);
  ponos::Point3 pCamera = rasterToCamera(pFilm);
  *ray = HRay(pCamera, ponos::vec3(0, 0, 1));
  // modify ray for depth of field
  if (lensRadius > 0.) {
    // TODO pg 315
    // sample point on lens
    // compute point on plane of focus
    // update ray for effect of lens
  }
  ray->time = ponos::lerp(sample.time, shutterOpen, shutterClose);
  // TODO ENABLE ray->medium = medium;
  cameraToWorld(*ray, ray);
  return 1;
}