Viewport state. (view.x, view.y) is the world point currently rendered at the canvas top-left; view.scale.x / view.scale.y is pixels per world unit on each axis (default { x: 1, y: 1 }). So:
(view.x, view.y)
view.scale.x
view.scale.y
{ x: 1, y: 1 }
screenX = (worldX - view.x) * view.scale.x screenY = (worldY - view.y) * view.scale.y worldX = screenX / view.scale.x + view.x worldY = screenY / view.scale.y + view.y
scale is always a 2-vector. Input convenience types ZoomFactor and ZoomBound let callers pass a scalar when they want both axes treated the same.
scale
Viewport state.
(view.x, view.y)is the world point currently rendered at the canvas top-left;view.scale.x/view.scale.yis pixels per world unit on each axis (default{ x: 1, y: 1 }). So:screenX = (worldX - view.x) * view.scale.x screenY = (worldY - view.y) * view.scale.y worldX = screenX / view.scale.x + view.x worldY = screenY / view.scale.y + view.y
scaleis always a 2-vector. Input convenience types ZoomFactor and ZoomBound let callers pass a scalar when they want both axes treated the same.