Roblox CFrame Converter: Local and World Space

Position a reference frame, rotate its axes, and convert the same three numbers as a point and as a vector. See where translation makes the difference.

Frame position

World position in studs.

Frame rotation

Degrees, XYZ order as in CFrame.Angles.

Local input

Use the same components once as a point and once as a vector.

Editor limits: coordinates ±1,000,000; angles ±360°. Your values reset on reload.

World XWorld YWorld ZLocal XLocal YLocal ZPoint
○ World origin● Frame origin● World point

Isometric sketch, auto-fitted. Axis lengths are illustrative. Use the numbers below for exact coordinates.

The point is drawn in world space. Colored axes belong to the frame; dashed gray axes belong to the world.

Results in world space

Point result
(12, 3, -7)
Vector result
(2, 1, -3)
Point round trip
(3, 1, 2)
Vector round trip
(3, 1, 2)

Point conversion includes the frame’s position. Vector conversion uses its rotation only. Round trips return to the input space, allowing for floating-point differences.

-- Numerical CFrame practice; does not move any object.
local frame = CFrame.new(10, 2, -4)
    * CFrame.Angles(math.rad(0), math.rad(90), math.rad(0))
local input = Vector3.new(3, 1, 2)

local pointResult = frame:PointToWorldSpace(input)
local vectorResult = frame:VectorToWorldSpace(input)
local pointRoundTrip = frame:PointToObjectSpace(pointResult)
local vectorRoundTrip = frame:VectorToObjectSpace(vectorResult)

print("Point result:", pointResult)
print("Vector result:", vectorResult)
print("Point round trip:", pointRoundTrip)
print("Vector round trip:", vectorRoundTrip)

Choose local or world input

A local point describes a location relative to a frame. A world point describes a location in the world’s coordinates. Choose the input space before entering the components; the output heading names the destination space.

The frame position is always entered in world coordinates. Changing the input-space selector keeps the numeric fields you entered and changes their interpretation. Use World round trip for a prepared inverse example.

A point includes position; a vector does not

The default frame is at (10, 2, -4), rotated 90 degrees about Y. The local input is (3, 1, 2). Its rotated components are (2, 1, -3), so the world point is (12, 3, -7). Interpreted as a vector, the result stays (2, 1, -3): no position is added.

Try Translation only. The point becomes (13, 3, -2), while the vector remains (3, 1, 2). Try Identity frame to remove both the rotation and translation. These examples make the effect of each part of the transform easier to inspect.

Convert back with the inverse transform

For a world point, the inverse first accounts for the frame’s position and then applies the inverse rotation. A vector needs only the inverse rotation. The round-trip rows apply the opposite operation to each result, so you can compare them with the original input.

A successful numerical round trip checks a coordinate calculation. It does not prove that the chosen frame, input space, or gameplay action is the one your feature intended. Always identify which object owns the reference frame.

Rotation order and angle units matter

This editor uses the XYZ order of CFrame.Angles. The official CFrame reference defines Angles as equivalent to fromEulerAnglesXYZ, with X × Y × Z composition. It separately defines point transformations and rotation-only vector transformations.

Angles in the fields are degrees. The export uses math.rad before constructing the frame. Changing several angles is sensitive to composition order; do not substitute the YXZ order of CFrame.fromOrientation and expect every result to match.

Read the sketch as a coordinate aid

The colored axes follow the frame’s orientation. The gray dashed axes belong to world space, and the amber marker is the interpreted point in world coordinates. The view auto-fits and uses illustrative axis lengths so you can inspect the relationship between the frame and point.

The sketch is an isometric projection, not a Roblox viewport or a physics preview. Two different three-dimensional locations can overlap in a projection. Read the numerical result when an exact coordinate matters.

Copy a complete numerical exercise

Copy or download the generated Luau, place it in a regular Script in ServerScriptService in a practice place, and inspect Output. It constructs the frame and input, then prints point/vector results and their inverse round trips. It does not move a Part or Model.

The browser uses double-precision numerical matrices. Displayed values use nine significant digits; exported inputs retain their numeric precision. Roblox output may differ slightly due to floating-point representation. The generated example has been documentation-reviewed; execution in Studio has not been verified here.

All nine numeric fields must be finite. Coordinates are limited to ±1,000,000 and angles to ±360 degrees as editor limits. Invalid or empty fields remove results and disable export. Values reset on reload.

Continue with the matching development task

Read the CFrame guide for context and a complete reference-frame exercise. Use the Vector3 calculator for distance and direction between points already in the same space. For applying a transform to a Model, continue with the Model pivot and tween guide.

Common questions

What is the difference between PointToWorldSpace and VectorToWorldSpace?

PointToWorldSpace rotates a local point and includes the frame’s position. VectorToWorldSpace rotates the components while ignoring the frame’s position. The converter shows both interpretations of the same input.

How do I convert a world point back to local space?

Choose World to local to use PointToObjectSpace for the point. The corresponding vector conversion is VectorToObjectSpace. The tool also shows inverse round trips for both.

Does the rotation use degrees or radians?

Enter degrees in the editor. The exported Luau converts them with math.rad and uses CFrame.Angles, whose rotation order is XYZ.

Does this tool run Roblox or move my objects?

No. It calculates numerical transforms in the browser and exports an Output exercise. The sketch is illustrative; the tool does not inspect a place, move objects, or test physics.