GE Lua Documentation

Press F to search!

intersectsRay_Triangle

Definition


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

-- returns hit distance, barycentric x, y
function intersectsRay_Triangle(rpos, rdir, a, b, c)
  local ca, bc = c - a, b - c
  local norm = ca:cross(bc)
  local rposc = rpos - c
  local pOnTri = rposc:dot(norm) / rdir:dot(norm)
  if pOnTri <= 0 then
    local pacnorm = (rposc - rdir * pOnTri):cross(norm)
    local bx, by = bc:dot(pacnorm), ca:dot(pacnorm)
    if min(bx, by) >= 0 then
      local normSq = norm:squaredLength() + 1e-30
      if bx + by <= normSq then
        return -pOnTri, bx / normSq, by / normSq
      end
    end
  end
  return math.huge, -1, -1
end

Callers

@/lua/ge/extensions/editor/gen/mesh.lua
			for i = 1,#m.faces,3 do
				local d, bx, by = intersectsRay_Triangle(
					ray.pos, ray.dir,
--        for i  = 1,#m.faces,6 do
--            local d, bx, by = intersectsRay_Triangle(
--    core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
--    core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
			local d, bx, by = intersectsRay_Triangle(
	pfr, pto - pfr,
		for i  = 1,#m.faces,6 do
			local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
				local f = mto.faces[i]
				local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
		for i  = 1,#m.faces,6 do
			local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
				local f = mto.ref[i]
				local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
		for i  = 1,#m.faces,6 do
			local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
			for _,t in pairs(mto.ref) do
				local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
			for i  = 1,#mto.faces,6 do
				local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
		for i  = 1,#m.faces,6 do
			local d, bx, by = intersectsRay_Triangle(
core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
			for i  = 1,#mto.faces,6 do
				local d, bx, by = intersectsRay_Triangle(
	core_camera.getPosition(), rayCast.pos - core_camera.getPosition(),
@/lua/ge/extensions/editor/gen/world.lua
			--                lo('?? for_k:'..k..'/'..#f.top.af)
					d = intersectsRay_Triangle(ray.pos, ray.dir,
						desctop.av[desctop.af[k].v+1], desctop.av[desctop.af[k+1].v+1], desctop.av[desctop.af[k+2].v+1])
      -- local phit = U.ray2plane(ray,p,vec3(0,0,1))
			d = intersectsRay_Triangle(ray.pos, ray.dir,
				base2world(desc, {i,j}),
			end
			d = intersectsRay_Triangle(ray.pos, ray.dir,
				base2world(desc, {i,j+1}),
@/lua/ge/extensions/gameplay/sites/zone.lua
  for _, vertices in ipairs(fenceVertices) do
    local hitDist1 = intersectsRay_Triangle(rayPos, rayDir, vertices.a, vertices.b, vertices.c)
    local hitDist2 = intersectsRay_Triangle(rayPos, rayDir, vertices.c, vertices.d, vertices.a)
    local hitDist1 = intersectsRay_Triangle(rayPos, rayDir, vertices.a, vertices.b, vertices.c)
    local hitDist2 = intersectsRay_Triangle(rayPos, rayDir, vertices.c, vertices.d, vertices.a)
    local dist = math.min(hitDist1, hitDist2)
@/lua/ge/extensions/editor/aiViz.lua
            local p4 = mapNodes[otherNid].pos + perpendicularDir * mapNodes[otherNid].radius + vec3(0, 0, 0.5)
            local hitDist1 = intersectsRay_Triangle(camPos, rayDir, p1, p2, p3)
            local hitDist2 = intersectsRay_Triangle(camPos, rayDir, p1, p3, p4)
            local hitDist1 = intersectsRay_Triangle(camPos, rayDir, p1, p2, p3)
            local hitDist2 = intersectsRay_Triangle(camPos, rayDir, p1, p3, p4)
            local hitDist = math.min(hitDist1, hitDist2)
@/lua/ge/extensions/editor/audioRibbonEditor.lua
          tmpPos:set(node.x, node.y, maxRayDist)
          local hitDist1 = intersectsRay_Triangle(tmpPos, globalDown, c0, c2, c0Next)
          local hitDist2 = intersectsRay_Triangle(tmpPos, globalDown, c2, c2Next, c0Next)
          local hitDist1 = intersectsRay_Triangle(tmpPos, globalDown, c0, c2, c0Next)
          local hitDist2 = intersectsRay_Triangle(tmpPos, globalDown, c2, c2Next, c0Next)
          local riverHeight = nil
@/lua/ge/extensions/editor/slotTrafficEditor.lua
            local p4 = mapNodes[otherNid].pos + perpendicularDir * mapNodes[otherNid].radius + vec3(0, 0, 0.5)
            local hitDist1 = intersectsRay_Triangle(camPos, rayDir, p1, p2, p3)
            local hitDist2 = intersectsRay_Triangle(camPos, rayDir, p1, p3, p4)
            local hitDist1 = intersectsRay_Triangle(camPos, rayDir, p1, p2, p3)
            local hitDist2 = intersectsRay_Triangle(camPos, rayDir, p1, p3, p4)
            local hitDist = math.min(hitDist1, hitDist2)