Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 扫掠式AABB与AABB碰撞试验不起作用_Lua_Collision Detection_Detection_Aabb - Fatal编程技术网

Lua 扫掠式AABB与AABB碰撞试验不起作用

Lua 扫掠式AABB与AABB碰撞试验不起作用,lua,collision-detection,detection,aabb,Lua,Collision Detection,Detection,Aabb,我正在尝试移植Gomez的扫描AABB vs AABB碰撞检测算法,如Lua所示,但我无法让它工作。它将检测输出时间等于零的“碰撞”,几乎在任何地方,以及其他不准确的地方。我做错什么了吗 local axis = {"x","y","z"} -- box1 is the moving box, disp is the box's displacement, box2 is stationary function Collision.swept_aabb_vs_aabb(box1, disp, b

我正在尝试移植Gomez的扫描AABB vs AABB碰撞检测算法,如Lua所示,但我无法让它工作。它将检测输出时间等于零的“碰撞”,几乎在任何地方,以及其他不准确的地方。我做错什么了吗

local axis = {"x","y","z"}
-- box1 is the moving box, disp is the box's displacement, box2 is stationary
function Collision.swept_aabb_vs_aabb(box1, disp, box2)
    local a = box2
    local b = box1
    local amin = a:minCorner()
    local amax = a:maxCorner()
    local bmin = b:minCorner()
    local bmax = b:maxCorner()
    local u0d, u1d = vector(0,0,0), vector(1,1,1)

    for i=1,3 do
        local ax = axis[i]
        if amax[ax] < bmin[ax] and disp[ax] < 0 then
            u0d[ax] = (amax[ax] - bmin[ax]) / disp[ax]
        elseif bmax[ax] < amin[ax] and disp[ax] > 0 then
            u0d[ax] = (amin[ax] - bmax[ax]) / disp[ax]
        end

        if bmax[ax] > amin[ax] and disp[ax] < 0 then
            u1d[ax] = (amin[ax] - bmax[ax]) / disp[ax]
        elseif amax[ax] > bmin[ax] and disp[ax] > 0 then
            u1d[ax] = (amax[ax] - bmin[ax]) / disp[ax]
        end
    end

    local u0 = max(u0d.x,u0d.y,u0d.z)
    local u1 = min(u1d.x,u1d.y,u1d.z)
    if u0 <= u1 then return u0 else return nil end
end
localaxis={“x”、“y”、“z”}
--box1是移动的盒子,disp是盒子的位移,box2是静止的
函数冲突。扫掠_-aabb_与_-aabb(第1框,显示,第2框)
本地a=box2
本地b=box1
局部amin=a:minCorner()
本地amax=a:maxCorner()
本地bmin=b:minCorner()
本地bmax=b:maxCorner()
局部u0d,u1d=向量(0,0,0),向量(1,1,1)
对于i=1,3 do
局部ax=轴[i]
如果amax[ax]0然后
u0d[ax]=(amin[ax]-bmax[ax])/disp[ax]
结束
如果bmax[ax]>amin[ax]且disp[ax]<0,则
u1d[ax]=(amin[ax]-bmax[ax])/disp[ax]
elseif amax[ax]>bmin[ax]和disp[ax]>0然后
u1d[ax]=(amax[ax]-bmin[ax])/disp[ax]
结束
结束
本地u0=最大值(u0d.x,u0d.y,u0d.z)
局部u1=最小值(u1d.x,u1d.y,u1d.z)

如果u0似乎已经修复了它

local axis = {"x","y","z"}
function Collision.swept_aabb_vs_aabb(box1, disp, box2)
    local amin = box2:minCorner()
    local amax = box2:maxCorner()
    local bmin = box1:minCorner()
    local bmax = box1:maxCorner()
    local u0, u1 = -math.huge, math.huge

    for i=1,3 do
        local ax = axis[i]
        if amax[ax] < bmin[ax]then
            if disp[ax] < 0 then
                local u_0 = (amax[ax] - bmin[ax]) / disp[ax]
                if u_0 > u0 then
                    u0 = u_0
                end
            else
                return nil
            end
        elseif bmax[ax] < amin[ax] then
            if disp[ax] > 0 then
                local u_0 = (amin[ax] - bmax[ax]) / disp[ax]
                if u_0 > u0 then
                    u0 = u_0
                end
            else
                return nil
            end
        end

        if bmax[ax] > amin[ax] and disp[ax] < 0 then
            local u_1 = (amin[ax] - bmax[ax]) / disp[ax]
            if u_1 < u1 then u1 = u_1 end
        elseif amax[ax] > bmin[ax] and disp[ax] > 0 then
            local u_1 = (amax[ax] - bmin[ax]) / disp[ax]
            if u_1 < u1 then u1 = u_1 end
        end
    end

    if u0 <= u1 and u0 >= 0 and u0 <= 1 then return u0 else return nil end
end
localaxis={“x”、“y”、“z”}
函数冲突。扫掠_-aabb_与_-aabb(第1框,显示,第2框)
局部amin=box2:minCorner()
本地amax=box2:maxCorner()
本地bmin=box1:minCorner()
本地bmax=box1:maxCorner()
局部u0,u1=-math.ground,math.ground
对于i=1,3 do
局部ax=轴[i]
如果amax[ax]u0,则
u0=u_0
结束
其他的
归零
结束
elseif bmax[ax]0,则
局部u_0=(amin[ax]-bmax[ax])/disp[ax]
如果u_0>u0,则
u0=u_0
结束
其他的
归零
结束
结束
如果bmax[ax]>amin[ax]且disp[ax]<0,则
局部u_1=(amin[ax]-bmax[ax])/disp[ax]
如果u_1bmin[ax]和disp[ax]>0然后
局部u_1=(amax[ax]-bmin[ax])/disp[ax]
如果u_1