Developer knowledge network ยท moderated exchange

Onbetrouwbare Code-gemeenschap

Ontwikkelaarsonderzoek, reverse engineering en coderingsgemeenschap

Knowledge indexLive
4Categories
919Threads
2.8KBerichten
Guide

Reading Camera.CFrame & computing custom 3D to 2D projection in Luau

matrix_math_guy
Math Specialist
MEMBER
Vertegenwoordiger: 105
Datum van deelname: Aug 2018
Berichten: 52
Bedankt: 41
1 maanden geleden ยท Jul 2, 2026 11:30 PM
#1

How Roblox's Camera:WorldToViewportPoint works under the hood:

LUA
local function CustomWorldToScreen(worldPos)
    local camera = workspace.CurrentCamera
    local cframe = camera.CFrame
    local fov = camera.FieldOfView
    local viewport = camera.ViewportSize
    
    -- Transform world point to camera relative space
    local relPos = cframe:PointToObjectSpace(worldPos)
    if relPos.Z >= 0 then return Vector2.new(0, 0), false end -- Behind camera
    
    local aspect = viewport.X / viewport.Y
    local fovYRad = math.rad(fov)
    local fovXRad = 2 * math.atan(math.tan(fovYRad / 2) * aspect)
    
    local screenX = (viewport.X / 2) * (1 - (relPos.X / (-relPos.Z * math.tan(fovXRad / 2))))
    local screenY = (viewport.Y / 2) * (1 + (relPos.Y / (-relPos.Z * math.tan(fovYRad / 2))))
    return Vector2.new(screenX, screenY), true
end
luau_hacker
Luau Expert
MEMBER
Vertegenwoordiger: 159
Datum van deelname: Aug 2020
Berichten: 17
Bedankt: 26
1 maanden geleden ยท Jul 3, 2026 2:50 AM
#2

Mathematical projection matches Roblox's internal C++ implementation within 0.01 pixels. Great work!

raycast_ryan
Ballistics Dev
MEMBER
Vertegenwoordiger: 72
Datum van deelname: Sep 2019
Berichten: 32
Bedankt: 16
1 maanden geleden ยท Jul 3, 2026 1:46 PM
#3

PointToObjectSpace handles camera rotation matrix cleanly.