Here is a script here.

cam = game.Workspace.CurrentCamera
newrot = 0
camerarelpos = vector3.New(0,10,10) -- Distance of camera away from Subject
mouse = game.Players.LocalPlayer:GetMouse()
playerblock = Instance.New("Part")
playerblock.Parent = workspace

mouse.Button1Down:connect(function()
	if mouse.Target~=nil and mouse.Target.Name == "Plate" then
		local tar = mouse.Target
		local newloc = tar.Position +Vector3.new(0,1,0)
		local disp = (newloc - playerblock.Position) -- Displacement of the camera
		local ccam = cam.CFrame
		cam:Interpolate(ccam*CFrame.Angles(0,math.pi/2*newrot,0)* CFrame.new(camerarelpos)+disp,tar.CFrame+Vector3.new(0,1,0),1)
		playerblock.Position = newloc
	end
end)


Problem here is that I want to move the camera with the vector3 displacement, disp, so it follows the "playerblock" position, but for some reason the camera progressively Zooms out instead of maintaining the same distance over time. Is there something about CFrame that I am misunderstanding?