GE Lua Documentation

Press F to search!

intersectsRay_OBB

Definition


-- @/lua/common/mathlib.lua:1429

-- hit: minhit < maxhit and maxhit > 0, inside: minhit < 0 and maxhit > 0
function intersectsRay_OBB(rpos, rdir, c1, x1, y1, z1)
  tmpv1:setSub2(c1, rpos)
  local rposc1x1, x1sq, invrdirx1 = tmpv1:dot(x1), x1:squaredLength(), 1 / rdir:dot(x1)
  local dx1, dx2 = (rposc1x1 - x1sq) * invrdirx1, min((rposc1x1 + x1sq) * invrdirx1, math.huge)
  local rposc1y1, y1sq, invrdiry1 = tmpv1:dot(y1), y1:squaredLength(), 1 / rdir:dot(y1)
  local dy1, dy2 = (rposc1y1 - y1sq) * invrdiry1, min((rposc1y1 + y1sq) * invrdiry1, math.huge)
  local rposc1z1, z1sq, invrdirz1 = tmpv1:dot(z1), z1:squaredLength(), 1 / rdir:dot(z1)
  local dz1, dz2 = (rposc1z1 - z1sq) * invrdirz1, min((rposc1z1 + z1sq) * invrdirz1, math.huge)

  local minhit, maxhit = max(min(dx1, dx2), min(dy1, dy2), min(dz1, dz2)), min(max(dx1, dx2), max(dy1, dy2), max(dz1, dz2))
  return (minhit <= maxhit and minhit or math.huge), maxhit
end

Callers

@/lua/ge/extensions/freeroam/crashCamMode.lua
local function intersectRayOBB(rayPos, rayDir, bb)
  return intersectsRay_OBB(rayPos, rayDir, bb:getCenter(), bb:getAxis(0) * bb:getHalfExtents().x, bb:getAxis(1) * bb:getHalfExtents().y, bb:getAxis(2) * bb:getHalfExtents().z)
end
@/lua/ge/extensions/editor/sitesEditor/parkingSpots.lua
        local rotated = (node.scl * 0.5):rotated(rot)
        local minDist, maxDist = intersectsRay_OBB(mouseInfo.camPos, mouseInfo.rayDir:normalized(), pos, vec3(rotated.x, 0, 0), vec3(0, rotated.y, 0), vec3(0, 0, rotated.z))
        if minDist > 0 and maxDist > 0 and minDist < maxDist and minDist < minNodeDist then -- camera needs to be outside of bounding box to select object
@/lua/vehicle/ai.lua
  for i = 1, twt.OBBinRange.n, 4 do
    local minHit, maxHit = intersectsRay_OBB(rpos, rdir, twt.OBBinRange[i], twt.OBBinRange[i+1], twt.OBBinRange[i+2], twt.OBBinRange[i+3])
    if maxHit > 0 then
    local ego2PlDirVec = plC - ego.pos; ego2PlDirVec:normalize()
    local minHit = intersectsRay_OBB(ego.pos, ego2PlDirVec, plC, plX, plY, plZ)
    local plSpeedFromego = player.vel:dot(ego2PlDirVec)