How to have camera lerp lookvectors based on character position

I have a 3rd person camera, which I want to be able to change dynamically as players move around the map.

I’m unsure how to plugin this LookVector tho. Basically, the camera needs to rotate once I touch a specific part. Ideally it’d lerp slower around too. I set the lerp to high because when the camera is in a solid 3rd person look, it should stay reasonable close to the exact position, but when rotating, i dont want it to immediately snap
ezgif.com-gif-maker (93)
So touching blue would set lookvector back to 0,0,0, but touching the pink should make camera rotate on that lookvector (can see cone handle for orientation)

local OFFSET = Vector3.new(-15, 6, 0)
local INTERIOR_OFFSET = Vector3.new(-15, 9, 0)
local FOV = 65
local CameraLookVector = Vector3.new(0, 0, 0)

--// Get the default position for the camera
function CameraController:GetDefaultPosition()
	local Character = game.Players.LocalPlayer.Character
	if not Character then return end

	local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
	if not HumanoidRootPart then return end
	
	local PlayerPosition = HumanoidRootPart.Position
	local CameraPosition = PlayerPosition + (game.Players.LocalPlayer:GetAttribute("Inside") and INTERIOR_OFFSET or OFFSET)
	
	return PlayerPosition, CameraPosition
end

--// Update camera movement
function CameraController:Update()	
	-- Get default position
	local PlayerPosition, CameraPosition = self:GetDefaultPosition()
	if not PlayerPosition or not CameraPosition then return end
	
	local To = CFrame.new(CameraPosition, PlayerPosition)
	
	CurrentCamera.CFrame = CurrentCamera.CFrame:Lerp(To, 0.5)
end

for _, v in pairs(CollectionService:GetTagged("Camera")) do
	v.Touched:Connect(function(hit)
		local Character = hit.Parent
		if not Character then return end
		
		local TouchedPlayer = game.Players:GetPlayerFromCharacter(Character)
		if not TouchedPlayer then return end
		
		if TouchedPlayer ~= game.Players.LocalPlayer then return end
		
		CameraLookVector = v.LookVector
	end)
end

Will the camera only be rotated on the y axis? If so, you could:
- Store a number for the goal y axis rotation
- Store a number for the current y axis rotation
- Lerp the current rotation variable to the goal variable (in Update)
- Calculate a new CFrame for the camera (in Update)

To calculate the new CFrame you can use something like this:

local CurrentCameraYRotation = 45
local PlayerPosition, CameraPosition = CameraController:GetDefaultPosition()

 -- Make a CFrame with the correct rotation
local cframe = CFrame.Angles(0, math.rad(CurrentCameraYRotation), 0)
-- Translate the CFrame relatively based on the offset
cframe *= CFrame.new(CameraPosition)
-- Move the CFrame over to the character
cframe += PlayerPosition

Edit:
Oh another thing, you probably want to make the rotation rate time dependent.

Ex:

local function lerp(a,b,c)
    return a+(b-a)*c
end

local CurrentYAxisRotation = 0
local GoalYAxisRotation = 90

local Rate = 0.05

-- Frame dependant:
local function Update()
    lerp(CurrentYAxisRotation, GoalYAxisRotation, Rate)
end

-- Time dependant:
local function Update(DeltaTime)
    lerp(CurrentYAxisRotation, GoalYAxisRotation, math.pow(Rate, 1/DeltaTime))
end

Edit:

I probably just should have answered the question, to lerp lookvectors you can use slerp. There are some forum posts with different slerp algorithms if you search slerp.