public ProjectiveCamera(AnimatedTransform c2w, Transform proj, float [] screenWindow, float sopen, float sclose, float lensr, float focald, Film f) : base(c2w, sopen, sclose, f) { // Initialize depth of field parameters lensRadius = lensr; focalDistance = focald; // Compute projective camera transformations CameraToScreen = //Perspective(fov, 1e-2f, 1000.f); proj; // Compute projective camera screen transformations ScreenToRaster = LR.Multiply(LR.Scale(film.xResolution, film.yResolution, 1.0f), LR.Scale(1.0f / (screenWindow[1] - screenWindow[0]), 1.0f / (screenWindow[2] - screenWindow[3]), 1.0f), LR.Translate(new Vector(-screenWindow[0], -screenWindow[3], 0.0f)) ); RasterToScreen = LR.Inverse(ScreenToRaster); RasterToCamera = LR.Multiply(LR.Inverse(CameraToScreen), RasterToScreen); }