private Ray getRay(double row, double col, double dx, double dy) {
		Vector aim = lookat.sub(location).norm();
		Vector horizontal = aim.cross(new Vector(0,0,1)).norm();
		if (horizontal.length() == 0)
			horizontal = new Vector(1,0,0);
		Vector vertical = horizontal.cross(aim).norm();
		Vector center = location.add(aim.mult(zoom));
		double x = -0.5 * width + col * dx;
		double y = +0.5 * height - row * dy;
		Vector pixel = center.add(horizontal.mult(x)).add(vertical.mult(y));
		Ray ray = new Ray(location, pixel.sub(location));
		return ray;
	}